5 #include <boost/asio.hpp>
6 #include <boost/bind.hpp>
16 bool ssl_enabled,
bool ssl_handshake_delayed)
18 ssl_enabled_(ssl_enabled), ssl_handshake_delayed_(ssl_handshake_delayed) {
19 boost::system::error_code ec;
21 context_.set_verify_mode(boost::asio::ssl::context::verify_none, ec);
22 assert(ec.value() == 0);
23 context_.set_options(boost::asio::ssl::context::default_workarounds |
24 boost::asio::ssl::context::no_sslv3 |
25 boost::asio::ssl::context::no_sslv2 |
26 boost::asio::ssl::context::no_tlsv1 |
27 boost::asio::ssl::context::no_tlsv1_1, ec);
28 assert(ec.value() == 0);
30 #if BOOST_VERSION >= 105400
31 if (getenv(
"CONTRAIL_SSL_SOCKET_COMPRESSION_ENABLE")) {
32 context_.clear_options(boost::asio::ssl::context::no_compression, ec);
33 assert(ec.value() == 0);
51 if (session != NULL) {
69 std::srand(static_cast<unsigned>(std::time(0)));
72 (boost::asio::ssl::stream_base::server,
75 boost::asio::placeholders::error));
81 const boost::system::error_code& error) {
88 ssl_server->TcpServer::AcceptHandlerComplete(session);
93 "SSL Handshake failed due to error: "
94 << error.value() <<
" category: "
95 << error.category().name()
96 <<
" message: " << error.message());
107 std::srand(static_cast<unsigned>(std::time(0)));
110 (boost::asio::ssl::stream_base::client,
113 boost::asio::placeholders::error));
118 TcpSessionPtr session,
const boost::system::error_code& error) {
125 ssl_server->TcpServer::ConnectHandlerComplete(session);
131 "SSL Handshake failed due to error: "
132 << error.value() <<
" category: "
133 << error.category().name()
134 <<
" message: " << error.message());
virtual SslSession * AllocSession(SslSocket *socket)=0
void CloseInternal(const boost::system::error_code &ec, bool call_observer, bool notify_server=true)
boost::asio::ip::tcp::socket Socket
bool IsSslHandShakeDelayed()
boost::asio::ssl::context * context()
std::unique_ptr< SslSocket > so_ssl_accept_
EventManager * event_manager()
boost::scoped_ptr< SslSocket > ssl_socket_
bool ssl_handshake_in_progress_
virtual void AcceptHandlerComplete(TcpSessionPtr session)
boost::intrusive_ptr< TcpServer > TcpServerPtr
boost::asio::ssl::stream< boost::asio::ip::tcp::socket > SslSocket
boost::asio::ssl::context context_
void ConnectHandlerComplete(TcpSessionPtr session)
#define TCP_SESSION_LOG_ERROR(session, dir, arg)
void SetSslHandShakeFailure()
static void AcceptHandShakeHandler(TcpServerPtr server, TcpSessionPtr session, const boost::system::error_code &error)
static void ConnectHandShakeHandler(TcpServerPtr server, TcpSessionPtr session, const boost::system::error_code &error)
void SetSslHandShakeSuccess()
virtual void ConnectHandlerComplete(TcpSessionPtr session)
virtual void AcceptHandlerComplete(TcpSessionPtr session)
SslServer(EventManager *evm, boost::asio::ssl::context::method m, bool ssl_enabled=true, bool ssl_handshake_delayed=false)
boost::intrusive_ptr< TcpSession > TcpSessionPtr
Socket * accept_socket() const