From 93deb37c94e43a4df0e32544550e9e1b348381b6 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Sat, 18 Jun 2016 11:10:58 -0400 Subject: [PATCH] add primordial goo tier "hidden mode" (aka toy feature needs more work doesn't do it correctly all the way) --- Config.cpp | 5 +++-- Daemon.cpp | 6 ++++++ NetDb.cpp | 13 +++++++++++-- NetDb.h | 6 ++++++ TunnelPool.cpp | 1 + 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Config.cpp b/Config.cpp index 474ee0e5..3fbbd210 100644 --- a/Config.cpp +++ b/Config.cpp @@ -211,8 +211,9 @@ namespace config { options_description trust("Trust options"); trust.add_options() ("trust.enabled", value()->default_value(false), "enable explicit trust options") - ("trust.family", value()->default_value(""), "Router Familiy to trust for first hops"); - + ("trust.family", value()->default_value(""), "Router Familiy to trust for first hops") + ("trust.hidden", value()->default_value(false), "should we hide our router from other routers?"); + m_OptionsDesc .add(general) .add(limits) diff --git a/Daemon.cpp b/Daemon.cpp index 96f9fe05..1df0482b 100644 --- a/Daemon.cpp +++ b/Daemon.cpp @@ -204,6 +204,12 @@ namespace i2p i2p::transport::transports.RestrictRoutes({fam}); } else LogPrint(eLogError, "Daemon: no family specified for restricted routes"); + } + bool hidden; i2p::config::GetOption("trust.hidden", hidden); + if (hidden) + { + LogPrint(eLogInfo, "Daemon: using hidden mode"); + i2p::data::netdb.SetHidden(true); } return true; } diff --git a/NetDb.cpp b/NetDb.cpp index 0ac2bb3a..ede0e0ac 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -24,7 +24,7 @@ namespace data { NetDb netdb; - NetDb::NetDb (): m_IsRunning (false), m_Thread (nullptr), m_Reseeder (nullptr), m_Storage("netDb", "r", "routerInfo-", "dat") + NetDb::NetDb (): m_IsRunning (false), m_Thread (nullptr), m_Reseeder (nullptr), m_Storage("netDb", "r", "routerInfo-", "dat"), m_HiddenMode(false) { } @@ -121,7 +121,11 @@ namespace data ManageLookupResponses (); } lastSave = ts; - } + } + + // if we're in hidden mode don't publish or explore + if (m_HiddenMode) continue; + if (ts - lastPublish >= 2400) // publish every 40 minutes { Publish (); @@ -161,6 +165,11 @@ namespace data return false; } + void NetDb::SetHidden(bool hide) { + // TODO: remove reachable addresses from router info + m_HiddenMode = hide; + } + bool NetDb::AddRouterInfo (const IdentHash& ident, const uint8_t * buf, int len) { bool updated = true; diff --git a/NetDb.h b/NetDb.h index 96308ee7..6456620e 100644 --- a/NetDb.h +++ b/NetDb.h @@ -67,6 +67,9 @@ namespace data void PostI2NPMsg (std::shared_ptr msg); + /** set hidden mode, aka don't publish our RI to netdb and don't explore */ + void SetHidden(bool hide); + void Reseed (); Families& GetFamilies () { return m_Families; }; @@ -112,6 +115,9 @@ namespace data NetDbRequests m_Requests; std::map, uint64_t> > m_LookupResponses; // ident->(closest FFs, timestamp) + + /** true if in hidden mode */ + bool m_HiddenMode; }; extern NetDb netdb; diff --git a/TunnelPool.cpp b/TunnelPool.cpp index bbcbfb82..eb72cda3 100644 --- a/TunnelPool.cpp +++ b/TunnelPool.cpp @@ -333,6 +333,7 @@ namespace tunnel int numHops = isInbound ? m_NumInboundHops : m_NumOutboundHops; if(i2p::transport::transports.RoutesRestricted()) { + /** if routes are restricted prepend trusted first hop */ auto hop = i2p::transport::transports.GetRestrictedPeer(); if(!hop) return false; peers.push_back(hop->GetRouterIdentity());