diff --git a/I2PTunnel.cpp b/I2PTunnel.cpp index 4cd4a673..43398318 100644 --- a/I2PTunnel.cpp +++ b/I2PTunnel.cpp @@ -9,12 +9,12 @@ namespace i2p { namespace client { - I2PTunnelConnection::I2PTunnelConnection (I2PService * owner, - boost::asio::ip::tcp::socket * socket, std::shared_ptr leaseSet): + I2PTunnelConnection::I2PTunnelConnection (I2PService * owner, boost::asio::ip::tcp::socket * socket, + std::shared_ptr leaseSet, int port): I2PServiceHandler(owner), m_Socket (socket), m_RemoteEndpoint (socket->remote_endpoint ()), m_IsQuiet (true) { - m_Stream = GetOwner()->GetLocalDestination ()->CreateStream (leaseSet); + m_Stream = GetOwner()->GetLocalDestination ()->CreateStream (leaseSet, port); } I2PTunnelConnection::I2PTunnelConnection (I2PService * owner, @@ -156,20 +156,23 @@ namespace client { public: I2PClientTunnelHandler (I2PClientTunnel * parent, i2p::data::IdentHash destination, - boost::asio::ip::tcp::socket * socket): - I2PServiceHandler(parent), m_DestinationIdentHash(destination), m_Socket(socket) {} + int destinationPort, boost::asio::ip::tcp::socket * socket): + I2PServiceHandler(parent), m_DestinationIdentHash(destination), + m_DestinationPort (destinationPort), m_Socket(socket) {}; void Handle(); void Terminate(); private: void HandleStreamRequestComplete (std::shared_ptr stream); i2p::data::IdentHash m_DestinationIdentHash; + int m_DestinationPort; boost::asio::ip::tcp::socket * m_Socket; }; void I2PClientTunnelHandler::Handle() { - GetOwner()->GetLocalDestination ()->CreateStream (std::bind (&I2PClientTunnelHandler::HandleStreamRequestComplete, - shared_from_this(), std::placeholders::_1), m_DestinationIdentHash); + GetOwner()->GetLocalDestination ()->CreateStream ( + std::bind (&I2PClientTunnelHandler::HandleStreamRequestComplete, shared_from_this(), std::placeholders::_1), + m_DestinationIdentHash, m_DestinationPort); } void I2PClientTunnelHandler::HandleStreamRequestComplete (std::shared_ptr stream) @@ -202,8 +205,8 @@ namespace client Done(shared_from_this()); } - I2PClientTunnel::I2PClientTunnel (const std::string& destination, int port, std::shared_ptr localDestination): - TCPIPAcceptor (port,localDestination), m_Destination (destination), m_DestinationIdentHash (nullptr) + I2PClientTunnel::I2PClientTunnel (const std::string& destination, int port, std::shared_ptr localDestination, int destinationPort): + TCPIPAcceptor (port,localDestination), m_Destination (destination), m_DestinationIdentHash (nullptr), m_DestinationPort (destinationPort) {} void I2PClientTunnel::Start () @@ -238,7 +241,7 @@ namespace client { const i2p::data::IdentHash *identHash = GetIdentHash(); if (identHash) - return std::make_shared(this, *identHash, socket); + return std::make_shared(this, *identHash, m_DestinationPort, socket); else return nullptr; } diff --git a/I2PTunnel.h b/I2PTunnel.h index 3d91eec5..7c36f543 100644 --- a/I2PTunnel.h +++ b/I2PTunnel.h @@ -25,7 +25,7 @@ namespace client public: I2PTunnelConnection (I2PService * owner, boost::asio::ip::tcp::socket * socket, - std::shared_ptr leaseSet); // to I2P + std::shared_ptr leaseSet, int port = 0); // to I2P I2PTunnelConnection (I2PService * owner, boost::asio::ip::tcp::socket * socket, std::shared_ptr stream); // to I2P using simplified API :) I2PTunnelConnection (I2PService * owner, std::shared_ptr stream, boost::asio::ip::tcp::socket * socket, @@ -65,7 +65,7 @@ namespace client public: - I2PClientTunnel (const std::string& destination, int port, std::shared_ptr localDestination = nullptr); + I2PClientTunnel (const std::string& destination, int port, std::shared_ptr localDestination, int destinationPort = 0); ~I2PClientTunnel () {} void Start (); @@ -77,6 +77,7 @@ namespace client std::string m_Destination; const i2p::data::IdentHash * m_DestinationIdentHash; + int m_DestinationPort; }; class I2PServerTunnel: public I2PService