Commit 80f860db authored by Marco De Marco's avatar Marco De Marco
Browse files

Request response methods added

parent 6391ff2f
Loading
Loading
Loading
Loading
+98 −90
Original line number Diff line number Diff line
@@ -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
+10 −8
Original line number Diff line number Diff line
@@ -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
+128 −120
Original line number Diff line number Diff line
@@ -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
+17 −15
Original line number Diff line number Diff line
@@ -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
+114 −106

File changed.

Preview size limit exceeded, changes collapsed.

Loading