diff --git a/BOB.cpp b/BOB.cpp index 3ff5358d..89ff6ce5 100644 --- a/BOB.cpp +++ b/BOB.cpp @@ -34,7 +34,7 @@ namespace client void BOBI2PInboundTunnel::Accept () { auto receiver = new AddressReceiver (); - receiver->socket = new boost::asio::ip::tcp::socket (GetService ()); + receiver->socket = std::make_shared (GetService ()); m_Acceptor.async_accept (*receiver->socket, std::bind (&BOBI2PInboundTunnel::HandleAccept, this, std::placeholders::_1, receiver)); } @@ -47,10 +47,7 @@ namespace client ReceiveAddress (receiver); } else - { - delete receiver->socket; delete receiver; - } } void BOBI2PInboundTunnel::ReceiveAddress (AddressReceiver * receiver) @@ -68,7 +65,6 @@ namespace client if (ecode) { LogPrint ("BOB inbound tunnel read error: ", ecode.message ()); - delete receiver->socket; delete receiver; } else @@ -86,7 +82,6 @@ namespace client if (!context.GetAddressBook ().GetIdentHash (receiver->buffer, ident)) { LogPrint (eLogError, "BOB address ", receiver->buffer, " not found"); - delete receiver->socket; delete receiver; return; } @@ -105,7 +100,6 @@ namespace client else { LogPrint ("BOB missing inbound address "); - delete receiver->socket; delete receiver; } } @@ -125,7 +119,6 @@ namespace client else LogPrint ("LeaseSet for BOB inbound destination not found"); } - delete receiver->socket; delete receiver; } @@ -167,7 +160,7 @@ namespace client { if (stream) { - auto conn = std::make_shared (this, stream, new boost::asio::ip::tcp::socket (GetService ()), m_Endpoint, m_IsQuiet); + auto conn = std::make_shared (this, stream, std::make_shared (GetService ()), m_Endpoint, m_IsQuiet); AddHandler (conn); conn->Connect (); } diff --git a/BOB.h b/BOB.h index 23a56875..4b0f09fa 100644 --- a/BOB.h +++ b/BOB.h @@ -57,7 +57,7 @@ namespace client { struct AddressReceiver { - boost::asio::ip::tcp::socket * socket; + std::shared_ptr socket; char buffer[BOB_COMMAND_BUFFER_SIZE + 1]; // for destination base64 address uint8_t * data; size_t dataLen, bufferOffset; diff --git a/HTTPProxy.cpp b/HTTPProxy.cpp index 8c7fb299..a575cc41 100644 --- a/HTTPProxy.cpp +++ b/HTTPProxy.cpp @@ -44,7 +44,7 @@ namespace proxy void HandleStreamRequestComplete (std::shared_ptr stream); uint8_t m_http_buff[http_buffer_size]; - boost::asio::ip::tcp::socket * m_sock; + std::shared_ptr m_sock; std::string m_request; //Data left to be sent std::string m_url; //URL std::string m_method; //Method @@ -56,7 +56,7 @@ namespace proxy public: - HTTPProxyHandler(HTTPProxyServer * parent, boost::asio::ip::tcp::socket * sock) : + HTTPProxyHandler(HTTPProxyServer * parent, std::shared_ptr sock) : I2PServiceHandler(parent), m_sock(sock) { EnterState(GET_METHOD); } ~HTTPProxyHandler() { Terminate(); } @@ -77,10 +77,10 @@ namespace proxy void HTTPProxyHandler::Terminate() { if (Kill()) return; - if (m_sock) { + if (m_sock) + { LogPrint(eLogDebug,"--- HTTP Proxy close sock"); m_sock->close(); - delete m_sock; m_sock = nullptr; } Done(shared_from_this()); @@ -290,7 +290,7 @@ namespace proxy { } - std::shared_ptr HTTPProxyServer::CreateHandler(boost::asio::ip::tcp::socket * socket) + std::shared_ptr HTTPProxyServer::CreateHandler(std::shared_ptr socket) { return std::make_shared (this, socket); } diff --git a/HTTPProxy.h b/HTTPProxy.h index e1e6e2fa..6c0d0a6f 100644 --- a/HTTPProxy.h +++ b/HTTPProxy.h @@ -21,7 +21,7 @@ namespace proxy protected: // Implements TCPIPAcceptor - std::shared_ptr CreateHandler(boost::asio::ip::tcp::socket * socket); + std::shared_ptr CreateHandler(std::shared_ptr socket); const char* GetName() { return "HTTP Proxy"; } }; diff --git a/I2PService.cpp b/I2PService.cpp index 6b74fe1a..0715a39f 100644 --- a/I2PService.cpp +++ b/I2PService.cpp @@ -48,31 +48,30 @@ namespace client void TCPIPAcceptor::Accept () { - auto newSocket = new boost::asio::ip::tcp::socket (GetService ()); + auto newSocket = std::make_shared (GetService ()); m_Acceptor.async_accept (*newSocket, std::bind (&TCPIPAcceptor::HandleAccept, this, std::placeholders::_1, newSocket)); } - void TCPIPAcceptor::HandleAccept (const boost::system::error_code& ecode, boost::asio::ip::tcp::socket * socket) + void TCPIPAcceptor::HandleAccept (const boost::system::error_code& ecode, std::shared_ptr socket) { if (!ecode) { LogPrint(eLogDebug,"--- ",GetName()," accepted"); auto handler = CreateHandler(socket); - if (handler) { + if (handler) + { AddHandler(handler); handler->Handle(); - } else { + } + else socket->close(); - delete socket; - } Accept(); } else { if (ecode != boost::asio::error::operation_aborted) LogPrint (eLogError,"--- ",GetName()," Closing socket on accept because: ", ecode.message ()); - delete socket; } } diff --git a/I2PService.h b/I2PService.h index 1e4fc10b..37c06828 100644 --- a/I2PService.h +++ b/I2PService.h @@ -95,11 +95,11 @@ namespace client //If you override this make sure you call it from the children void Stop (); protected: - virtual std::shared_ptr CreateHandler(boost::asio::ip::tcp::socket * socket) = 0; + virtual std::shared_ptr CreateHandler(std::shared_ptr socket) = 0; virtual const char* GetName() { return "Generic TCP/IP accepting daemon"; } private: void Accept(); - void HandleAccept(const boost::system::error_code& ecode, boost::asio::ip::tcp::socket * socket); + void HandleAccept(const boost::system::error_code& ecode, std::shared_ptr socket); boost::asio::ip::tcp::acceptor m_Acceptor; boost::asio::deadline_timer m_Timer; }; diff --git a/I2PTunnel.cpp b/I2PTunnel.cpp index 51392819..7a2e181e 100644 --- a/I2PTunnel.cpp +++ b/I2PTunnel.cpp @@ -9,7 +9,7 @@ namespace i2p { namespace client { - I2PTunnelConnection::I2PTunnelConnection (I2PService * owner, boost::asio::ip::tcp::socket * socket, + I2PTunnelConnection::I2PTunnelConnection (I2PService * owner, std::shared_ptr socket, std::shared_ptr leaseSet, int port): I2PServiceHandler(owner), m_Socket (socket), m_RemoteEndpoint (socket->remote_endpoint ()), m_IsQuiet (true) @@ -18,14 +18,14 @@ namespace client } I2PTunnelConnection::I2PTunnelConnection (I2PService * owner, - boost::asio::ip::tcp::socket * socket, std::shared_ptr stream): + std::shared_ptr socket, std::shared_ptr stream): I2PServiceHandler(owner), m_Socket (socket), m_Stream (stream), m_RemoteEndpoint (socket->remote_endpoint ()), m_IsQuiet (true) { } I2PTunnelConnection::I2PTunnelConnection (I2PService * owner, std::shared_ptr stream, - boost::asio::ip::tcp::socket * socket, const boost::asio::ip::tcp::endpoint& target, bool quiet): + std::shared_ptr socket, const boost::asio::ip::tcp::endpoint& target, bool quiet): I2PServiceHandler(owner), m_Socket (socket), m_Stream (stream), m_RemoteEndpoint (target), m_IsQuiet (quiet) { @@ -155,7 +155,7 @@ namespace client { public: I2PClientTunnelHandler (I2PClientTunnel * parent, i2p::data::IdentHash destination, - int destinationPort, boost::asio::ip::tcp::socket * socket): + int destinationPort, std::shared_ptr socket): I2PServiceHandler(parent), m_DestinationIdentHash(destination), m_DestinationPort (destinationPort), m_Socket(socket) {}; void Handle(); @@ -164,7 +164,7 @@ namespace client void HandleStreamRequestComplete (std::shared_ptr stream); i2p::data::IdentHash m_DestinationIdentHash; int m_DestinationPort; - boost::asio::ip::tcp::socket * m_Socket; + std::shared_ptr m_Socket; }; void I2PClientTunnelHandler::Handle() @@ -198,7 +198,6 @@ namespace client if (m_Socket) { m_Socket->close(); - delete m_Socket; m_Socket = nullptr; } Done(shared_from_this()); @@ -236,7 +235,7 @@ namespace client return m_DestinationIdentHash; } - std::shared_ptr I2PClientTunnel::CreateHandler(boost::asio::ip::tcp::socket * socket) + std::shared_ptr I2PClientTunnel::CreateHandler(std::shared_ptr socket) { const i2p::data::IdentHash *identHash = GetIdentHash(); if (identHash) @@ -296,7 +295,7 @@ namespace client return; } } - auto conn = std::make_shared (this, stream, new boost::asio::ip::tcp::socket (GetService ()), m_Endpoint); + auto conn = std::make_shared (this, stream, std::make_shared (GetService ()), m_Endpoint); AddHandler (conn); conn->Connect (); } diff --git a/I2PTunnel.h b/I2PTunnel.h index 39136587..e512a319 100644 --- a/I2PTunnel.h +++ b/I2PTunnel.h @@ -24,11 +24,11 @@ namespace client { public: - I2PTunnelConnection (I2PService * owner, boost::asio::ip::tcp::socket * socket, + I2PTunnelConnection (I2PService * owner, std::shared_ptr socket, std::shared_ptr leaseSet, int port = 0); // to I2P - I2PTunnelConnection (I2PService * owner, boost::asio::ip::tcp::socket * socket, + I2PTunnelConnection (I2PService * owner, std::shared_ptr socket, std::shared_ptr stream); // to I2P using simplified API :) - I2PTunnelConnection (I2PService * owner, std::shared_ptr stream, boost::asio::ip::tcp::socket * socket, + I2PTunnelConnection (I2PService * owner, std::shared_ptr stream, std::shared_ptr socket, const boost::asio::ip::tcp::endpoint& target, bool quiet = true); // from I2P ~I2PTunnelConnection (); void I2PConnect (const uint8_t * msg = nullptr, size_t len = 0); @@ -49,7 +49,7 @@ namespace client private: uint8_t m_Buffer[I2P_TUNNEL_CONNECTION_BUFFER_SIZE], m_StreamBuffer[I2P_TUNNEL_CONNECTION_BUFFER_SIZE]; - std::unique_ptr m_Socket; + std::shared_ptr m_Socket; std::shared_ptr m_Stream; boost::asio::ip::tcp::endpoint m_RemoteEndpoint; bool m_IsQuiet; // don't send destination @@ -60,7 +60,7 @@ namespace client protected: // Implements TCPIPAcceptor - std::shared_ptr CreateHandler(boost::asio::ip::tcp::socket * socket); + std::shared_ptr CreateHandler(std::shared_ptr socket); const char* GetName() { return "I2P Client Tunnel"; } public: diff --git a/SOCKS.cpp b/SOCKS.cpp index 351853a6..8cf85bbd 100644 --- a/SOCKS.cpp +++ b/SOCKS.cpp @@ -118,7 +118,7 @@ namespace proxy void HandleStreamRequestComplete (std::shared_ptr stream); uint8_t m_sock_buff[socks_buffer_size]; - boost::asio::ip::tcp::socket * m_sock; + std::shared_ptr m_sock; std::shared_ptr m_stream; uint8_t *m_remaining_data; //Data left to be sent uint8_t m_response[7+max_socks_hostname_size]; @@ -135,7 +135,7 @@ namespace proxy state m_state; public: - SOCKSHandler(SOCKSServer * parent, boost::asio::ip::tcp::socket * sock) : + SOCKSHandler(SOCKSServer * parent, std::shared_ptr sock) : I2PServiceHandler(parent), m_sock(sock), m_stream(nullptr), m_authchosen(AUTH_UNACCEPTABLE), m_addrtype(ADDR_IPV4) { m_address.ip = 0; EnterState(GET_SOCKSV); } @@ -161,7 +161,6 @@ namespace proxy { LogPrint(eLogDebug,"--- SOCKS close sock"); m_sock->close(); - delete m_sock; m_sock = nullptr; } if (m_stream) @@ -566,7 +565,7 @@ namespace proxy { } - std::shared_ptr SOCKSServer::CreateHandler(boost::asio::ip::tcp::socket * socket) + std::shared_ptr SOCKSServer::CreateHandler(std::shared_ptr socket) { return std::make_shared (this, socket); } diff --git a/SOCKS.h b/SOCKS.h index deb3a58c..7854ce3a 100644 --- a/SOCKS.h +++ b/SOCKS.h @@ -20,7 +20,7 @@ namespace proxy protected: // Implements TCPIPAcceptor - std::shared_ptr CreateHandler(boost::asio::ip::tcp::socket * socket); + std::shared_ptr CreateHandler(std::shared_ptr socket); const char* GetName() { return "SOCKS"; } };