|
|
@ -14,6 +14,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
#include <iterator>
|
|
|
|
#include <iterator>
|
|
|
|
#include <functional>
|
|
|
|
#include <functional>
|
|
|
|
|
|
|
|
#include <random>
|
|
|
|
|
|
|
|
|
|
|
|
namespace llarp
|
|
|
|
namespace llarp
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -48,6 +49,13 @@ namespace llarp
|
|
|
|
" routers");
|
|
|
|
" routers");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
|
|
|
RCLookupHandler::HaveReceivedWhitelist()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
util::Lock l(&_mutex);
|
|
|
|
|
|
|
|
return whitelistRouters.empty();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
RCLookupHandler::GetRC(const RouterID &router, RCRequestCallback callback,
|
|
|
|
RCLookupHandler::GetRC(const RouterID &router, RCRequestCallback callback,
|
|
|
|
bool forceLookup)
|
|
|
|
bool forceLookup)
|
|
|
@ -239,21 +247,30 @@ namespace llarp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(useWhitelist)
|
|
|
|
if(useWhitelist)
|
|
|
|
{
|
|
|
|
|
|
|
|
std::set< RouterID > lookupRouters;
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
static constexpr size_t LookupPerTick = 25;
|
|
|
|
static constexpr size_t LookupPerTick = 25;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::vector< RouterID > lookupRouters;
|
|
|
|
|
|
|
|
lookupRouters.reserve(LookupPerTick);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
// if we are using a whitelist look up a few routers we don't have
|
|
|
|
// if we are using a whitelist look up a few routers we don't have
|
|
|
|
util::Lock l(&_mutex);
|
|
|
|
util::Lock l(&_mutex);
|
|
|
|
for(const auto &r : whitelistRouters)
|
|
|
|
for(const auto &r : whitelistRouters)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(_nodedb->Has(r))
|
|
|
|
if(_nodedb->Has(r))
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
lookupRouters.emplace(r);
|
|
|
|
lookupRouters.emplace_back(r);
|
|
|
|
if(lookupRouters.size() >= LookupPerTick)
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(lookupRouters.size() > LookupPerTick)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
static std::mt19937_64 rng{std::random_device{}()};
|
|
|
|
|
|
|
|
std::shuffle(lookupRouters.begin(), lookupRouters.end(), rng);
|
|
|
|
|
|
|
|
lookupRouters.resize(LookupPerTick);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for(const auto &r : lookupRouters)
|
|
|
|
for(const auto &r : lookupRouters)
|
|
|
|
GetRC(r, nullptr, true);
|
|
|
|
GetRC(r, nullptr, true);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|