generic GetRandomRputer

This commit is contained in:
orignal 2014-09-24 21:45:19 -04:00
parent ec624c89b2
commit 08ff685de8
2 changed files with 22 additions and 3 deletions

View File

@ -786,6 +786,23 @@ namespace data
}
const RouterInfo * NetDb::GetRandomRouter (const RouterInfo * compatibleWith) const
{
if (compatibleWith)
return GetRandomRouter (
[compatibleWith](const RouterInfo * router)->bool
{
return !router->IsHidden () && router->IsCompatible (*compatibleWith);
});
else
return GetRandomRouter (
[](const RouterInfo * router)->bool
{
return !router->IsHidden ();
});
}
template<typename Filter>
const RouterInfo * NetDb::GetRandomRouter (Filter filter) const
{
CryptoPP::RandomNumberGenerator& rnd = i2p::context.GetRandomNumberGenerator ();
uint32_t ind = rnd.GenerateWord32 (0, m_RouterInfos.size () - 1);
@ -796,8 +813,7 @@ namespace data
{
if (i >= ind)
{
if (!it.second->IsUnreachable () && !it.second->IsHidden () &&
(!compatibleWith || it.second->IsCompatible (*compatibleWith)))
if (!it.second->IsUnreachable () && filter (it.second))
return it.second;
}
else

View File

@ -106,6 +106,9 @@ namespace data
bool DeleteRequestedDestination (const IdentHash& dest); // returns true if found
void DeleteRequestedDestination (RequestedDestination * dest);
template<typename Filter>
const RouterInfo * GetRandomRouter (Filter filter) const;
private:
std::map<IdentHash, LeaseSet *> m_LeaseSets;