diff --git a/I2PTunnel.cpp b/I2PTunnel.cpp index 2a857228..bc3fe900 100644 --- a/I2PTunnel.cpp +++ b/I2PTunnel.cpp @@ -19,11 +19,6 @@ namespace stream I2PTunnelConnection::~I2PTunnelConnection () { - Terminate (); - } - - void I2PTunnelConnection::Terminate () - { if (m_Stream) { m_Stream->Close (); @@ -31,6 +26,10 @@ namespace stream m_Stream = nullptr; } delete m_Socket; + } + + void I2PTunnelConnection::Terminate () + { // TODO: remove from I2PTunnel } @@ -46,10 +45,11 @@ namespace stream if (ecode) { LogPrint ("I2PTunnel read error: ", ecode.message ()); + m_Stream->Close (); Terminate (); } else - { + { if (m_Stream) m_Stream->Send (m_Buffer, bytes_transferred, 0); Receive (); @@ -109,7 +109,7 @@ namespace stream pos = m_Destination.find (".i2p"); if (pos != std::string::npos) { - auto identHash = i2p::data::netdb.FindAddress (m_Destination.substr (0, pos)); + auto identHash = i2p::data::netdb.FindAddress (m_Destination); if (identHash) m_DestinationIdentHash = new i2p::data::IdentHash (*identHash); } @@ -150,6 +150,7 @@ namespace stream m_RemoteLeaseSet = i2p::data::netdb.FindLeaseSet (*m_DestinationIdentHash); if (m_RemoteLeaseSet) { + LogPrint ("New I2PTunnel connection"); auto connection = new I2PTunnelConnection (socket, m_RemoteLeaseSet); m_Connections.insert (connection); } diff --git a/Streaming.cpp b/Streaming.cpp index c909f8d0..b2aa3847 100644 --- a/Streaming.cpp +++ b/Streaming.cpp @@ -219,7 +219,7 @@ namespace stream size_t Stream::Send (const uint8_t * buf, size_t len, int timeout) { bool isNoAck = m_LastReceivedSequenceNumber < 0; // first packet - while (len > 0) + while (!m_IsOpen || len > 0) { Packet * p = new Packet (); uint8_t * packet = p->GetBuffer ();