From 59d195c6da41f312e68b91d691b619f804c5a555 Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 19 Mar 2014 15:58:57 -0400 Subject: [PATCH] find router with specified caps --- NetDb.cpp | 4 ++-- NetDb.h | 2 +- RouterInfo.cpp | 4 +++- RouterInfo.h | 5 +++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/NetDb.cpp b/NetDb.cpp index 8b706589..3d8a4212 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -601,7 +601,7 @@ namespace data } } - const RouterInfo * NetDb::GetRandomRouter (const RouterInfo * compatibleWith, bool floodfillOnly) const + const RouterInfo * NetDb::GetRandomRouter (const RouterInfo * compatibleWith, uint8_t caps) const { CryptoPP::RandomNumberGenerator& rnd = i2p::context.GetRandomNumberGenerator (); uint32_t ind = rnd.GenerateWord32 (0, m_RouterInfos.size () - 1); @@ -614,7 +614,7 @@ namespace data { if (!it.second->IsUnreachable () && (!compatibleWith || it.second->IsCompatible (*compatibleWith)) && - (!floodfillOnly || it.second->IsFloodfill ())) + (!caps || (it.second->GetCaps () & caps) == caps)) return it.second; } else diff --git a/NetDb.h b/NetDb.h index 4e1e1038..a369459b 100644 --- a/NetDb.h +++ b/NetDb.h @@ -74,7 +74,7 @@ namespace data void HandleDatabaseStoreMsg (uint8_t * buf, size_t len); void HandleDatabaseSearchReplyMsg (I2NPMessage * msg); - const RouterInfo * GetRandomRouter (const RouterInfo * compatibleWith = nullptr, bool floodfillOnly = false) const; + const RouterInfo * GetRandomRouter (const RouterInfo * compatibleWith = nullptr, uint8_t caps = 0) const; void PostI2NPMsg (I2NPMessage * msg); diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 56c05591..1fa1202c 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -200,8 +200,10 @@ namespace data case 'f': m_Caps |= Caps::eFloodfill; break; + case 'M': + case 'N': case 'O': - m_Caps |= Caps::eHighBanwidth; + m_Caps |= Caps::eHighBandwidth; break; case 'R': m_Caps |= Caps::eReachable; diff --git a/RouterInfo.h b/RouterInfo.h index afde30bc..19521a6d 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -28,7 +28,7 @@ namespace data enum Caps { eFloodfill = 0x01, - eHighBanwidth = 0x02, + eHighBandwidth = 0x02, eReachable = 0x04 }; @@ -84,7 +84,8 @@ namespace data bool IsSSU (bool v4only = true) const; bool IsCompatible (const RouterInfo& other) const { return m_SupportedTransports & other.m_SupportedTransports; }; bool UsesIntroducer () const; - + uint8_t GetCaps () const { return m_Caps; }; + void SetUnreachable (bool unreachable) { m_IsUnreachable = unreachable; }; bool IsUnreachable () const { return m_IsUnreachable; };