diff --git a/main.cpp b/main.cpp index f019591..5f4b84c 100755 --- a/main.cpp +++ b/main.cpp @@ -9,10 +9,12 @@ #include + +#if 0 #define SSL_R_SHORT_READ 219 #include "ssl/ssl_locl.h" #include - +#endif #if defined(close) #undef close @@ -78,17 +80,13 @@ std::string ConnectRequestRecord::getRequestData() - -typedef boost::asio::ssl::stream ssl_socket; - - class ProxySession : public std::enable_shared_from_this { public: - ProxySession(std::shared_ptr socket, boost::asio::io_service& inIoService) + ProxySession(boost::asio::ip::tcp::socket inSocket, boost::asio::io_service& inIoService) : ioService(inIoService) - , mSocket(socket) + , mSocket(std::move(inSocket)) , outsideConnectSocket(ioService) { std::cout << "ProxySession Create" << std::endl; @@ -102,61 +100,18 @@ public: void start() { std::cout << "ProxySession::start" << std::endl; - asyncHandshake(); - //readClientVersion(); + //asyncHandshake(); + readClientVersion(); } private: - ssl_socket& socket() + boost::asio::ip::tcp::socket& socket() { - return *mSocket; + return mSocket; } - ssl_socket::lowest_layer_type& lowerSocket() - { - return mSocket->lowest_layer(); - } - - - void asyncHandshake() - { - std::cout << "ProxySession::asyncHandshake" << std::endl; - auto self(shared_from_this()); - - socket().async_handshake(boost::asio::ssl::stream_base::server, - [this, self](boost::system::error_code ec) { - - std::cout << "ProxySession::asyncHandshake inner" << std::endl; - - if (!ec) - { - readClientVersion(); - } - else - { - std::string msg = ec.message(); - std::cout << msg << std::endl; - lowerSocket().close(); - } - - }); - } - - /* - void handleHandshake(const boost::system::error_code& error) - { - if (!error) - { - readClientVersion(); - } - else - { - lowerSocket().close(); - } - }*/ - std::array clientVersion; @@ -184,14 +139,14 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } } else { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } }); } @@ -219,7 +174,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } }); } @@ -247,7 +202,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } }); @@ -288,14 +243,14 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } } else { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } }); @@ -322,7 +277,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } }); } @@ -362,14 +317,14 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } } else { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } }); @@ -411,7 +366,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } }); @@ -455,7 +410,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); } }); @@ -477,7 +432,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); outsideConnectSocket.close(); } }); @@ -498,7 +453,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); outsideConnectSocket.close(); } }); @@ -536,7 +491,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); outsideConnectSocket.close(); } }); @@ -577,7 +532,7 @@ private: { std::string msg = ec.message(); std::cout << msg << std::endl; - lowerSocket().close(); + socket().close(); outsideConnectSocket.close(); } }); @@ -621,7 +576,7 @@ private: std::string msg = ec.message(); std::cout << msg << std::endl; outsideConnectSocket.close(); - lowerSocket().close(); + socket().close(); } }); } @@ -639,7 +594,7 @@ private: std::string msg = ec.message(); std::cout << msg << std::endl; outsideConnectSocket.close(); - lowerSocket().close(); + socket().close(); } }); } @@ -674,7 +629,7 @@ private: std::string msg = ec.message(); std::cout << msg << std::endl; outsideConnectSocket.close(); - lowerSocket().close(); + socket().close(); } }); } @@ -692,14 +647,14 @@ private: std::string msg = ec.message(); std::cout << msg << std::endl; outsideConnectSocket.close(); - lowerSocket().close(); + socket().close(); } }); } boost::asio::io_service& ioService; - std::shared_ptr mSocket; + boost::asio::ip::tcp::socket mSocket; boost::asio::ip::tcp::socket outsideConnectSocket; @@ -714,12 +669,10 @@ class ProxyServer { public: ProxyServer(boost::asio::io_service& inIoService, - const boost::asio::ip::tcp::endpoint& endpoint, - boost::asio::ssl::context& inSslContext) + const boost::asio::ip::tcp::endpoint& endpoint) : ioService(inIoService) , acceptor(inIoService, endpoint) - , socket(std::make_shared(inIoService, inSslContext)) - , sslContext(inSslContext) + , socket(inIoService) { doAccept(); } @@ -727,17 +680,17 @@ public: private: void doAccept() { - acceptor.async_accept(socket->lowest_layer(), + acceptor.async_accept(socket, [this](boost::system::error_code ec) { if (!ec) { - std::make_shared(socket, ioService)->start(); + std::make_shared(std::move(socket), ioService)->start(); } counter++; - socket = std::make_shared(ioService, sslContext); + socket = boost::asio::ip::tcp::socket(ioService); doAccept(); }); @@ -746,11 +699,7 @@ private: boost::asio::io_service& ioService; boost::asio::ip::tcp::acceptor acceptor; - std::shared_ptr socket; - - boost::asio::ssl::context& sslContext; - - //std::map proxySessionMap; + boost::asio::ip::tcp::socket socket; size_t counter = 0; }; @@ -766,25 +715,9 @@ int main() boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 8043); - boost::asio::ssl::context sslContext(boost::asio::ssl::context::sslv23); - - sslContext.set_options( - boost::asio::ssl::context::default_workarounds - | boost::asio::ssl::context::no_sslv2 - | boost::asio::ssl::context::single_dh_use); - std::function f = [](std::size_t, boost::asio::ssl::context_base::password_purpose) -> std::string { return ""; }; - sslContext.set_password_callback(f); - - sslContext.use_certificate_chain_file("server.crt"); - - sslContext.use_private_key_file("server.key", boost::asio::ssl::context::pem); - - sslContext.use_tmp_dh_file("dh2048.pem"); - - - ProxyServer proxyServer(ioService, endpoint, sslContext); + ProxyServer proxyServer(ioService, endpoint); boost::thread_group threadpool;