From ca6f656e1b3a0cf6f570d16690ca75adea465498 Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 22 Feb 2016 10:27:43 -0500 Subject: [PATCH] ignore non-reachable floodfills --- NetDb.cpp | 9 ++++++--- RouterInfo.cpp | 5 ----- RouterInfo.h | 3 ++- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/NetDb.cpp b/NetDb.cpp index 6401fcc8..137e7695 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -170,6 +170,7 @@ namespace data { r->Update (buf, len); LogPrint (eLogInfo, "NetDb: RouterInfo updated: ", ident.ToBase64()); + // TODO: check if floodfill has been changed } else { @@ -187,7 +188,7 @@ namespace data std::unique_lock l(m_RouterInfosMutex); m_RouterInfos[r->GetIdentHash ()] = r; } - if (r->IsFloodfill ()) + if (r->IsFloodfill () && r->IsReachable ()) // floodfill must be reachable { std::unique_lock l(m_FloodfillsMutex); m_Floodfills.push_back (r); @@ -298,9 +299,11 @@ namespace data r->DeleteBuffer (); r->ClearProperties (); // properties are not used for regular routers m_RouterInfos[r->GetIdentHash ()] = r; - if (r->IsFloodfill ()) + if (r->IsFloodfill () && r->IsReachable ()) // floodfill must be reachable m_Floodfills.push_back (r); - } else { + } + else + { LogPrint(eLogWarning, "NetDb: Can't load RI from ", path, ", delete"); i2p::fs::Remove(path); } diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 1bf05a99..84768201 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -629,11 +629,6 @@ namespace data m_Properties.erase (key); } - bool RouterInfo::IsFloodfill () const - { - return m_Caps & Caps::eFloodfill; - } - bool RouterInfo::IsNTCP (bool v4only) const { if (v4only) diff --git a/RouterInfo.h b/RouterInfo.h index 5b77e170..c0ef2131 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -128,7 +128,8 @@ namespace data void SetProperty (const std::string& key, const std::string& value); // called from RouterContext only void DeleteProperty (const std::string& key); // called from RouterContext only void ClearProperties () { m_Properties.clear (); }; - bool IsFloodfill () const; + bool IsFloodfill () const { return m_Caps & Caps::eFloodfill; }; + bool IsReachable () const { return m_Caps & Caps::eReachable; }; bool IsNTCP (bool v4only = true) const; bool IsSSU (bool v4only = true) const; bool IsV6 () const;