Browse Source

correct termination if session already exists

pull/1502/head
orignal 4 years ago
parent
commit
49c1e47736
  1. 13
      libi2pd/NTCP2.cpp

13
libi2pd/NTCP2.cpp

@ -706,9 +706,13 @@ namespace transport
// ready to communicate // ready to communicate
auto existing = i2p::data::netdb.FindRouter (ri.GetRouterIdentity ()->GetIdentHash ()); // check if exists already auto existing = i2p::data::netdb.FindRouter (ri.GetRouterIdentity ()->GetIdentHash ()); // check if exists already
SetRemoteIdentity (existing ? existing->GetRouterIdentity () : ri.GetRouterIdentity ()); SetRemoteIdentity (existing ? existing->GetRouterIdentity () : ri.GetRouterIdentity ());
m_Server.AddNTCP2Session (shared_from_this (), true); if (m_Server.AddNTCP2Session (shared_from_this (), true))
Established (); {
ReceiveLength (); Established ();
ReceiveLength ();
}
else
Terminate ();
} }
else else
Terminate (); Terminate ();
@ -1258,7 +1262,6 @@ namespace transport
if (it != m_NTCP2Sessions.end ()) if (it != m_NTCP2Sessions.end ())
{ {
LogPrint (eLogWarning, "NTCP2: session to ", ident.ToBase64 (), " already exists"); LogPrint (eLogWarning, "NTCP2: session to ", ident.ToBase64 (), " already exists");
session->Terminate();
return false; return false;
} }
m_NTCP2Sessions.insert (std::make_pair (ident, session)); m_NTCP2Sessions.insert (std::make_pair (ident, session));
@ -1301,6 +1304,8 @@ namespace transport
}); });
conn->GetSocket ().async_connect (boost::asio::ip::tcp::endpoint (address, port), std::bind (&NTCP2Server::HandleConnect, this, std::placeholders::_1, conn, timer)); conn->GetSocket ().async_connect (boost::asio::ip::tcp::endpoint (address, port), std::bind (&NTCP2Server::HandleConnect, this, std::placeholders::_1, conn, timer));
} }
else
conn->Terminate ();
}); });
} }

Loading…
Cancel
Save