From 484f69f16b92a26f1847a4ba1f6a24de805b7116 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 28 Jan 2021 13:33:12 -0500 Subject: [PATCH] try to select reachable router of inbound tunnel gateway --- libi2pd/TunnelPool.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libi2pd/TunnelPool.cpp b/libi2pd/TunnelPool.cpp index 94462c93..784dc84e 100644 --- a/libi2pd/TunnelPool.cpp +++ b/libi2pd/TunnelPool.cpp @@ -414,7 +414,8 @@ namespace tunnel else if (i2p::transport::transports.GetNumPeers () > 25) { auto r = i2p::transport::transports.GetRandomPeer (); - if (r && !r->GetProfile ()->IsBad ()) + if (r && !r->GetProfile ()->IsBad () && + (numHops > 1 || !inbound || r->IsReachable ())) // first must be reachable { prevHop = r; peers.push_back (r->GetRouterIdentity ()); @@ -430,6 +431,12 @@ namespace tunnel LogPrint (eLogError, "Tunnels: Can't select next hop for ", prevHop->GetIdentHashBase64 ()); return false; } + if (inbound && (i == numHops - 1) && !hop->IsReachable ()) + { + // if first is not reachable try again + auto hop1 = nextHop (prevHop); + if (hop1) hop = hop1; + } prevHop = hop; peers.push_back (hop->GetRouterIdentity ()); }