From 6047d578f8faf595002382750719b96579d4b385 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Tue, 10 Mar 2020 12:19:24 -0400 Subject: [PATCH 1/3] fully randomize hop selection --- llarp/nodedb.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/llarp/nodedb.cpp b/llarp/nodedb.cpp index 6c2282a1b..a1a5cd8ea 100644 --- a/llarp/nodedb.cpp +++ b/llarp/nodedb.cpp @@ -537,17 +537,16 @@ llarp_nodedb::select_random_hop(const llarp::RouterContact &prev, return false; if(!N) return false; - llarp_time_t now = llarp::time_now_ms(); - auto itr = entries.begin(); - size_t pos = llarp::randint() % sz; + auto itr = entries.begin(); + const size_t pos = llarp::randint() % sz; std::advance(itr, pos); - auto start = itr; + const auto start = itr; while(itr == entries.end()) { if(prev.pubkey != itr->second.rc.pubkey) { - if(itr->second.rc.addrs.size() && !itr->second.rc.IsExpired(now)) + if(itr->second.rc.IsPublicRouter()) { result = itr->second.rc; return true; @@ -560,7 +559,7 @@ llarp_nodedb::select_random_hop(const llarp::RouterContact &prev, { if(prev.pubkey != itr->second.rc.pubkey) { - if(itr->second.rc.addrs.size() && !itr->second.rc.IsExpired(now)) + if(itr->second.rc.IsPublicRouter()) { result = itr->second.rc; return true; @@ -583,17 +582,16 @@ llarp_nodedb::select_random_hop_excluding( { return false; } - llarp_time_t now = llarp::time_now_ms(); - auto itr = entries.begin(); - size_t pos = llarp::randint() % sz; + auto itr = entries.begin(); + const size_t pos = llarp::randint() % sz; std::advance(itr, pos); - auto start = itr; + const auto start = itr; while(itr == entries.end()) { if(exclude.count(itr->first) == 0) { - if(itr->second.rc.addrs.size() && !itr->second.rc.IsExpired(now)) + if(itr->second.rc.IsPublicRouter()) { result = itr->second.rc; return true; @@ -606,7 +604,7 @@ llarp_nodedb::select_random_hop_excluding( { if(exclude.count(itr->first) == 0) { - if(itr->second.rc.addrs.size() && !itr->second.rc.IsExpired(now)) + if(itr->second.rc.IsPublicRouter()) { result = itr->second.rc; return true; From 69126c67df7dafb367caeef30e55fbf7eae2050f Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Wed, 11 Mar 2020 10:08:53 -0400 Subject: [PATCH 2/3] code dedup --- llarp/nodedb.cpp | 41 ++--------------------------------------- 1 file changed, 2 insertions(+), 39 deletions(-) diff --git a/llarp/nodedb.cpp b/llarp/nodedb.cpp index a1a5cd8ea..38d0ca3f7 100644 --- a/llarp/nodedb.cpp +++ b/llarp/nodedb.cpp @@ -529,45 +529,8 @@ bool llarp_nodedb::select_random_hop(const llarp::RouterContact &prev, llarp::RouterContact &result, size_t N) { - llarp::util::Lock lock(access); - /// checking for "guard" status for N = 0 is done by caller inside of - /// pathbuilder's scope - size_t sz = entries.size(); - if(sz < 3) - return false; - if(!N) - return false; - - auto itr = entries.begin(); - const size_t pos = llarp::randint() % sz; - std::advance(itr, pos); - const auto start = itr; - while(itr == entries.end()) - { - if(prev.pubkey != itr->second.rc.pubkey) - { - if(itr->second.rc.IsPublicRouter()) - { - result = itr->second.rc; - return true; - } - } - itr++; - } - itr = entries.begin(); - while(itr != start) - { - if(prev.pubkey != itr->second.rc.pubkey) - { - if(itr->second.rc.IsPublicRouter()) - { - result = itr->second.rc; - return true; - } - } - ++itr; - } - return false; + (void)N; + return select_random_hop_excluding(result, {prev.pubkey}); } bool From 9cdc7f498d07e12e8f9f6bf897ee7ca0e4bf4787 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Wed, 11 Mar 2020 10:12:29 -0400 Subject: [PATCH 3/3] remove dead code --- llarp/nodedb.cpp | 7 ------- llarp/nodedb.hpp | 4 ---- 2 files changed, 11 deletions(-) diff --git a/llarp/nodedb.cpp b/llarp/nodedb.cpp index 38d0ca3f7..5f78f84d5 100644 --- a/llarp/nodedb.cpp +++ b/llarp/nodedb.cpp @@ -525,13 +525,6 @@ llarp_nodedb::select_random_exit(llarp::RouterContact &result) return false; } -bool -llarp_nodedb::select_random_hop(const llarp::RouterContact &prev, - llarp::RouterContact &result, size_t N) -{ - (void)N; - return select_random_hop_excluding(result, {prev.pubkey}); -} bool llarp_nodedb::select_random_hop_excluding( diff --git a/llarp/nodedb.hpp b/llarp/nodedb.hpp index 90c959a5d..90790e460 100644 --- a/llarp/nodedb.hpp +++ b/llarp/nodedb.hpp @@ -154,10 +154,6 @@ struct llarp_nodedb bool select_random_exit(llarp::RouterContact &rc) EXCLUDES(access); - bool - select_random_hop(const llarp::RouterContact &prev, - llarp::RouterContact &result, size_t N) EXCLUDES(access); - bool select_random_hop_excluding(llarp::RouterContact &result, const std::set< llarp::RouterID > &exclude)