From 85e65da4925ed77a3bd3ba5a9c8d16f27ddb6ad6 Mon Sep 17 00:00:00 2001 From: xcps Date: Tue, 30 Aug 2016 01:48:37 +0500 Subject: [PATCH] server tunnel on linux binds on 127.x.x.x --- I2PTunnel.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/I2PTunnel.cpp b/I2PTunnel.cpp index ad06328b..fc4da719 100644 --- a/I2PTunnel.cpp +++ b/I2PTunnel.cpp @@ -50,9 +50,21 @@ namespace client void I2PTunnelConnection::Connect () { - if (m_Socket) + if (m_Socket) { +#ifdef __linux__ + // bind to 127.x.x.x address + // where x.x.x are first three bytes from ident + m_Socket->open (boost::asio::ip::tcp::v4 ()); + boost::asio::ip::address_v4::bytes_type bytes; + const uint8_t * ident = m_Stream->GetRemoteIdentity ()->GetIdentHash (); + bytes[0] = 127; + memcpy (bytes.data ()+1, ident, 3); + boost::asio::ip::address ourIP = boost::asio::ip::address_v4 (bytes); + m_Socket->bind (boost::asio::ip::tcp::endpoint (ourIP, 0)); +#endif m_Socket->async_connect (m_RemoteEndpoint, std::bind (&I2PTunnelConnection::HandleConnect, shared_from_this (), std::placeholders::_1)); + } } void I2PTunnelConnection::Terminate ()