From 10c2d1552d85032bcc58454324f804f707386bc6 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Wed, 28 Nov 2018 10:18:18 -0500 Subject: [PATCH] don't connect to explored routers --- llarp/dht/context.cpp | 5 ++--- llarp/router.cpp | 18 ++++++++++++++++++ llarp/router.hpp | 5 +++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/llarp/dht/context.cpp b/llarp/dht/context.cpp index d89bf8e50..5cdf40464 100644 --- a/llarp/dht/context.cpp +++ b/llarp/dht/context.cpp @@ -77,9 +77,8 @@ namespace llarp llarp::LogInfo("got ", valuesFound.size(), " routers from exploration"); for(const auto &pk : valuesFound) { - // try connecting to it we don't know it - // this triggers a dht lookup - parent->router->TryEstablishTo(pk); + // lookup router + parent->LookupRouter(pk, std::bind(&llarp_router::HandleDHTLookupForExplore, parent->router, pk, std::placeholders::_1)); } } }; diff --git a/llarp/router.cpp b/llarp/router.cpp index 5c1005ff9..1d1d7320e 100644 --- a/llarp/router.cpp +++ b/llarp/router.cpp @@ -438,6 +438,24 @@ llarp_router::ConnectionToRouterAllowed(const llarp::RouterID & router) const return true; } +void +llarp_router::HandleDHTLookupForExplore(llarp::RouterID remote, const std::vector< llarp::RouterContact > &results) +{ + if(results.size() == 0) + return; + for(const auto & rc: results) + { + if(rc.Verify(&crypto)) + llarp_nodedb_put_rc(nodedb, rc); + else + return; + } + if(ConnectionToRouterAllowed(remote)) + { + TryEstablishTo(remote); + } +} + void llarp_router::TryEstablishTo(const llarp::RouterID &remote) { diff --git a/llarp/router.hpp b/llarp/router.hpp index 8278310cd..99bcd0f40 100644 --- a/llarp/router.hpp +++ b/llarp/router.hpp @@ -213,6 +213,8 @@ struct llarp_router void PersistSessionUntil(const llarp::RouterID &remote, llarp_time_t until); + + bool EnsureIdentity(); @@ -269,6 +271,9 @@ struct llarp_router void TryEstablishTo(const llarp::RouterID &remote); + void + HandleDHTLookupForExplore(llarp::RouterID remote, const std::vector< llarp::RouterContact > &results); + void ForEachPeer( std::function< void(const llarp::ILinkSession *, bool) > visit) const;