#pragma once #include #include #include #include #include namespace llarp { struct RouterContact; enum class RCRequestResult { Success, InvalidRouter, RouterNotFound, BadRC }; using RCRequestCallback = std::function; struct I_RCLookupHandler { virtual ~I_RCLookupHandler() = default; virtual void AddValidRouter(const RouterID& router) = 0; virtual void RemoveValidRouter(const RouterID& router) = 0; virtual void SetRouterWhitelist( const std::vector& whitelist, const std::vector& greylist, const std::vector& greenlist) = 0; virtual void GetRC(const RouterID& router, RCRequestCallback callback, bool forceLookup = false) = 0; virtual bool PathIsAllowed(const RouterID& remote) const = 0; virtual bool SessionIsAllowed(const RouterID& remote) const = 0; virtual bool IsGreylisted(const RouterID& remote) const = 0; virtual bool IsGreenlisted(const RouterID& remote) const = 0; virtual bool IsRegistered(const RouterID& remote) const = 0; virtual bool CheckRC(const RouterContact& rc) const = 0; virtual bool GetRandomWhitelistRouter(RouterID& router) const = 0; virtual bool CheckRenegotiateValid(RouterContact newrc, RouterContact oldrc) = 0; virtual void PeriodicUpdate(llarp_time_t now) = 0; virtual void ExploreNetwork() = 0; virtual size_t NumberOfStrictConnectRouters() const = 0; virtual bool HaveReceivedWhitelist() const = 0; }; } // namespace llarp