1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef NET_SOCKET_SSL_SERVER_SOCKET_H_ 6#define NET_SOCKET_SSL_SERVER_SOCKET_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/scoped_ptr.h" 10#include "net/base/completion_callback.h" 11#include "net/base/net_export.h" 12#include "net/socket/ssl_socket.h" 13#include "net/socket/stream_socket.h" 14 15namespace crypto { 16class RSAPrivateKey; 17} // namespace crypto 18 19namespace net { 20 21struct SSLConfig; 22class X509Certificate; 23 24class SSLServerSocket : public SSLSocket { 25 public: 26 virtual ~SSLServerSocket() {} 27 28 // Perform the SSL server handshake, and notify the supplied callback 29 // if the process completes asynchronously. If Disconnect is called before 30 // completion then the callback will be silently, as for other StreamSocket 31 // calls. 32 virtual int Handshake(const CompletionCallback& callback) = 0; 33}; 34 35// Configures the underlying SSL library for the use of SSL server sockets. 36// 37// Due to the requirements of the underlying libraries, this should be called 38// early in process initialization, before any SSL socket, client or server, 39// has been used. 40// 41// Note: If a process does not use SSL server sockets, this call may be 42// omitted. 43NET_EXPORT void EnableSSLServerSockets(); 44 45// Creates an SSL server socket over an already-connected transport socket. 46// The caller must provide the server certificate and private key to use. 47// 48// The returned SSLServerSocket takes ownership of |socket|. Stubbed versions 49// of CreateSSLServerSocket will delete |socket| and return NULL. 50// It takes a reference to |certificate|. 51// The |key| and |ssl_config| parameters are copied. |key| cannot be const 52// because the methods used to copy its contents are non-const. 53// 54// The caller starts the SSL server handshake by calling Handshake on the 55// returned socket. 56NET_EXPORT scoped_ptr<SSLServerSocket> CreateSSLServerSocket( 57 scoped_ptr<StreamSocket> socket, 58 X509Certificate* certificate, 59 crypto::RSAPrivateKey* key, 60 const SSLConfig& ssl_config); 61 62} // namespace net 63 64#endif // NET_SOCKET_SSL_SERVER_SOCKET_H_ 65