From c8f4ace5c4608965385716ef51c3129160c516a0 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 21 Sep 2018 10:13:18 -0400 Subject: [PATCH] update timestamp before publishing --- libi2pd/NetDb.cpp | 11 +++++------ libi2pd/RouterContext.cpp | 6 ++++++ libi2pd/RouterContext.h | 3 ++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/libi2pd/NetDb.cpp b/libi2pd/NetDb.cpp index 410b71e6..0add6f91 100644 --- a/libi2pd/NetDb.cpp +++ b/libi2pd/NetDb.cpp @@ -130,18 +130,17 @@ namespace data lastDestinationCleanup = ts; } - if (ts - lastPublish >= NETDB_PUBLISH_INTERVAL && !m_HiddenMode) // publish + if (ts - lastPublish >= NETDB_PUBLISH_INTERVAL) // update timestamp and publish { - Publish (); + i2p::context.UpdateTimestamp (ts); + if (!m_HiddenMode) Publish (); lastPublish = ts; } if (ts - lastExploratory >= 30) // exploratory every 30 seconds { auto numRouters = m_RouterInfos.size (); - if (numRouters == 0) - { - throw std::runtime_error("No known routers, reseed seems to be totally failed"); - } + if (!numRouters) + throw std::runtime_error("No known routers, reseed seems to be totally failed"); else // we have peers now m_FloodfillBootstrap = nullptr; if (numRouters < 2500 || ts - lastExploratory >= 90) diff --git a/libi2pd/RouterContext.cpp b/libi2pd/RouterContext.cpp index d255da17..0d3c707b 100644 --- a/libi2pd/RouterContext.cpp +++ b/libi2pd/RouterContext.cpp @@ -497,6 +497,12 @@ namespace i2p } } + void RouterContext::UpdateTimestamp (uint64_t ts) + { + if (ts > m_LastUpdateTime + ROUTER_INFO_UPDATE_INTERVAL) + UpdateRouterInfo (); + } + bool RouterContext::Load () { std::ifstream fk (i2p::fs::DataDirPath (ROUTER_KEYS), std::ifstream::in | std::ifstream::binary); diff --git a/libi2pd/RouterContext.h b/libi2pd/RouterContext.h index 0b88ea82..f65bc702 100644 --- a/libi2pd/RouterContext.h +++ b/libi2pd/RouterContext.h @@ -103,6 +103,7 @@ namespace i2p void UpdateNTCPV6Address (const boost::asio::ip::address& host); // called from NTCP session void UpdateNTCP2V6Address (const boost::asio::ip::address& host); // called from NTCP2 session void UpdateStats (); + void UpdateTimestamp (uint64_t ts); // in seconds, called from NetDb before publishing void CleanupDestination (); // garlic destination // implements LocalDestination @@ -134,7 +135,7 @@ namespace i2p i2p::data::RouterInfo m_RouterInfo; i2p::data::PrivateKeys m_Keys; std::shared_ptr m_Decryptor; - uint64_t m_LastUpdateTime; + uint64_t m_LastUpdateTime; // in seconds bool m_AcceptsTunnels, m_IsFloodfill; uint64_t m_StartupTime; // in seconds since epoch uint64_t m_BandwidthLimit; // allowed bandwidth