|
|
|
@ -507,11 +507,6 @@ namespace transport
@@ -507,11 +507,6 @@ namespace transport
|
|
|
|
|
peer.router->GetPublishedNTCP2V6Address () : peer.router->GetPublishedNTCP2V4Address (); |
|
|
|
|
if (address && m_CheckReserved && i2p::util::net::IsInReservedRange(address->host)) |
|
|
|
|
address = nullptr; |
|
|
|
|
if (address && !i2p::data::CheckStaticKey (address->s, ident)) |
|
|
|
|
{ |
|
|
|
|
LogPrint (eLogWarning, "Transports: NTCP2 address static key router mismatch ", ident.ToBase64 ()); |
|
|
|
|
address = nullptr; |
|
|
|
|
} |
|
|
|
|
if (address) |
|
|
|
|
{ |
|
|
|
|
auto s = std::make_shared<NTCP2Session> (*m_NTCP2Server, peer.router, address); |
|
|
|
@ -531,11 +526,6 @@ namespace transport
@@ -531,11 +526,6 @@ namespace transport
|
|
|
|
|
peer.router->GetSSU2V6Address () : peer.router->GetSSU2V4Address (); |
|
|
|
|
if (address && m_CheckReserved && i2p::util::net::IsInReservedRange(address->host)) |
|
|
|
|
address = nullptr; |
|
|
|
|
if (address && !i2p::data::CheckStaticKey (address->s, ident)) |
|
|
|
|
{ |
|
|
|
|
LogPrint (eLogWarning, "Transports: SSU2 address static key router mismatch ", ident.ToBase64 ()); |
|
|
|
|
address = nullptr; |
|
|
|
|
} |
|
|
|
|
if (address && address->IsReachableSSU ()) |
|
|
|
|
{ |
|
|
|
|
if (m_SSU2Server->CreateSession (peer.router, address)) |
|
|
|
@ -547,11 +537,6 @@ namespace transport
@@ -547,11 +537,6 @@ namespace transport
|
|
|
|
|
{ |
|
|
|
|
if (!m_NTCP2Server) continue; |
|
|
|
|
auto address = peer.router->GetYggdrasilAddress (); |
|
|
|
|
if (address && !i2p::data::CheckStaticKey (address->s, ident)) |
|
|
|
|
{ |
|
|
|
|
LogPrint (eLogWarning, "Transports: Yggdrasil address static key router mismatch ", ident.ToBase64 ()); |
|
|
|
|
address = nullptr; |
|
|
|
|
} |
|
|
|
|
if (address) |
|
|
|
|
{ |
|
|
|
|
auto s = std::make_shared<NTCP2Session> (*m_NTCP2Server, peer.router, address); |
|
|
|
@ -606,7 +591,7 @@ namespace transport
@@ -606,7 +591,7 @@ namespace transport
|
|
|
|
|
peer.router->GetCompatibleTransports (true); |
|
|
|
|
peer.numAttempts = 0; |
|
|
|
|
peer.priority.clear (); |
|
|
|
|
bool ssu2 = rand () & 1; |
|
|
|
|
bool ssu2 = peer.router->GetProfile ()->IsReal () ? (rand () & 1) : false; // try NTCP2 if router is not confirmed real
|
|
|
|
|
const auto& priority = ssu2 ? ssu2Priority : ntcp2Priority; |
|
|
|
|
for (auto transport: priority) |
|
|
|
|
if (transport & compatibleTransports) |
|
|
|
@ -725,6 +710,13 @@ namespace transport
@@ -725,6 +710,13 @@ namespace transport
|
|
|
|
|
transports |= it->second.priority[i]; |
|
|
|
|
i2p::data::netdb.ExcludeReachableTransports (ident, transports); |
|
|
|
|
} |
|
|
|
|
if (it->second.router) |
|
|
|
|
{ |
|
|
|
|
auto transport = it->second.priority[it->second.numAttempts]; |
|
|
|
|
if (transport == i2p::data::RouterInfo::eNTCP2V4 || |
|
|
|
|
transport == i2p::data::RouterInfo::eNTCP2V6 || transport == i2p::data::RouterInfo::eNTCP2V6Mesh) |
|
|
|
|
it->second.router->GetProfile ()->Connected (); // outgoing NTCP2 connection if always real
|
|
|
|
|
} |
|
|
|
|
it->second.numAttempts = 0; |
|
|
|
|
it->second.router = nullptr; // we don't need RouterInfo after successive connect
|
|
|
|
|
bool sendDatabaseStore = true; |
|
|
|
@ -755,6 +747,7 @@ namespace transport
@@ -755,6 +747,7 @@ namespace transport
|
|
|
|
|
if (!session->IsOutgoing ()) // incoming
|
|
|
|
|
session->SendI2NPMessages ({ CreateDatabaseStoreMsg () }); // send DatabaseStore
|
|
|
|
|
auto r = i2p::data::netdb.FindRouter (ident); // router should be in netdb after SessionConfirmed
|
|
|
|
|
if (r) r->GetProfile ()->Connected (); |
|
|
|
|
auto ts = i2p::util::GetSecondsSinceEpoch (); |
|
|
|
|
std::unique_lock<std::mutex> l(m_PeersMutex); |
|
|
|
|
auto it = m_Peers.insert (std::make_pair (ident, Peer{ r, ts })).first; |
|
|
|
|