From 8a6bea64bce85795998b2ea4ee18960feb53440b Mon Sep 17 00:00:00 2001 From: "Francisco Blas (klondike) Izquierdo Riera" Date: Thu, 8 Jan 2015 01:35:42 +0100 Subject: [PATCH] Make the HTTP Proxy use TCPIPAcceptor --- HTTPProxy.cpp | 36 ++---------------------------------- HTTPProxy.h | 25 +++++++------------------ 2 files changed, 9 insertions(+), 52 deletions(-) diff --git a/HTTPProxy.cpp b/HTTPProxy.cpp index 77c2be40..5659a80b 100644 --- a/HTTPProxy.cpp +++ b/HTTPProxy.cpp @@ -231,41 +231,9 @@ namespace proxy } } - void HTTPProxyServer::Start () + std::shared_ptr HTTPProxyServer::CreateHandler(boost::asio::ip::tcp::socket * socket) { - m_Acceptor.listen (); - Accept (); - } - - void HTTPProxyServer::Stop () - { - m_Acceptor.close(); - m_Timer.cancel (); - ClearHandlers(); - } - - void HTTPProxyServer::Accept () - { - auto newSocket = new boost::asio::ip::tcp::socket (GetService ()); - m_Acceptor.async_accept (*newSocket, std::bind (&HTTPProxyServer::HandleAccept, this, - std::placeholders::_1, newSocket)); - } - - void HTTPProxyServer::HandleAccept (const boost::system::error_code& ecode, boost::asio::ip::tcp::socket * socket) - { - if (!ecode) - { - LogPrint(eLogDebug,"--- HTTP Proxy accepted"); - auto handler = std::make_shared (this, socket); - AddHandler(handler); - handler->Handle(); - Accept(); - } - else - { - LogPrint (eLogError,"--- HTTP Proxy Closing socket on accept because: ", ecode.message ()); - delete socket; - } + return std::make_shared (this, socket); } } diff --git a/HTTPProxy.h b/HTTPProxy.h index 8e348478..4558c88f 100644 --- a/HTTPProxy.h +++ b/HTTPProxy.h @@ -12,27 +12,16 @@ namespace i2p namespace proxy { class HTTPProxyHandler; - class HTTPProxyServer: public i2p::client::I2PService + class HTTPProxyServer: public i2p::client::TCPIPAcceptor { - private: - std::set > m_Handlers; - boost::asio::ip::tcp::acceptor m_Acceptor; - boost::asio::deadline_timer m_Timer; - std::mutex m_HandlersMutex; - - private: - - void Accept(); - void HandleAccept(const boost::system::error_code& ecode, boost::asio::ip::tcp::socket * socket); + protected: + // Implements TCPIPAcceptor + std::shared_ptr CreateHandler(boost::asio::ip::tcp::socket * socket); + const char* GetName() { return "HTTP Proxy"; } public: - HTTPProxyServer(int port) : I2PService(i2p::data::SIGNING_KEY_TYPE_DSA_SHA1), - m_Acceptor (GetService (), boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4(), port)), - m_Timer (GetService ()) {}; - ~HTTPProxyServer() { Stop(); } - - void Start (); - void Stop (); + HTTPProxyServer(int port) : TCPIPAcceptor(port, i2p::data::SIGNING_KEY_TYPE_DSA_SHA1) {} + ~HTTPProxyServer() {} }; typedef HTTPProxyServer HTTPProxy;