diff --git a/NetDb.cpp b/NetDb.cpp index 765ec76c..e5586a3a 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -259,6 +259,7 @@ namespace data m_Floodfills.clear (); // load routers now + uint64_t ts = i2p::util::GetMillisecondsSinceEpoch (); int numRouters = 0; boost::filesystem::directory_iterator end; for (boost::filesystem::directory_iterator it (p); it != end; ++it) @@ -273,7 +274,7 @@ namespace data const std::string& fullPath = it1->path(); #endif RouterInfo * r = new RouterInfo(fullPath); - if (!r->IsUnreachable ()) + if (!r->IsUnreachable () && (!r->UsesIntroducer () || ts < r->GetTimestamp () + 3600*1000LL)) // 1 hour { r->DeleteBuffer (); m_RouterInfos[r->GetIdentHash ()] = r; @@ -329,8 +330,10 @@ namespace data } else { + // RouterInfo expires after 1 hour if uses introducer + if ((it.second->UsesIntroducer () && ts > it.second->GetTimestamp () + 3600*1000LL) // 1 hour // RouterInfo expires in 72 hours if more than 300 - if (total > 300 && ts > it.second->GetTimestamp () + 3*24*3600*1000LL) // 3 days + || (total > 300 && ts > it.second->GetTimestamp () + 3*24*3600*1000LL)) // 3 days { total--; it.second->SetUnreachable (true); diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 3976e9b1..0f752063 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -257,6 +257,9 @@ namespace data case 'H': m_Caps |= Caps::eHidden; break; + case 'U': + m_Caps |= Caps::eUnreachable; + break; default: ; } cap++; @@ -465,7 +468,7 @@ namespace data bool RouterInfo::UsesIntroducer () const { - return !(m_Caps & Caps::eReachable); // non-reachable + return m_Caps & Caps::eUnreachable; // non-reachable } const RouterInfo::Address * RouterInfo::GetNTCPAddress (bool v4only) const diff --git a/RouterInfo.h b/RouterInfo.h index cc50b7c9..84e271c8 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -33,7 +33,8 @@ namespace data eReachable = 0x04, eSSUTesting = 0x08, eSSUIntroducer = 0x10, - eHidden = 0x20 + eHidden = 0x20, + eUnreachable = 0x40 }; enum TransportStyle