mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
generic GetRandomRputer
This commit is contained in:
parent
ec624c89b2
commit
08ff685de8
20
NetDb.cpp
20
NetDb.cpp
@ -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
|
||||
|
3
NetDb.h
3
NetDb.h
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user