From 75451d7124dcc5a37a7f19490c3267f929268dde Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Thu, 1 Jul 2021 12:29:42 -0400 Subject: [PATCH] * add establish fail enum * dont call outbound session hooks for inbound sessions --- llarp/router/i_outbound_session_maker.hpp | 5 ++++- llarp/router/outbound_session_maker.cpp | 21 +++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/llarp/router/i_outbound_session_maker.hpp b/llarp/router/i_outbound_session_maker.hpp index cc57cafea..7bb5f3693 100644 --- a/llarp/router/i_outbound_session_maker.hpp +++ b/llarp/router/i_outbound_session_maker.hpp @@ -17,7 +17,8 @@ namespace llarp Timeout, RouterNotFound, InvalidRouter, - NoLink + NoLink, + EstablishFail }; inline std::ostream& @@ -35,6 +36,8 @@ namespace llarp return out << "invalid router"; case SessionResult::RouterNotFound: return out << "not found"; + case SessionResult::EstablishFail: + return out << "establish failed"; } return out; } diff --git a/llarp/router/outbound_session_maker.cpp b/llarp/router/outbound_session_maker.cpp index fbcc903df..4eb264487 100644 --- a/llarp/router/outbound_session_maker.cpp +++ b/llarp/router/outbound_session_maker.cpp @@ -35,10 +35,10 @@ namespace llarp OutboundSessionMaker::OnSessionEstablished(ILinkSession* session) { // TODO: do we want to keep it - + const RouterContact rc = session->GetRemoteRC(); const auto router = RouterID(session->GetPubKey()); const bool isOutbound = not session->IsInbound(); - const std::string remoteType = session->GetRemoteRC().IsPublicRouter() ? "router" : "client"; + const std::string remoteType = rc.IsPublicRouter() ? "router" : "client"; LogInfo( "session with ", remoteType, " [", router, "] ", isOutbound ? "established" : "received"); @@ -48,9 +48,12 @@ namespace llarp return false; } - work([this, rc = session->GetRemoteRC()] { VerifyRC(rc); }); - - return true; + if (isOutbound) + { + work([this, rc] { VerifyRC(rc); }); + return true; + } + return _rcLookup->CheckRC(rc); } void @@ -204,12 +207,10 @@ namespace llarp } const auto& job = itr->second; - if (!job->link->TryEstablishTo(job->rc)) + if (not job->link->TryEstablishTo(job->rc)) { - // TODO: maybe different failure type? - l.unlock(); - FinalizeRequest(router, SessionResult::NoLink); + FinalizeRequest(router, SessionResult::EstablishFail); } } @@ -229,7 +230,7 @@ namespace llarp LinkLayer_ptr link = _linkManager->GetCompatibleLink(rc); - if (!link) + if (not link) { l.unlock(); FinalizeRequest(router, SessionResult::NoLink);