Merge pull request #600 from majestrate/master

use router whitelist when possible
pull/606/head
Jeff 5 years ago committed by GitHub
commit cbf00e786c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -631,12 +631,12 @@ namespace llarp
std::vector< std::unique_ptr< IMessage > >& reply)
{
std::vector< RouterID > closer;
Key_t t(target.as_array());
const Key_t t(target.as_array());
std::set< Key_t > found;
if(!_nodes)
return false;
size_t nodeCount = _nodes->size();
const size_t nodeCount = _nodes->size();
if(nodeCount == 0)
{
llarp::LogError(
@ -648,7 +648,7 @@ namespace llarp
// ourKey should never be in the connected list
// requester is likely in the connected list
// 4 or connection nodes (minus a potential requestor), whatever is less
size_t want = std::min(size_t(4), nodeCount - 1);
const size_t want = std::min(size_t(4), nodeCount - 1);
llarp::LogDebug("We want ", want, " connected nodes in the DHT");
if(!_nodes->GetManyNearExcluding(t, found, want,
std::set< Key_t >{ourKey, requester}))
@ -660,7 +660,11 @@ namespace llarp
return false;
}
for(const auto& f : found)
closer.emplace_back(f.as_array());
{
const RouterID r(f.as_array());
if(GetRouter()->ConnectionToRouterAllowed(r))
closer.emplace_back(r);
}
reply.emplace_back(new GotRouterMessage(txid, closer, false));
return true;
}

@ -35,6 +35,12 @@ namespace llarp
Key_t peer;
// check if we know this in our nodedb first
RouterContact found;
if(!dht.GetRouter()->ConnectionToRouterAllowed(K))
{
// explicitly disallowed by network
replies.emplace_back(new GotRouterMessage(k, txid, {}, false));
return true;
}
if(dht.GetRouter()->nodedb()->Get(K, found))
{
replies.emplace_back(new GotRouterMessage(k, txid, {found}, false));
@ -166,6 +172,12 @@ namespace llarp
Key_t k{K};
if(exploritory)
return dht.HandleExploritoryRouterLookup(From, txid, K, replies);
else if(!dht.GetRouter()->ConnectionToRouterAllowed(K))
{
// explicitly disallowed by network
replies.emplace_back(new GotRouterMessage(k, txid, {}, false));
return true;
}
else if(dht.Nodes()->HasNode(k))
{
found = dht.Nodes()->nodes[k].rc;

@ -134,7 +134,11 @@ namespace llarp
{
RouterID random;
if(GetRouter()->GetRandomGoodRouter(random))
{
msg.AddCNAMEReply(random.ToString(), 1);
auto ip = ObtainServiceNodeIP(random);
msg.AddINReply(ip, false);
}
else
msg.AddNXReply();
reply(msg);

@ -282,6 +282,17 @@ namespace llarp
bool
Router::GetRandomGoodRouter(RouterID &router)
{
if(whitelistRouters)
{
const auto sz = lokinetRouters.size();
auto itr = lokinetRouters.begin();
if(sz == 0)
return false;
if(sz > 1)
std::advance(itr, randint() % sz);
router = itr->first;
return true;
}
absl::ReaderMutexLock l(&nodedb()->access);
auto sz = nodedb()->entries.size();
if(sz == 0)

Loading…
Cancel
Save