explicitly lookup router if not connected to it on LRCM forward.

pull/630/head
Jeff Becker 5 years ago
parent dd2d69444f
commit a375f1103f
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -99,9 +99,26 @@ namespace llarp
PathContext::ForwardLRCM(const RouterID& nextHop,
const std::array< EncryptedFrame, 8 >& frames)
{
auto msg = std::make_shared<const LR_CommitMessage>(frames);
LogDebug("forwarding LRCM to ", nextHop);
const LR_CommitMessage msg(frames);
return m_Router->SendToOrQueue(nextHop, &msg);
if(m_Router->HasSessionTo(nextHop))
{
return m_Router->SendToOrQueue(nextHop, msg.get());
}
const RouterID router = nextHop;
AbstractRouter * const r = m_Router;
m_Router->LookupRouter(nextHop, [msg, r, router](const std::vector<RouterContact> & found) {
if(found.size())
{
r->TryConnectAsync(found[0], 1);
r->SendToOrQueue(router, msg.get());
}
else
LogError("dropped LRCM to ", router, " as we cannot find in via DHT");
});
LogInfo("we are not directly connected to ", router, " so we need to do a lookup");
return true;
}
template < typename Map_t, typename Key_t, typename CheckValue_t,
typename GetFunc_t >

@ -218,6 +218,10 @@ namespace llarp
virtual bool
ConnectionToRouterAllowed(const RouterID &router) const = 0;
/// return true if we have at least 1 session to this router in either direction
virtual bool
HasSessionTo(const RouterID & router) const = 0;
virtual util::StatusObject
ExtractStatus() const = 0;
};

@ -533,7 +533,9 @@ namespace llarp
const std::vector< RouterContact > &results);
bool
HasSessionTo(const RouterID &remote) const;
HasSessionTo(const RouterID &remote) const override;
void
HandleDHTLookupForTryEstablishTo(

Loading…
Cancel
Save