Loading src/PlainSession.cpp +98 −90 Original line number Diff line number Diff line Loading @@ -69,97 +69,105 @@ void PlainSession::start() { DEBUG_STREAM << "PlainSession::start()" << endl; // m_remoteEndpoint = boost::lexical_cast<std::string>( // m_plainSocket.remote_endpoint()); // // INFO_STREAM << "PlainSession::start() Connection from " // << m_remoteEndpoint << endl; // // m_protocolManager_sp->setRemoteEndpoint(m_remoteEndpoint); // // startReadRequestHeader(); m_remoteEndpoint = boost::lexical_cast<std::string>( m_plainSocket.remote_endpoint()); INFO_STREAM << "PlainSession::start() Connection from " << m_remoteEndpoint << endl; m_protocolManager_sp->setRemoteEndpoint(m_remoteEndpoint); startReadRequestHeader(); } //============================================================================== // PlainSession::startReadRequestHeader() //============================================================================== void PlainSession::startReadRequestHeader() { DEBUG_STREAM << "PlainSession::startReadRequestHeader()" << endl; m_readBuff.resize(HEADER_SIZE); boost::asio::async_read(m_plainSocket, boost::asio::buffer(m_readBuff), m_strand.wrap(boost::bind(&PlainSession::handleReadRequestHeader, shared_from_this(), boost::asio::placeholders::error))); } //============================================================================== // PlainSession::startReadRequestBody() //============================================================================== void PlainSession::startReadRequestBody(boost::uint32_t bodySize) { DEBUG_STREAM << "PlainSession::startReadRequestBody()" << endl; m_readBuff.resize(HEADER_SIZE + bodySize); boost::asio::mutable_buffers_1 mutableBuffer = boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize); #ifdef VERBOSE_DEBUG INFO_STREAM << "PlainSession::startReadRequestBody() " << m_remoteEndpoint << " >>>> " << bodySize << " BYTE" << endl; #endif boost::asio::async_read(m_plainSocket, mutableBuffer, m_strand.wrap(boost::bind(&PlainSession::handleReadRequestBody, shared_from_this(), boost::asio::placeholders::error))); } //============================================================================== // PlainSession::startWriteResponse() //============================================================================== void PlainSession::startWriteResponse() { DEBUG_STREAM << "PlainSession::startWriteResponse()" << endl; try { RequestSP request_sp(new Request); request_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], m_readBuff.size() - HEADER_SIZE); ResponseSP response_sp = m_protocolManager_sp->prepareResponse(request_sp); boost::uint32_t bodySize = response_sp->ByteSize(); std::vector<boost::uint8_t> writeBuff; writeBuff.resize(HEADER_SIZE + bodySize); encodeHeader(writeBuff, bodySize); response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize); #ifdef VERBOSE_DEBUG INFO_STREAM << "PlainSession::startWriteResponse() " << m_remoteEndpoint << " <<<< " << bodySize << " byte" << endl; #endif boost::asio::async_write(m_plainSocket, boost::asio::buffer(writeBuff), m_strand.wrap(boost::bind(&PlainSession::handleWriteResponse, shared_from_this(), boost::asio::placeholders::error))); } catch(std::exception& ec) { ERROR_STREAM << "SSLSession::startWriteResponse() " << ec.what() << " from " << m_remoteEndpoint << endl; } catch(...) { ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " << m_remoteEndpoint << endl; ////============================================================================== //// PlainSession::startReadRequestHeader() ////============================================================================== //void PlainSession::startReadRequestHeader() //{ // DEBUG_STREAM << "PlainSession::startReadRequestHeader()" << endl; // // m_readBuff.resize(HEADER_SIZE); // // boost::asio::async_read(m_plainSocket, boost::asio::buffer(m_readBuff), // m_strand.wrap(boost::bind(&PlainSession::handleReadRequestHeader, // shared_from_this(), boost::asio::placeholders::error))); //} // ////============================================================================== //// PlainSession::startReadRequestBody() ////============================================================================== //void PlainSession::startReadRequestBody(boost::uint32_t bodySize) //{ // DEBUG_STREAM << "PlainSession::startReadRequestBody()" << endl; // // m_readBuff.resize(HEADER_SIZE + bodySize); // // boost::asio::mutable_buffers_1 mutableBuffer = // boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize); // // #ifdef VERBOSE_DEBUG // INFO_STREAM << "PlainSession::startReadRequestBody() " // << m_remoteEndpoint << " >>>> " << bodySize << " BYTE" << endl; // #endif // // boost::asio::async_read(m_plainSocket, mutableBuffer, // m_strand.wrap(boost::bind(&PlainSession::handleReadRequestBody, // shared_from_this(), boost::asio::placeholders::error))); //} // ////============================================================================== //// PlainSession::startWriteResponse() ////============================================================================== //void PlainSession::startWriteResponse() //{ // DEBUG_STREAM << "PlainSession::startWriteResponse()" << endl; // // try // { // RequestSP request_sp(new Request); // // request_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], m_readBuff.size() - HEADER_SIZE); // // ResponseSP response_sp = m_protocolManager_sp->prepareResponse(request_sp); // // boost::uint32_t bodySize = response_sp->ByteSize(); // // std::vector<boost::uint8_t> writeBuff; // writeBuff.resize(HEADER_SIZE + bodySize); // // encodeHeader(writeBuff, bodySize); // // response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize); // // #ifdef VERBOSE_DEBUG // INFO_STREAM << "PlainSession::startWriteResponse() " // << m_remoteEndpoint << " <<<< " << bodySize << " byte" << endl; // #endif // // boost::asio::async_write(m_plainSocket, boost::asio::buffer(writeBuff), // m_strand.wrap(boost::bind(&PlainSession::handleWriteResponse, // shared_from_this(), boost::asio::placeholders::error))); // } // catch(std::exception& ec) // { // ERROR_STREAM << "SSLSession::startWriteResponse() " // << ec.what() << " from " << m_remoteEndpoint << endl; // } // catch(...) // { // ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " // << m_remoteEndpoint << endl; // // } //} } } //============================================================================== // PlainSession::startWriteData() //============================================================================== void PlainSession::startWriteData() { DEBUG_STREAM << "PlainSession::startWriteData()" << endl; } } //namespace No newline at end of file src/PlainSession.h +10 −8 Original line number Diff line number Diff line Loading @@ -48,14 +48,16 @@ public: virtual void start(); protected: ////------------------------------------------------------------------------------ //// [Protected] Request response methods ////------------------------------------------------------------------------------ // virtual void startReadRequestHeader(); // // virtual void startReadRequestBody(boost::uint32_t); // // virtual void startWriteResponse(); //------------------------------------------------------------------------------ // [Protected] Request response methods //------------------------------------------------------------------------------ virtual void startReadRequestHeader(); virtual void startReadRequestBody(boost::uint32_t); virtual void startWriteResponse(); virtual void startWriteData(); //------------------------------------------------------------------------------ // [Protected] Class variables Loading src/SSLSession.cpp +128 −120 Original line number Diff line number Diff line Loading @@ -74,127 +74,135 @@ void SSLSession::start() { DEBUG_STREAM << "SSLSession::start()" << endl; // m_remoteEndpoint = boost::lexical_cast<std::string>( // m_sslSocket.lowest_layer().remote_endpoint()); // // INFO_STREAM << "SSLSession::start() Connection from " // << m_remoteEndpoint << endl; // // m_protocolManager_sp->setRemoteEndpoint(m_remoteEndpoint); // // startHandShake(); } ////============================================================================== //// SSLSession::startHandShake() ////============================================================================== //void SSLSession::startHandShake() //{ // DEBUG_STREAM << "SSLSession::startHandShake()" << endl; // // m_sslSocket.async_handshake(boost::asio::ssl::stream_base::server, // boost::bind(&SSLSession::handleHandShake, shared_from_this(), // boost::asio::placeholders::error)); //} // ////============================================================================== //// SSLSession::handleRequest() ////============================================================================== //void SSLSession::handleHandShake(const boost::system::error_code& errorCode) //{ // DEBUG_STREAM << "SSLSession::handleHandShake()" << endl; // // if(!errorCode) // { // startReadRequestHeader(); // } // else // { // ERROR_STREAM << "SSLSession::handleHandShake() error " // << errorCode.message() << " from " << m_remoteEndpoint << endl; // } //} // ////============================================================================== //// SSLSession::startReadRequestHeader() ////============================================================================== //void SSLSession::startReadRequestHeader() //{ // DEBUG_STREAM << "SSLSession::startReadRequestHeader()" << endl; // // m_readBuff.resize(HEADER_SIZE); // // boost::asio::async_read(m_sslSocket, boost::asio::buffer(m_readBuff), // m_strand.wrap(boost::bind(&SSLSession::handleReadRequestHeader, // shared_from_this(), boost::asio::placeholders::error))); //} // ////============================================================================== //// SSLSession::startReadRequestBody() ////============================================================================== //void SSLSession::startReadRequestBody(boost::uint32_t bodySize) //{ // DEBUG_STREAM << "SSLSession::startReadRequestBody()" << endl; // // m_readBuff.resize(HEADER_SIZE + bodySize); // // boost::asio::mutable_buffers_1 mutableBuffer = // boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize); // // #ifdef VERBOSE_DEBUG // INFO_STREAM << "SSLSession::startReadRequestBody() " // << m_remoteEndpoint << " >>>> " << bodySize << " byte" << endl; // #endif // // boost::asio::async_read(m_sslSocket, mutableBuffer, // m_strand.wrap(boost::bind(&SSLSession::handleReadRequestBody, // shared_from_this(), boost::asio::placeholders::error))); //} // ////============================================================================== //// SSLSession::startWriteResponse() ////============================================================================== //void SSLSession::startWriteResponse() //{ // DEBUG_STREAM << "SSLSession::startWriteResponse()" << endl; // // try // { // RequestSP request_sp(new Request); // // request_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], // m_readBuff.size() - HEADER_SIZE); // // ResponseSP response_sp = m_protocolManager_sp->prepareResponse(request_sp); // // boost::uint32_t bodySize = response_sp->ByteSize(); // // std::vector<boost::uint8_t> writeBuff; // writeBuff.resize(HEADER_SIZE + bodySize); // // encodeHeader(writeBuff, bodySize); // // response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize); // // #ifdef VERBOSE_DEBUG // INFO_STREAM << "SSLSession::startWriteResponse() " // << m_remoteEndpoint << " <<<< " << bodySize << " byte" << endl; // #endif // // boost::asio::async_write(m_sslSocket, boost::asio::buffer(writeBuff), // m_strand.wrap(boost::bind(&SSLSession::handleWriteResponse, // shared_from_this(), boost::asio::placeholders::error))); // } // catch(std::exception& ec) // { // ERROR_STREAM << "SSLSession::startWriteResponse() " // << ec.what() << " from " << m_remoteEndpoint << endl; // } // catch(...) // { // ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " // << m_remoteEndpoint << endl; // } //} m_remoteEndpoint = boost::lexical_cast<std::string>( m_sslSocket.lowest_layer().remote_endpoint()); INFO_STREAM << "SSLSession::start() Connection from " << m_remoteEndpoint << endl; m_protocolManager_sp->setRemoteEndpoint(m_remoteEndpoint); startHandShake(); } //============================================================================== // SSLSession::startHandShake() //============================================================================== void SSLSession::startHandShake() { DEBUG_STREAM << "SSLSession::startHandShake()" << endl; m_sslSocket.async_handshake(boost::asio::ssl::stream_base::server, boost::bind(&SSLSession::handleHandShake, shared_from_this(), boost::asio::placeholders::error)); } //============================================================================== // SSLSession::handleRequest() //============================================================================== void SSLSession::handleHandShake(const boost::system::error_code& errorCode) { DEBUG_STREAM << "SSLSession::handleHandShake()" << endl; if(!errorCode) { startReadRequestHeader(); } else { ERROR_STREAM << "SSLSession::handleHandShake() error " << errorCode.message() << " from " << m_remoteEndpoint << endl; } } //============================================================================== // SSLSession::startReadRequestHeader() //============================================================================== void SSLSession::startReadRequestHeader() { DEBUG_STREAM << "SSLSession::startReadRequestHeader()" << endl; m_readBuff.resize(HEADER_SIZE); boost::asio::async_read(m_sslSocket, boost::asio::buffer(m_readBuff), m_strand.wrap(boost::bind(&SSLSession::handleReadRequestHeader, shared_from_this(), boost::asio::placeholders::error))); } //============================================================================== // SSLSession::startReadRequestBody() //============================================================================== void SSLSession::startReadRequestBody(boost::uint32_t bodySize) { DEBUG_STREAM << "SSLSession::startReadRequestBody()" << endl; m_readBuff.resize(HEADER_SIZE + bodySize); boost::asio::mutable_buffers_1 mutableBuffer = boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize); #ifdef VERBOSE_DEBUG INFO_STREAM << "SSLSession::startReadRequestBody() " << m_remoteEndpoint << " >>>> " << bodySize << " byte" << endl; #endif boost::asio::async_read(m_sslSocket, mutableBuffer, m_strand.wrap(boost::bind(&SSLSession::handleReadRequestBody, shared_from_this(), boost::asio::placeholders::error))); } //============================================================================== // SSLSession::startWriteResponse() //============================================================================== void SSLSession::startWriteResponse() { DEBUG_STREAM << "SSLSession::startWriteResponse()" << endl; try { RequestSP request_sp(new Request); request_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], m_readBuff.size() - HEADER_SIZE); ResponseSP response_sp = m_protocolManager_sp->prepareResponse(request_sp); boost::uint32_t bodySize = response_sp->ByteSize(); std::vector<boost::uint8_t> writeBuff; writeBuff.resize(HEADER_SIZE + bodySize); encodeHeader(writeBuff, bodySize); response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize); #ifdef VERBOSE_DEBUG INFO_STREAM << "SSLSession::startWriteResponse() " << m_remoteEndpoint << " <<<< " << bodySize << " byte" << endl; #endif boost::asio::async_write(m_sslSocket, boost::asio::buffer(writeBuff), m_strand.wrap(boost::bind(&SSLSession::handleWriteResponse, shared_from_this(), boost::asio::placeholders::error))); } catch(std::exception& ec) { ERROR_STREAM << "SSLSession::startWriteResponse() " << ec.what() << " from " << m_remoteEndpoint << endl; } catch(...) { ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " << m_remoteEndpoint << endl; } } //============================================================================== // SSLSession::startWriteData() //============================================================================== void SSLSession::startWriteData() { DEBUG_STREAM << "SSLSession::startWriteData()" << endl; } } //namespace src/SSLSession.h +17 −15 Original line number Diff line number Diff line Loading @@ -54,21 +54,23 @@ public: virtual void start(); protected: ////------------------------------------------------------------------------------ //// [Protected] SSL handshake initialization methods ////------------------------------------------------------------------------------ // virtual void startHandShake(); // // virtual void handleHandShake(const boost::system::error_code&); // ////------------------------------------------------------------------------------ //// [Protected] Request response methods ////------------------------------------------------------------------------------ // virtual void startReadRequestHeader(); // // virtual void startReadRequestBody(boost::uint32_t); // // virtual void startWriteResponse(); //------------------------------------------------------------------------------ // [Protected] SSL handshake initialization methods //------------------------------------------------------------------------------ virtual void startHandShake(); virtual void handleHandShake(const boost::system::error_code&); //------------------------------------------------------------------------------ // [Protected] Request response methods //------------------------------------------------------------------------------ virtual void startReadRequestHeader(); virtual void startReadRequestBody(boost::uint32_t); virtual void startWriteResponse(); virtual void startWriteData(); //------------------------------------------------------------------------------ // [Protected] Class variables Loading src/Session.cpp +114 −106 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
src/PlainSession.cpp +98 −90 Original line number Diff line number Diff line Loading @@ -69,97 +69,105 @@ void PlainSession::start() { DEBUG_STREAM << "PlainSession::start()" << endl; // m_remoteEndpoint = boost::lexical_cast<std::string>( // m_plainSocket.remote_endpoint()); // // INFO_STREAM << "PlainSession::start() Connection from " // << m_remoteEndpoint << endl; // // m_protocolManager_sp->setRemoteEndpoint(m_remoteEndpoint); // // startReadRequestHeader(); m_remoteEndpoint = boost::lexical_cast<std::string>( m_plainSocket.remote_endpoint()); INFO_STREAM << "PlainSession::start() Connection from " << m_remoteEndpoint << endl; m_protocolManager_sp->setRemoteEndpoint(m_remoteEndpoint); startReadRequestHeader(); } //============================================================================== // PlainSession::startReadRequestHeader() //============================================================================== void PlainSession::startReadRequestHeader() { DEBUG_STREAM << "PlainSession::startReadRequestHeader()" << endl; m_readBuff.resize(HEADER_SIZE); boost::asio::async_read(m_plainSocket, boost::asio::buffer(m_readBuff), m_strand.wrap(boost::bind(&PlainSession::handleReadRequestHeader, shared_from_this(), boost::asio::placeholders::error))); } //============================================================================== // PlainSession::startReadRequestBody() //============================================================================== void PlainSession::startReadRequestBody(boost::uint32_t bodySize) { DEBUG_STREAM << "PlainSession::startReadRequestBody()" << endl; m_readBuff.resize(HEADER_SIZE + bodySize); boost::asio::mutable_buffers_1 mutableBuffer = boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize); #ifdef VERBOSE_DEBUG INFO_STREAM << "PlainSession::startReadRequestBody() " << m_remoteEndpoint << " >>>> " << bodySize << " BYTE" << endl; #endif boost::asio::async_read(m_plainSocket, mutableBuffer, m_strand.wrap(boost::bind(&PlainSession::handleReadRequestBody, shared_from_this(), boost::asio::placeholders::error))); } //============================================================================== // PlainSession::startWriteResponse() //============================================================================== void PlainSession::startWriteResponse() { DEBUG_STREAM << "PlainSession::startWriteResponse()" << endl; try { RequestSP request_sp(new Request); request_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], m_readBuff.size() - HEADER_SIZE); ResponseSP response_sp = m_protocolManager_sp->prepareResponse(request_sp); boost::uint32_t bodySize = response_sp->ByteSize(); std::vector<boost::uint8_t> writeBuff; writeBuff.resize(HEADER_SIZE + bodySize); encodeHeader(writeBuff, bodySize); response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize); #ifdef VERBOSE_DEBUG INFO_STREAM << "PlainSession::startWriteResponse() " << m_remoteEndpoint << " <<<< " << bodySize << " byte" << endl; #endif boost::asio::async_write(m_plainSocket, boost::asio::buffer(writeBuff), m_strand.wrap(boost::bind(&PlainSession::handleWriteResponse, shared_from_this(), boost::asio::placeholders::error))); } catch(std::exception& ec) { ERROR_STREAM << "SSLSession::startWriteResponse() " << ec.what() << " from " << m_remoteEndpoint << endl; } catch(...) { ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " << m_remoteEndpoint << endl; ////============================================================================== //// PlainSession::startReadRequestHeader() ////============================================================================== //void PlainSession::startReadRequestHeader() //{ // DEBUG_STREAM << "PlainSession::startReadRequestHeader()" << endl; // // m_readBuff.resize(HEADER_SIZE); // // boost::asio::async_read(m_plainSocket, boost::asio::buffer(m_readBuff), // m_strand.wrap(boost::bind(&PlainSession::handleReadRequestHeader, // shared_from_this(), boost::asio::placeholders::error))); //} // ////============================================================================== //// PlainSession::startReadRequestBody() ////============================================================================== //void PlainSession::startReadRequestBody(boost::uint32_t bodySize) //{ // DEBUG_STREAM << "PlainSession::startReadRequestBody()" << endl; // // m_readBuff.resize(HEADER_SIZE + bodySize); // // boost::asio::mutable_buffers_1 mutableBuffer = // boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize); // // #ifdef VERBOSE_DEBUG // INFO_STREAM << "PlainSession::startReadRequestBody() " // << m_remoteEndpoint << " >>>> " << bodySize << " BYTE" << endl; // #endif // // boost::asio::async_read(m_plainSocket, mutableBuffer, // m_strand.wrap(boost::bind(&PlainSession::handleReadRequestBody, // shared_from_this(), boost::asio::placeholders::error))); //} // ////============================================================================== //// PlainSession::startWriteResponse() ////============================================================================== //void PlainSession::startWriteResponse() //{ // DEBUG_STREAM << "PlainSession::startWriteResponse()" << endl; // // try // { // RequestSP request_sp(new Request); // // request_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], m_readBuff.size() - HEADER_SIZE); // // ResponseSP response_sp = m_protocolManager_sp->prepareResponse(request_sp); // // boost::uint32_t bodySize = response_sp->ByteSize(); // // std::vector<boost::uint8_t> writeBuff; // writeBuff.resize(HEADER_SIZE + bodySize); // // encodeHeader(writeBuff, bodySize); // // response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize); // // #ifdef VERBOSE_DEBUG // INFO_STREAM << "PlainSession::startWriteResponse() " // << m_remoteEndpoint << " <<<< " << bodySize << " byte" << endl; // #endif // // boost::asio::async_write(m_plainSocket, boost::asio::buffer(writeBuff), // m_strand.wrap(boost::bind(&PlainSession::handleWriteResponse, // shared_from_this(), boost::asio::placeholders::error))); // } // catch(std::exception& ec) // { // ERROR_STREAM << "SSLSession::startWriteResponse() " // << ec.what() << " from " << m_remoteEndpoint << endl; // } // catch(...) // { // ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " // << m_remoteEndpoint << endl; // // } //} } } //============================================================================== // PlainSession::startWriteData() //============================================================================== void PlainSession::startWriteData() { DEBUG_STREAM << "PlainSession::startWriteData()" << endl; } } //namespace No newline at end of file
src/PlainSession.h +10 −8 Original line number Diff line number Diff line Loading @@ -48,14 +48,16 @@ public: virtual void start(); protected: ////------------------------------------------------------------------------------ //// [Protected] Request response methods ////------------------------------------------------------------------------------ // virtual void startReadRequestHeader(); // // virtual void startReadRequestBody(boost::uint32_t); // // virtual void startWriteResponse(); //------------------------------------------------------------------------------ // [Protected] Request response methods //------------------------------------------------------------------------------ virtual void startReadRequestHeader(); virtual void startReadRequestBody(boost::uint32_t); virtual void startWriteResponse(); virtual void startWriteData(); //------------------------------------------------------------------------------ // [Protected] Class variables Loading
src/SSLSession.cpp +128 −120 Original line number Diff line number Diff line Loading @@ -74,127 +74,135 @@ void SSLSession::start() { DEBUG_STREAM << "SSLSession::start()" << endl; // m_remoteEndpoint = boost::lexical_cast<std::string>( // m_sslSocket.lowest_layer().remote_endpoint()); // // INFO_STREAM << "SSLSession::start() Connection from " // << m_remoteEndpoint << endl; // // m_protocolManager_sp->setRemoteEndpoint(m_remoteEndpoint); // // startHandShake(); } ////============================================================================== //// SSLSession::startHandShake() ////============================================================================== //void SSLSession::startHandShake() //{ // DEBUG_STREAM << "SSLSession::startHandShake()" << endl; // // m_sslSocket.async_handshake(boost::asio::ssl::stream_base::server, // boost::bind(&SSLSession::handleHandShake, shared_from_this(), // boost::asio::placeholders::error)); //} // ////============================================================================== //// SSLSession::handleRequest() ////============================================================================== //void SSLSession::handleHandShake(const boost::system::error_code& errorCode) //{ // DEBUG_STREAM << "SSLSession::handleHandShake()" << endl; // // if(!errorCode) // { // startReadRequestHeader(); // } // else // { // ERROR_STREAM << "SSLSession::handleHandShake() error " // << errorCode.message() << " from " << m_remoteEndpoint << endl; // } //} // ////============================================================================== //// SSLSession::startReadRequestHeader() ////============================================================================== //void SSLSession::startReadRequestHeader() //{ // DEBUG_STREAM << "SSLSession::startReadRequestHeader()" << endl; // // m_readBuff.resize(HEADER_SIZE); // // boost::asio::async_read(m_sslSocket, boost::asio::buffer(m_readBuff), // m_strand.wrap(boost::bind(&SSLSession::handleReadRequestHeader, // shared_from_this(), boost::asio::placeholders::error))); //} // ////============================================================================== //// SSLSession::startReadRequestBody() ////============================================================================== //void SSLSession::startReadRequestBody(boost::uint32_t bodySize) //{ // DEBUG_STREAM << "SSLSession::startReadRequestBody()" << endl; // // m_readBuff.resize(HEADER_SIZE + bodySize); // // boost::asio::mutable_buffers_1 mutableBuffer = // boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize); // // #ifdef VERBOSE_DEBUG // INFO_STREAM << "SSLSession::startReadRequestBody() " // << m_remoteEndpoint << " >>>> " << bodySize << " byte" << endl; // #endif // // boost::asio::async_read(m_sslSocket, mutableBuffer, // m_strand.wrap(boost::bind(&SSLSession::handleReadRequestBody, // shared_from_this(), boost::asio::placeholders::error))); //} // ////============================================================================== //// SSLSession::startWriteResponse() ////============================================================================== //void SSLSession::startWriteResponse() //{ // DEBUG_STREAM << "SSLSession::startWriteResponse()" << endl; // // try // { // RequestSP request_sp(new Request); // // request_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], // m_readBuff.size() - HEADER_SIZE); // // ResponseSP response_sp = m_protocolManager_sp->prepareResponse(request_sp); // // boost::uint32_t bodySize = response_sp->ByteSize(); // // std::vector<boost::uint8_t> writeBuff; // writeBuff.resize(HEADER_SIZE + bodySize); // // encodeHeader(writeBuff, bodySize); // // response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize); // // #ifdef VERBOSE_DEBUG // INFO_STREAM << "SSLSession::startWriteResponse() " // << m_remoteEndpoint << " <<<< " << bodySize << " byte" << endl; // #endif // // boost::asio::async_write(m_sslSocket, boost::asio::buffer(writeBuff), // m_strand.wrap(boost::bind(&SSLSession::handleWriteResponse, // shared_from_this(), boost::asio::placeholders::error))); // } // catch(std::exception& ec) // { // ERROR_STREAM << "SSLSession::startWriteResponse() " // << ec.what() << " from " << m_remoteEndpoint << endl; // } // catch(...) // { // ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " // << m_remoteEndpoint << endl; // } //} m_remoteEndpoint = boost::lexical_cast<std::string>( m_sslSocket.lowest_layer().remote_endpoint()); INFO_STREAM << "SSLSession::start() Connection from " << m_remoteEndpoint << endl; m_protocolManager_sp->setRemoteEndpoint(m_remoteEndpoint); startHandShake(); } //============================================================================== // SSLSession::startHandShake() //============================================================================== void SSLSession::startHandShake() { DEBUG_STREAM << "SSLSession::startHandShake()" << endl; m_sslSocket.async_handshake(boost::asio::ssl::stream_base::server, boost::bind(&SSLSession::handleHandShake, shared_from_this(), boost::asio::placeholders::error)); } //============================================================================== // SSLSession::handleRequest() //============================================================================== void SSLSession::handleHandShake(const boost::system::error_code& errorCode) { DEBUG_STREAM << "SSLSession::handleHandShake()" << endl; if(!errorCode) { startReadRequestHeader(); } else { ERROR_STREAM << "SSLSession::handleHandShake() error " << errorCode.message() << " from " << m_remoteEndpoint << endl; } } //============================================================================== // SSLSession::startReadRequestHeader() //============================================================================== void SSLSession::startReadRequestHeader() { DEBUG_STREAM << "SSLSession::startReadRequestHeader()" << endl; m_readBuff.resize(HEADER_SIZE); boost::asio::async_read(m_sslSocket, boost::asio::buffer(m_readBuff), m_strand.wrap(boost::bind(&SSLSession::handleReadRequestHeader, shared_from_this(), boost::asio::placeholders::error))); } //============================================================================== // SSLSession::startReadRequestBody() //============================================================================== void SSLSession::startReadRequestBody(boost::uint32_t bodySize) { DEBUG_STREAM << "SSLSession::startReadRequestBody()" << endl; m_readBuff.resize(HEADER_SIZE + bodySize); boost::asio::mutable_buffers_1 mutableBuffer = boost::asio::buffer(&m_readBuff[HEADER_SIZE], bodySize); #ifdef VERBOSE_DEBUG INFO_STREAM << "SSLSession::startReadRequestBody() " << m_remoteEndpoint << " >>>> " << bodySize << " byte" << endl; #endif boost::asio::async_read(m_sslSocket, mutableBuffer, m_strand.wrap(boost::bind(&SSLSession::handleReadRequestBody, shared_from_this(), boost::asio::placeholders::error))); } //============================================================================== // SSLSession::startWriteResponse() //============================================================================== void SSLSession::startWriteResponse() { DEBUG_STREAM << "SSLSession::startWriteResponse()" << endl; try { RequestSP request_sp(new Request); request_sp->ParseFromArray(&m_readBuff[HEADER_SIZE], m_readBuff.size() - HEADER_SIZE); ResponseSP response_sp = m_protocolManager_sp->prepareResponse(request_sp); boost::uint32_t bodySize = response_sp->ByteSize(); std::vector<boost::uint8_t> writeBuff; writeBuff.resize(HEADER_SIZE + bodySize); encodeHeader(writeBuff, bodySize); response_sp->SerializeToArray(&writeBuff[HEADER_SIZE], bodySize); #ifdef VERBOSE_DEBUG INFO_STREAM << "SSLSession::startWriteResponse() " << m_remoteEndpoint << " <<<< " << bodySize << " byte" << endl; #endif boost::asio::async_write(m_sslSocket, boost::asio::buffer(writeBuff), m_strand.wrap(boost::bind(&SSLSession::handleWriteResponse, shared_from_this(), boost::asio::placeholders::error))); } catch(std::exception& ec) { ERROR_STREAM << "SSLSession::startWriteResponse() " << ec.what() << " from " << m_remoteEndpoint << endl; } catch(...) { ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " << m_remoteEndpoint << endl; } } //============================================================================== // SSLSession::startWriteData() //============================================================================== void SSLSession::startWriteData() { DEBUG_STREAM << "SSLSession::startWriteData()" << endl; } } //namespace
src/SSLSession.h +17 −15 Original line number Diff line number Diff line Loading @@ -54,21 +54,23 @@ public: virtual void start(); protected: ////------------------------------------------------------------------------------ //// [Protected] SSL handshake initialization methods ////------------------------------------------------------------------------------ // virtual void startHandShake(); // // virtual void handleHandShake(const boost::system::error_code&); // ////------------------------------------------------------------------------------ //// [Protected] Request response methods ////------------------------------------------------------------------------------ // virtual void startReadRequestHeader(); // // virtual void startReadRequestBody(boost::uint32_t); // // virtual void startWriteResponse(); //------------------------------------------------------------------------------ // [Protected] SSL handshake initialization methods //------------------------------------------------------------------------------ virtual void startHandShake(); virtual void handleHandShake(const boost::system::error_code&); //------------------------------------------------------------------------------ // [Protected] Request response methods //------------------------------------------------------------------------------ virtual void startReadRequestHeader(); virtual void startReadRequestBody(boost::uint32_t); virtual void startWriteResponse(); virtual void startWriteData(); //------------------------------------------------------------------------------ // [Protected] Class variables Loading