host/cxpslib/win/cfssession.h (56 lines of code) (raw):
///
/// \file cfssession.h
///
/// \brief
///
#ifndef CFSSESSION_H
#define CFSSESSION_H
#include <string>
#include <cstddef>
#include <boost/asio.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/algorithm/string.hpp>
#include "serveroptions.h"
#include "cxps.h"
#include "cfsprotocol.h"
#include "session.h"
#include "errorexception.h"
#include "cxpslogger.h"
#include "scopeguard.h"
class CfsSession : public boost::enable_shared_from_this<CfsSession> {
public:
typedef boost::shared_ptr<CfsSession> ptr;
CfsSession(boost::asio::io_service& ioService,
serverOptionsPtr serverOptions);
void start();
boost::asio::ip::tcp::socket& socket();
void completeCfsConnectRequest(boost::asio::ip::tcp::socket::native_handle_type nativeSocket);
void completeCfsConnectRequestFailed();
protected:
void asyncReadRequestHeader();
void handleAsyncReadRequestHeader(boost::system::error_code const & error, ///< result of async read
size_t bytesTransferred ///< bytes transferred by the async read
);
void asyncReadRequestData();
void handleAsyncReadRequestData(boost::system::error_code const & error, ///< result of async read
size_t bytesTransferred ///< bytes transferred by the async read
);
void setTimeout();
void cancelTimeout();
void handleTimeout(boost::system::error_code const& error);
bool validRequest();
void processRequest();
void processFwdConnect();
bool sendSocket(boost::asio::ip::tcp::socket::native_handle_type socketToSend);
void logRequest(int level,
char const* stage,
char const* msg,
char const* additionalInfo = ""
);
private:
CfsRequestHeader m_requestHeader;
char m_data[1024];
boost::asio::deadline_timer m_timer;
boost::asio::ip::tcp::socket m_socket;
serverOptionsPtr m_serverOptions;
bool m_secure;
std::string m_sessionId;
unsigned long m_processId;
std::string m_endpointInfoAsString;
};
#endif // CFSSESSION_H