From b95caaf219be23335b3ece8e2db98f5eb749d0a3 Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 18 Jun 2014 10:41:59 -0400 Subject: [PATCH] exclude hidden routers from tunnels --- NetDb.cpp | 7 +++---- NetDb.h | 2 +- RouterInfo.cpp | 5 ++++- RouterInfo.h | 5 ++++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/NetDb.cpp b/NetDb.cpp index 0582bf08..efd12c7c 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -633,7 +633,7 @@ namespace data } } - const RouterInfo * NetDb::GetRandomRouter (const RouterInfo * compatibleWith, uint8_t caps) const + const RouterInfo * NetDb::GetRandomRouter (const RouterInfo * compatibleWith) const { CryptoPP::RandomNumberGenerator& rnd = i2p::context.GetRandomNumberGenerator (); uint32_t ind = rnd.GenerateWord32 (0, m_RouterInfos.size () - 1); @@ -644,9 +644,8 @@ namespace data { if (i >= ind) { - if (!it.second->IsUnreachable () && - (!compatibleWith || it.second->IsCompatible (*compatibleWith)) && - (!caps || (it.second->GetCaps () & caps) == caps)) + if (!it.second->IsUnreachable () && !it.second->IsHidden () && + (!compatibleWith || it.second->IsCompatible (*compatibleWith))) return it.second; } else diff --git a/NetDb.h b/NetDb.h index 165580bd..d9451f7c 100644 --- a/NetDb.h +++ b/NetDb.h @@ -76,7 +76,7 @@ namespace data void HandleDatabaseStoreMsg (uint8_t * buf, size_t len); void HandleDatabaseSearchReplyMsg (I2NPMessage * msg); - const RouterInfo * GetRandomRouter (const RouterInfo * compatibleWith = nullptr, uint8_t caps = 0) const; + const RouterInfo * GetRandomRouter (const RouterInfo * compatibleWith = nullptr) const; void PostI2NPMsg (I2NPMessage * msg); diff --git a/RouterInfo.cpp b/RouterInfo.cpp index da829c47..9ffe7edf 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -214,7 +214,10 @@ namespace data break; case 'C': m_Caps |= Caps::eSSUIntroducer; - break; + break; + case 'H': + m_Caps |= Caps::eHidden; + break; default: ; } cap++; diff --git a/RouterInfo.h b/RouterInfo.h index d730c5f8..9ce9b006 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -31,7 +31,8 @@ namespace data eHighBandwidth = 0x02, eReachable = 0x04, eSSUTesting = 0x08, - eSSUIntroducer = 0x10 + eSSUIntroducer = 0x10, + eHidden = 0x20 }; enum TransportStyle @@ -88,6 +89,8 @@ namespace data bool UsesIntroducer () const; bool IsIntroducer () const { return m_Caps & eSSUIntroducer; }; bool IsPeerTesting () const { return m_Caps & eSSUTesting; }; + bool IsHidden () const { return m_Caps & eHidden; }; + uint8_t GetCaps () const { return m_Caps; }; void SetUnreachable (bool unreachable) { m_IsUnreachable = unreachable; };