#pragma once #include #include #include namespace llarp { struct Router; /// The maximum number of peers we will flood a gossiped RC to when propagating an RC constexpr size_t MaxGossipPeers = 20; struct LinkManager; struct LocalRC; struct RCGossiper { using Time_t = Duration_t; RCGossiper(); ~RCGossiper() = default; bool GossipRC(const LocalRC& rc); void Decay(Time_t now); bool ShouldGossipOurRC(Time_t now) const; bool IsOurRC(const LocalRC& rc) const; void Init(LinkManager*, const RouterID&, Router*); void Forget(const RouterID& router); TimePoint_t NextGossipAt() const; std::optional LastGossipAt() const; private: RouterID rid; Time_t last_rc_gossip = 0s; LinkManager* link_manager = nullptr; util::DecayingHashSet filter; Router* router; }; } // namespace llarp