From ad79ec7b1f514e92781194d663f870c2d1debfdc Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 25 Nov 2015 13:11:02 -0500 Subject: [PATCH] async handshake --- I2PControl.cpp | 27 ++++++++++++++++++--------- I2PControl.h | 2 ++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/I2PControl.cpp b/I2PControl.cpp index 6954d5d1..f050b297 100644 --- a/I2PControl.cpp +++ b/I2PControl.cpp @@ -134,20 +134,29 @@ namespace client if (!ecode) { LogPrint (eLogInfo, "New I2PControl request from ", socket->lowest_layer ().remote_endpoint ()); - boost::system::error_code ec; - socket->handshake (boost::asio::ssl::stream_base::server, ec); - if (!ec) - { - std::this_thread::sleep_for (std::chrono::milliseconds(5)); - ReadRequest (socket); - } - else - LogPrint (eLogError, "I2PControl handshake error: ", ec.message ()); + Handshake (socket); } else LogPrint (eLogError, "I2PControl accept error: ", ecode.message ()); } + void I2PControlService::Handshake (std::shared_ptr socket) + { + socket->async_handshake(boost::asio::ssl::stream_base::server, + std::bind( &I2PControlService::HandleHandshake, this, std::placeholders::_1, socket)); + } + + void I2PControlService::HandleHandshake (const boost::system::error_code& ecode, std::shared_ptr socket) + { + if (!ecode) + { + //std::this_thread::sleep_for (std::chrono::milliseconds(5)); + ReadRequest (socket); + } + else + LogPrint (eLogError, "I2PControl handshake error: ", ecode.message ()); + } + void I2PControlService::ReadRequest (std::shared_ptr socket) { auto request = std::make_shared(); diff --git a/I2PControl.h b/I2PControl.h index 94b03b60..fd6bffbe 100644 --- a/I2PControl.h +++ b/I2PControl.h @@ -89,6 +89,8 @@ namespace client void Run (); void Accept (); void HandleAccept(const boost::system::error_code& ecode, std::shared_ptr socket); + void Handshake (std::shared_ptr socket); + void HandleHandshake (const boost::system::error_code& ecode, std::shared_ptr socket); void ReadRequest (std::shared_ptr socket); void HandleRequestReceived (const boost::system::error_code& ecode, size_t bytes_transferred, std::shared_ptr socket, std::shared_ptr buf);