OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ssl_server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_IO_SSL_SERVER_H_
6 #define SRC_IO_SSL_SERVER_H_
7 
8 #include <boost/asio/ssl.hpp>
9 
10 #include "io/tcp_server.h"
11 
12 class SslSession;
13 
14 class SslServer : public TcpServer {
15 public:
16  typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SslSocket;
17 
18  explicit SslServer(EventManager *evm, boost::asio::ssl::context::method m,
19  bool ssl_enabled = true,
20  bool ssl_handshake_delayed = false);
21  virtual ~SslServer();
22 
23 protected:
24  // given SSL socket, Create a session object.
25  virtual SslSession *AllocSession(SslSocket *socket) = 0;
26 
27  // boost ssl context accessor to setup ssl context variables.
28  boost::asio::ssl::context *context();
29 
30 private:
31  friend class SslSession;
32 
34  TcpSessionPtr session,
35  const boost::system::error_code& error);
37  TcpSessionPtr session,
38  const boost::system::error_code& error);
39 
40  // suppress AllocSession method using tcp socket, not valid for
41  // ssl server.
42  TcpSession *AllocSession(Socket *socket) { return NULL; }
43 
44  TcpSession *AllocSession(bool server_session);
45 
46  // override accept complete handler to trigger handshake
47  virtual void AcceptHandlerComplete(TcpSessionPtr session);
48 
49  // override connect complete handler to trigger handshake
51 
52  Socket *accept_socket() const;
53  void set_accept_socket();
54 
55  boost::asio::ssl::context context_;
56  std::unique_ptr<SslSocket> so_ssl_accept_; // SSL socket used in async_accept
60 };
61 
62 #endif // SRC_IO_SSL_SERVER_H_
TcpSession * AllocSession(Socket *socket)
Definition: ssl_server.h:42
virtual SslSession * AllocSession(SslSocket *socket)=0
boost::asio::ip::tcp::socket Socket
Definition: tcp_server.h:31
boost::asio::ssl::context * context()
Definition: ssl_server.cc:41
std::unique_ptr< SslSocket > so_ssl_accept_
Definition: ssl_server.h:56
virtual ~SslServer()
Definition: ssl_server.cc:38
void set_accept_socket()
Definition: ssl_server.cc:144
boost::intrusive_ptr< HttpClientSession > TcpSessionPtr
Definition: http_curl.cc:105
boost::intrusive_ptr< TcpServer > TcpServerPtr
Definition: tcp_server.h:110
bool ssl_enabled_
Definition: ssl_server.h:57
boost::asio::ssl::stream< boost::asio::ip::tcp::socket > SslSocket
Definition: ssl_server.h:16
boost::asio::ssl::context context_
Definition: ssl_server.h:55
void ConnectHandlerComplete(TcpSessionPtr session)
Definition: ssl_server.cc:101
static void AcceptHandShakeHandler(TcpServerPtr server, TcpSessionPtr session, const boost::system::error_code &error)
Definition: ssl_server.cc:79
bool ssl_handshake_delayed_
Definition: ssl_server.h:58
static void ConnectHandShakeHandler(TcpServerPtr server, TcpSessionPtr session, const boost::system::error_code &error)
Definition: ssl_server.cc:117
TcpServer * server()
Definition: tcp_session.h:88
virtual void AcceptHandlerComplete(TcpSessionPtr session)
Definition: ssl_server.cc:63
SslServer(EventManager *evm, boost::asio::ssl::context::method m, bool ssl_enabled=true, bool ssl_handshake_delayed=false)
Definition: ssl_server.cc:15
virtual Socket * socket() const
Definition: ssl_session.cc:97
boost::intrusive_ptr< TcpSession > TcpSessionPtr
Definition: tcp_server.h:111
DISALLOW_COPY_AND_ASSIGN(SslServer)
static EventManager evm
Socket * accept_socket() const
Definition: ssl_server.cc:139