---
title: llarp::Router

---

# llarp::Router





Inherits from [llarp::AbstractRouter](Classes/structllarp_1_1AbstractRouter.md), std::enable_shared_from_this< AbstractRouter >

Inherited by [tooling::HiveRouter](Classes/structtooling_1_1HiveRouter.md)

## Public Types

|                | Name           |
| -------------- | -------------- |
| using std::chrono::steady_clock | **[Clock_t](Classes/structllarp_1_1Router.md#using-clock-t)**  |
| using Clock_t::time_point | **[TimePoint_t](Classes/structllarp_1_1Router.md#using-timepoint-t)**  |

## Public Functions

|                | Name           |
| -------------- | -------------- |
| virtual [path::BuildLimiter](Classes/classllarp_1_1path_1_1BuildLimiter.md) & | **[pathBuildLimiter](Classes/structllarp_1_1Router.md#function-pathbuildlimiter)**() override |
| virtual const [llarp::net::Platform](Classes/classllarp_1_1net_1_1Platform.md) & | **[Net](Classes/structllarp_1_1Router.md#function-net)**() const override |
| virtual const LMQ_ptr & | **[lmq](Classes/structllarp_1_1Router.md#function-lmq)**() const override |
| virtual const std::shared_ptr< [rpc::LokidRpcClient](Classes/structllarp_1_1rpc_1_1LokidRpcClient.md) > & | **[RpcClient](Classes/structllarp_1_1Router.md#function-rpcclient)**() const override |
| virtual [llarp_dht_context](Classes/structllarp__dht__context.md) * | **[dht](Classes/structllarp_1_1Router.md#function-dht)**() const override |
| virtual std::optional< std::variant< nuint32_t, nuint128_t > > | **[OurPublicIP](Classes/structllarp_1_1Router.md#function-ourpublicip)**() const override<br>get what our real public ip is if we can know it  |
| virtual util::StatusObject | **[ExtractStatus](Classes/structllarp_1_1Router.md#function-extractstatus)**() const override |
| virtual util::StatusObject | **[ExtractSummaryStatus](Classes/structllarp_1_1Router.md#function-extractsummarystatus)**() const override |
| virtual const std::shared_ptr< [NodeDB](Classes/classllarp_1_1NodeDB.md) > & | **[nodedb](Classes/structllarp_1_1Router.md#function-nodedb)**() const override |
| virtual const [path::PathContext](Classes/structllarp_1_1path_1_1PathContext.md) & | **[pathContext](Classes/structllarp_1_1Router.md#function-pathcontext)**() const override |
| virtual [path::PathContext](Classes/structllarp_1_1path_1_1PathContext.md) & | **[pathContext](Classes/structllarp_1_1Router.md#function-pathcontext)**() override |
| virtual const [RouterContact](Classes/structllarp_1_1RouterContact.md) & | **[rc](Classes/structllarp_1_1Router.md#function-rc)**() const override |
| virtual void | **[ModifyOurRC](Classes/structllarp_1_1Router.md#function-modifyourrc)**(std::function< std::optional< [RouterContact](Classes/structllarp_1_1RouterContact.md) >([RouterContact](Classes/structllarp_1_1RouterContact.md))> modify) override<br>modify our rc modify returns nullopt if unmodified otherwise it returns the new rc to be sigend and published out  |
| virtual void | **[SetRouterWhitelist](Classes/structllarp_1_1Router.md#function-setrouterwhitelist)**(const std::vector< [RouterID](Classes/structllarp_1_1RouterID.md) > & whitelist, const std::vector< [RouterID](Classes/structllarp_1_1RouterID.md) > & greylist) override<br>set router's service node whitelist  |
| virtual std::unordered_set< [RouterID](Classes/structllarp_1_1RouterID.md) > | **[GetRouterWhitelist](Classes/structllarp_1_1Router.md#function-getrouterwhitelist)**() const override |
| virtual [exit::Context](Classes/structllarp_1_1exit_1_1Context.md) & | **[exitContext](Classes/structllarp_1_1Router.md#function-exitcontext)**() override |
| virtual const std::shared_ptr< [KeyManager](Classes/structllarp_1_1KeyManager.md) > & | **[keyManager](Classes/structllarp_1_1Router.md#function-keymanager)**() const override |
| virtual const [SecretKey](Classes/structllarp_1_1SecretKey.md) & | **[identity](Classes/structllarp_1_1Router.md#function-identity)**() const override |
| virtual const [SecretKey](Classes/structllarp_1_1SecretKey.md) & | **[encryption](Classes/structllarp_1_1Router.md#function-encryption)**() const override |
| virtual [Profiling](Classes/structllarp_1_1Profiling.md) & | **[routerProfiling](Classes/structllarp_1_1Router.md#function-routerprofiling)**() override |
| virtual const EventLoop_ptr & | **[loop](Classes/structllarp_1_1Router.md#function-loop)**() const override |
| virtual [vpn::Platform](Classes/classllarp_1_1vpn_1_1Platform.md) * | **[GetVPNPlatform](Classes/structllarp_1_1Router.md#function-getvpnplatform)**() const override |
| virtual void | **[QueueWork](Classes/structllarp_1_1Router.md#function-queuework)**(std::function< void(void)> ) override<br>call function in crypto worker  |
| virtual void | **[QueueDiskIO](Classes/structllarp_1_1Router.md#function-queuediskio)**(std::function< void(void)> ) override<br>call function in disk io thread  |
| bool | **[LooksDecommissioned](Classes/structllarp_1_1Router.md#function-looksdecommissioned)**() const<br>return true if we look like we are a decommissioned service node  |
| bool | **[LooksDeregistered](Classes/structllarp_1_1Router.md#function-looksderegistered)**() const<br>return true if we look like we are a deregistered service node  |
| bool | **[ShouldTestOtherRouters](Classes/structllarp_1_1Router.md#function-shouldtestotherrouters)**() const<br>return true if we look like we are allowed and able to test other routers  |
| virtual llarp_time_t | **[Uptime](Classes/structllarp_1_1Router.md#function-uptime)**() const override<br>returns milliseconds since started  |
| virtual bool | **[Sign](Classes/structllarp_1_1Router.md#function-sign)**([Signature](Classes/structllarp_1_1Signature.md) & sig, const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & buf) const override |
| virtual [service::Context](Classes/structllarp_1_1service_1_1Context.md) & | **[hiddenServiceContext](Classes/structllarp_1_1Router.md#function-hiddenservicecontext)**() override |
| virtual const [service::Context](Classes/structllarp_1_1service_1_1Context.md) & | **[hiddenServiceContext](Classes/structllarp_1_1Router.md#function-hiddenservicecontext)**() const override |
| virtual void | **[SetDownHook](Classes/structllarp_1_1Router.md#function-setdownhook)**(std::function< void(void)> hook) override |
| virtual bool | **[LooksAlive](Classes/structllarp_1_1Router.md#function-looksalive)**() const override |
| virtual const std::shared_ptr< [RoutePoker](Classes/structllarp_1_1RoutePoker.md) > & | **[routePoker](Classes/structllarp_1_1Router.md#function-routepoker)**() const override |
| virtual void | **[TriggerPump](Classes/structllarp_1_1Router.md#function-triggerpump)**() override<br>Trigger a pump of low level links. Idempotent.  |
| void | **[PumpLL](Classes/structllarp_1_1Router.md#function-pumpll)**() |
| virtual [IOutboundMessageHandler](Classes/structllarp_1_1IOutboundMessageHandler.md) & | **[outboundMessageHandler](Classes/structllarp_1_1Router.md#function-outboundmessagehandler)**() override |
| virtual [IOutboundSessionMaker](Classes/structllarp_1_1IOutboundSessionMaker.md) & | **[outboundSessionMaker](Classes/structllarp_1_1Router.md#function-outboundsessionmaker)**() override |
| virtual [ILinkManager](Classes/structllarp_1_1ILinkManager.md) & | **[linkManager](Classes/structllarp_1_1Router.md#function-linkmanager)**() override |
| virtual [I_RCLookupHandler](Classes/structllarp_1_1I__RCLookupHandler.md) & | **[rcLookupHandler](Classes/structllarp_1_1Router.md#function-rclookuphandler)**() override |
| virtual std::shared_ptr< [PeerDb](Classes/structllarp_1_1PeerDb.md) > | **[peerDb](Classes/structllarp_1_1Router.md#function-peerdb)**() override |
| virtual int | **[OutboundUDPSocket](Classes/structllarp_1_1Router.md#function-outboundudpsocket)**() const override |
| virtual void | **[GossipRCIfNeeded](Classes/structllarp_1_1Router.md#function-gossiprcifneeded)**(const [RouterContact](Classes/structllarp_1_1RouterContact.md) rc) override<br>gossip an rc if required  |
| | **[Router](Classes/structllarp_1_1Router.md#function-router)**(EventLoop_ptr loop, std::shared_ptr< [vpn::Platform](Classes/classllarp_1_1vpn_1_1Platform.md) > vpnPlatform) |
| | **[~Router](Classes/structllarp_1_1Router.md#function-~router)**() override |
| virtual bool | **[HandleRecvLinkMessageBuffer](Classes/structllarp_1_1Router.md#function-handlerecvlinkmessagebuffer)**([ILinkSession](Classes/structllarp_1_1ILinkSession.md) * from, const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & msg) override |
| void | **[InitInboundLinks](Classes/structllarp_1_1Router.md#function-initinboundlinks)**() |
| void | **[InitOutboundLinks](Classes/structllarp_1_1Router.md#function-initoutboundlinks)**() |
| virtual bool | **[GetRandomGoodRouter](Classes/structllarp_1_1Router.md#function-getrandomgoodrouter)**([RouterID](Classes/structllarp_1_1RouterID.md) & r) override |
| bool | **[InitServiceNode](Classes/structllarp_1_1Router.md#function-initservicenode)**()<br>initialize us as a service node return true on success  |
| virtual bool | **[IsRunning](Classes/structllarp_1_1Router.md#function-isrunning)**() const override |
| virtual bool | **[IsServiceNode](Classes/structllarp_1_1Router.md#function-isservicenode)**() const override<br>return true if we are running in service node mode  |
| void | **[Close](Classes/structllarp_1_1Router.md#function-close)**() |
| virtual bool | **[Configure](Classes/structllarp_1_1Router.md#function-configure)**(std::shared_ptr< [Config](Classes/structllarp_1_1Config.md) > conf, bool isSNode, std::shared_ptr< [NodeDB](Classes/classllarp_1_1NodeDB.md) > nodedb) override |
| virtual bool | **[StartRpcServer](Classes/structllarp_1_1Router.md#function-startrpcserver)**() override |
| virtual void | **[Freeze](Classes/structllarp_1_1Router.md#function-freeze)**() override<br>indicate we are about to sleep for a while  |
| virtual void | **[Thaw](Classes/structllarp_1_1Router.md#function-thaw)**() override<br>thaw from long sleep or network changed event  |
| virtual bool | **[Run](Classes/structllarp_1_1Router.md#function-run)**() override |
| virtual void | **[Stop](Classes/structllarp_1_1Router.md#function-stop)**() override<br>stop running the router logic gracefully  |
| virtual void | **[Die](Classes/structllarp_1_1Router.md#function-die)**() override<br>non graceful stop router  |
| void | **[StopLinks](Classes/structllarp_1_1Router.md#function-stoplinks)**()<br>close all sessions and shutdown all links  |
| virtual void | **[PersistSessionUntil](Classes/structllarp_1_1Router.md#function-persistsessionuntil)**(const [RouterID](Classes/structllarp_1_1RouterID.md) & remote, llarp_time_t until) override |
| bool | **[EnsureIdentity](Classes/structllarp_1_1Router.md#function-ensureidentity)**() |
| bool | **[EnsureEncryptionKey](Classes/structllarp_1_1Router.md#function-ensureencryptionkey)**() |
| virtual bool | **[SessionToRouterAllowed](Classes/structllarp_1_1Router.md#function-sessiontorouterallowed)**(const [RouterID](Classes/structllarp_1_1RouterID.md) & router) const override |
| virtual bool | **[PathToRouterAllowed](Classes/structllarp_1_1Router.md#function-pathtorouterallowed)**(const [RouterID](Classes/structllarp_1_1RouterID.md) & router) const override |
| void | **[HandleSaveRC](Classes/structllarp_1_1Router.md#function-handlesaverc)**() const |
| bool | **[SaveRC](Classes/structllarp_1_1Router.md#function-saverc)**() |
| virtual bool | **[HasClientExit](Classes/structllarp_1_1Router.md#function-hasclientexit)**() const override<br>return true if we are a client with an exit configured  |
| virtual const byte_t * | **[pubkey](Classes/structllarp_1_1Router.md#function-pubkey)**() const override |
| void | **[try_connect](Classes/structllarp_1_1Router.md#function-try-connect)**(fs::path rcfile) |
| virtual bool | **[TryConnectAsync](Classes/structllarp_1_1Router.md#function-tryconnectasync)**([RouterContact](Classes/structllarp_1_1RouterContact.md) rc, uint16_t tries) override |
| virtual bool | **[SendToOrQueue](Classes/structllarp_1_1Router.md#function-sendtoorqueue)**(const [RouterID](Classes/structllarp_1_1RouterID.md) & remote, const [ILinkMessage](Classes/structllarp_1_1ILinkMessage.md) & msg, SendStatusHandler handler) override<br>send to remote router or queue for sending returns false on overflow returns true on successful queue NOT threadsafe MUST be called in the logic thread  |
| virtual void | **[ForEachPeer](Classes/structllarp_1_1Router.md#function-foreachpeer)**(std::function< void(const [ILinkSession](Classes/structllarp_1_1ILinkSession.md) *, bool)> visit, bool randomize =false) const override<br>visit each connected link session  |
| void | **[ForEachPeer](Classes/structllarp_1_1Router.md#function-foreachpeer)**(std::function< void([ILinkSession](Classes/structllarp_1_1ILinkSession.md) *)> visit) |
| virtual bool | **[IsBootstrapNode](Classes/structllarp_1_1Router.md#function-isbootstrapnode)**([RouterID](Classes/structllarp_1_1RouterID.md) ) const override |
| virtual bool | **[CheckRenegotiateValid](Classes/structllarp_1_1Router.md#function-checkrenegotiatevalid)**([RouterContact](Classes/structllarp_1_1RouterContact.md) newRc, [RouterContact](Classes/structllarp_1_1RouterContact.md) oldRC) override<br>check if newRc matches oldRC and update local rc for this remote contact if valid returns true on valid and updated returns false otherwise  |
| virtual void | **[SessionClosed](Classes/structllarp_1_1Router.md#function-sessionclosed)**([RouterID](Classes/structllarp_1_1RouterID.md) remote) override<br>called by link when a remote session has no more sessions open  |
| void | **[ConnectionTimedOut](Classes/structllarp_1_1Router.md#function-connectiontimedout)**([ILinkSession](Classes/structllarp_1_1ILinkSession.md) * session)<br>called by link when an unestablished connection times out  |
| bool | **[ConnectionEstablished](Classes/structllarp_1_1Router.md#function-connectionestablished)**([ILinkSession](Classes/structllarp_1_1ILinkSession.md) * session, bool inbound)<br>called by link when session is fully established  |
| void | **[Tick](Classes/structllarp_1_1Router.md#function-tick)**()<br>call internal router ticker  |
| virtual llarp_time_t | **[Now](Classes/structllarp_1_1Router.md#function-now)**() const override<br>returns system clock milliseconds since epoch  |
| virtual bool | **[ParseRoutingMessageBuffer](Classes/structllarp_1_1Router.md#function-parseroutingmessagebuffer)**(const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & buf, [routing::IMessageHandler](Classes/structllarp_1_1routing_1_1IMessageHandler.md) * h, const [PathID_t](Classes/structllarp_1_1PathID__t.md) & rxid) override<br>parse a routing message in a buffer and handle it with a handler if successful parsing return true on parse and handle success otherwise return false  |
| virtual void | **[ConnectToRandomRouters](Classes/structllarp_1_1Router.md#function-connecttorandomrouters)**(int N) override<br>connect to N random routers  |
| virtual size_t | **[NumberOfConnectedRouters](Classes/structllarp_1_1Router.md#function-numberofconnectedrouters)**() const override<br>count the number of unique service nodes connected via pubkey  |
| virtual size_t | **[NumberOfConnectedClients](Classes/structllarp_1_1Router.md#function-numberofconnectedclients)**() const override<br>count the number of unique clients connected by pubkey  |
| virtual bool | **[GetRandomConnectedRouter](Classes/structllarp_1_1Router.md#function-getrandomconnectedrouter)**([RouterContact](Classes/structllarp_1_1RouterContact.md) & result) const override |
| virtual void | **[HandleDHTLookupForExplore](Classes/structllarp_1_1Router.md#function-handledhtlookupforexplore)**([RouterID](Classes/structllarp_1_1RouterID.md) remote, const std::vector< [RouterContact](Classes/structllarp_1_1RouterContact.md) > & results) override |
| virtual void | **[LookupRouter](Classes/structllarp_1_1Router.md#function-lookuprouter)**([RouterID](Classes/structllarp_1_1RouterID.md) remote, RouterLookupHandler resultHandler) override<br>lookup router by pubkey if we are a service node this is done direct otherwise it's done via path  |
| virtual bool | **[HasSessionTo](Classes/structllarp_1_1Router.md#function-hassessionto)**(const [RouterID](Classes/structllarp_1_1RouterID.md) & router) const override<br>return true if we have at least 1 session to this router in either direction  |
| virtual std::string | **[ShortName](Classes/structllarp_1_1Router.md#function-shortname)**() const override |
| virtual uint32_t | **[NextPathBuildNumber](Classes/structllarp_1_1Router.md#function-nextpathbuildnumber)**() override |
| void | **[AfterStopLinks](Classes/structllarp_1_1Router.md#function-afterstoplinks)**() |
| void | **[AfterStopIssued](Classes/structllarp_1_1Router.md#function-afterstopissued)**() |
| virtual std::shared_ptr< [Config](Classes/structllarp_1_1Config.md) > | **[GetConfig](Classes/structllarp_1_1Router.md#function-getconfig)**() const override |

## Protected Functions

|                | Name           |
| -------------- | -------------- |
| virtual void | **[HandleRouterEvent](Classes/structllarp_1_1Router.md#function-handlerouterevent)**(tooling::RouterEventPtr event) const override<br>Virtual function to handle RouterEvent.  |
| virtual bool | **[disableGossipingRC_TestingOnly](Classes/structllarp_1_1Router.md#function-disablegossipingrc-testingonly)**() |

## Public Attributes

|                | Name           |
| -------------- | -------------- |
| llarp_time_t | **[_lastPump](Classes/structllarp_1_1Router.md#variable--lastpump)**  |
| bool | **[ready](Classes/structllarp_1_1Router.md#variable-ready)**  |
| fs::path | **[transport_keyfile](Classes/structllarp_1_1Router.md#variable-transport-keyfile)**  |
| fs::path | **[ident_keyfile](Classes/structllarp_1_1Router.md#variable-ident-keyfile)**  |
| fs::path | **[encryption_keyfile](Classes/structllarp_1_1Router.md#variable-encryption-keyfile)**  |
| fs::path | **[our_rc_file](Classes/structllarp_1_1Router.md#variable-our-rc-file)**  |
| bool | **[m_UseFileLogging](Classes/structllarp_1_1Router.md#variable-m-usefilelogging)**  |
| [RouterContact](Classes/structllarp_1_1RouterContact.md) | **[_rc](Classes/structllarp_1_1Router.md#variable--rc)**  |
| bool | **[whitelistRouters](Classes/structllarp_1_1Router.md#variable-whitelistrouters)** <br>should we obey the service node whitelist?  |
| LMQ_ptr | **[m_lmq](Classes/structllarp_1_1Router.md#variable-m-lmq)**  |
| [path::BuildLimiter](Classes/classllarp_1_1path_1_1BuildLimiter.md) | **[m_PathBuildLimiter](Classes/structllarp_1_1Router.md#variable-m-pathbuildlimiter)**  |
| std::shared_ptr< [EventLoopWakeup](Classes/classllarp_1_1EventLoopWakeup.md) > | **[m_Pump](Classes/structllarp_1_1Router.md#variable-m-pump)**  |
| std::optional< [SockAddr](Classes/structllarp_1_1SockAddr.md) > | **[_ourAddress](Classes/structllarp_1_1Router.md#variable--ouraddress)**  |
| EventLoop_ptr | **[_loop](Classes/structllarp_1_1Router.md#variable--loop)**  |
| std::shared_ptr< [vpn::Platform](Classes/classllarp_1_1vpn_1_1Platform.md) > | **[_vpnPlatform](Classes/structllarp_1_1Router.md#variable--vpnplatform)**  |
| [path::PathContext](Classes/structllarp_1_1path_1_1PathContext.md) | **[paths](Classes/structllarp_1_1Router.md#variable-paths)**  |
| [exit::Context](Classes/structllarp_1_1exit_1_1Context.md) | **[_exitContext](Classes/structllarp_1_1Router.md#variable--exitcontext)**  |
| [SecretKey](Classes/structllarp_1_1SecretKey.md) | **[_identity](Classes/structllarp_1_1Router.md#variable--identity)**  |
| [SecretKey](Classes/structllarp_1_1SecretKey.md) | **[_encryption](Classes/structllarp_1_1Router.md#variable--encryption)**  |
| [llarp_dht_context](Classes/structllarp__dht__context.md) * | **[_dht](Classes/structllarp_1_1Router.md#variable--dht)**  |
| std::shared_ptr< [NodeDB](Classes/classllarp_1_1NodeDB.md) > | **[_nodedb](Classes/structllarp_1_1Router.md#variable--nodedb)**  |
| llarp_time_t | **[_startedAt](Classes/structllarp_1_1Router.md#variable--startedat)**  |
| const oxenmq::TaggedThreadID | **[m_DiskThread](Classes/structllarp_1_1Router.md#variable-m-diskthread)**  |
| llarp_time_t | **[rcRegenInterval](Classes/structllarp_1_1Router.md#variable-rcregeninterval)** <br>how often do we resign our RC? milliseconds.  |
| bool | **[sendPadding](Classes/structllarp_1_1Router.md#variable-sendpadding)**  |
| [LinkMessageParser](Classes/structllarp_1_1LinkMessageParser.md) | **[inbound_link_msg_parser](Classes/structllarp_1_1Router.md#variable-inbound-link-msg-parser)**  |
| [routing::InboundMessageParser](Classes/structllarp_1_1routing_1_1InboundMessageParser.md) | **[inbound_routing_msg_parser](Classes/structllarp_1_1Router.md#variable-inbound-routing-msg-parser)**  |
| [service::Context](Classes/structllarp_1_1service_1_1Context.md) | **[_hiddenServiceContext](Classes/structllarp_1_1Router.md#variable--hiddenservicecontext)**  |
| llarp_time_t | **[_lastTick](Classes/structllarp_1_1Router.md#variable--lasttick)**  |
| std::function< void(void)> | **[_onDown](Classes/structllarp_1_1Router.md#variable--ondown)**  |
| [BootstrapList](Classes/structllarp_1_1BootstrapList.md) | **[bootstrapRCList](Classes/structllarp_1_1Router.md#variable-bootstraprclist)** <br>bootstrap RCs  |
| std::shared_ptr< [RoutePoker](Classes/structllarp_1_1RoutePoker.md) > | **[m_RoutePoker](Classes/structllarp_1_1Router.md#variable-m-routepoker)**  |
| const oxenmq::address | **[DefaultRPCBindAddr](Classes/structllarp_1_1Router.md#variable-defaultrpcbindaddr)**  |
| bool | **[enableRPCServer](Classes/structllarp_1_1Router.md#variable-enablerpcserver)**  |
| oxenmq::address | **[rpcBindAddr](Classes/structllarp_1_1Router.md#variable-rpcbindaddr)**  |
| std::unique_ptr< [rpc::RpcServer](Classes/structllarp_1_1rpc_1_1RpcServer.md) > | **[m_RPCServer](Classes/structllarp_1_1Router.md#variable-m-rpcserver)**  |
| const llarp_time_t | **[_randomStartDelay](Classes/structllarp_1_1Router.md#variable--randomstartdelay)**  |
| std::shared_ptr< [rpc::LokidRpcClient](Classes/structllarp_1_1rpc_1_1LokidRpcClient.md) > | **[m_lokidRpcClient](Classes/structllarp_1_1Router.md#variable-m-lokidrpcclient)**  |
| oxenmq::address | **[lokidRPCAddr](Classes/structllarp_1_1Router.md#variable-lokidrpcaddr)**  |
| [Profiling](Classes/structllarp_1_1Profiling.md) | **[_routerProfiling](Classes/structllarp_1_1Router.md#variable--routerprofiling)**  |
| fs::path | **[_profilesFile](Classes/structllarp_1_1Router.md#variable--profilesfile)**  |
| [OutboundMessageHandler](Classes/structllarp_1_1OutboundMessageHandler.md) | **[_outboundMessageHandler](Classes/structllarp_1_1Router.md#variable--outboundmessagehandler)**  |
| [OutboundSessionMaker](Classes/structllarp_1_1OutboundSessionMaker.md) | **[_outboundSessionMaker](Classes/structllarp_1_1Router.md#variable--outboundsessionmaker)**  |
| [LinkManager](Classes/structllarp_1_1LinkManager.md) | **[_linkManager](Classes/structllarp_1_1Router.md#variable--linkmanager)**  |
| [RCLookupHandler](Classes/structllarp_1_1RCLookupHandler.md) | **[_rcLookupHandler](Classes/structllarp_1_1Router.md#variable--rclookuphandler)**  |
| [RCGossiper](Classes/structllarp_1_1RCGossiper.md) | **[_rcGossiper](Classes/structllarp_1_1Router.md#variable--rcgossiper)**  |
| TimePoint_t | **[m_NextExploreAt](Classes/structllarp_1_1Router.md#variable-m-nextexploreat)**  |
| std::shared_ptr< [Config](Classes/structllarp_1_1Config.md) > | **[m_Config](Classes/structllarp_1_1Router.md#variable-m-config)**  |
| int | **[m_OutboundUDPSocket](Classes/structllarp_1_1Router.md#variable-m-outboundudpsocket)**  |

## Additional inherited members

**Public Functions inherited from [llarp::AbstractRouter](Classes/structllarp_1_1AbstractRouter.md)**

|                | Name           |
| -------------- | -------------- |
| virtual | **[~AbstractRouter](Classes/structllarp_1_1AbstractRouter.md#function-~abstractrouter)**() =default |
| template <class EventType ,class... Params\> <br>void | **[NotifyRouterEvent](Classes/structllarp_1_1AbstractRouter.md#function-notifyrouterevent)**(] Params &&... args) const<br>Templated convenience function to generate a RouterHive event and delegate to non-templated (and overridable) function for handling.  |


## Public Types Documentation

### using Clock_t

```cpp
using llarp::Router::Clock_t =  std::chrono::steady_clock;
```


### using TimePoint_t

```cpp
using llarp::Router::TimePoint_t =  Clock_t::time_point;
```


## Public Functions Documentation

### function pathBuildLimiter

```cpp
inline virtual path::BuildLimiter & pathBuildLimiter() override
```


**Reimplements**: [llarp::AbstractRouter::pathBuildLimiter](Classes/structllarp_1_1AbstractRouter.md#function-pathbuildlimiter)


### function Net

```cpp
virtual const llarp::net::Platform & Net() const override
```


**Reimplements**: [llarp::AbstractRouter::Net](Classes/structllarp_1_1AbstractRouter.md#function-net)


### function lmq

```cpp
inline virtual const LMQ_ptr & lmq() const override
```


**Reimplements**: [llarp::AbstractRouter::lmq](Classes/structllarp_1_1AbstractRouter.md#function-lmq)


### function RpcClient

```cpp
inline virtual const std::shared_ptr< rpc::LokidRpcClient > & RpcClient() const override
```


**Reimplements**: [llarp::AbstractRouter::RpcClient](Classes/structllarp_1_1AbstractRouter.md#function-rpcclient)


### function dht

```cpp
inline virtual llarp_dht_context * dht() const override
```


**Reimplements**: [llarp::AbstractRouter::dht](Classes/structllarp_1_1AbstractRouter.md#function-dht)


### function OurPublicIP

```cpp
virtual std::optional< std::variant< nuint32_t, nuint128_t > > OurPublicIP() const override
```

get what our real public ip is if we can know it 

**Reimplements**: [llarp::AbstractRouter::OurPublicIP](Classes/structllarp_1_1AbstractRouter.md#function-ourpublicip)


### function ExtractStatus

```cpp
virtual util::StatusObject ExtractStatus() const override
```


**Reimplements**: [llarp::AbstractRouter::ExtractStatus](Classes/structllarp_1_1AbstractRouter.md#function-extractstatus)


### function ExtractSummaryStatus

```cpp
virtual util::StatusObject ExtractSummaryStatus() const override
```


**Reimplements**: [llarp::AbstractRouter::ExtractSummaryStatus](Classes/structllarp_1_1AbstractRouter.md#function-extractsummarystatus)


### function nodedb

```cpp
inline virtual const std::shared_ptr< NodeDB > & nodedb() const override
```


**Reimplements**: [llarp::AbstractRouter::nodedb](Classes/structllarp_1_1AbstractRouter.md#function-nodedb)


### function pathContext

```cpp
inline virtual const path::PathContext & pathContext() const override
```


**Reimplements**: [llarp::AbstractRouter::pathContext](Classes/structllarp_1_1AbstractRouter.md#function-pathcontext)


### function pathContext

```cpp
inline virtual path::PathContext & pathContext() override
```


**Reimplements**: [llarp::AbstractRouter::pathContext](Classes/structllarp_1_1AbstractRouter.md#function-pathcontext)


### function rc

```cpp
inline virtual const RouterContact & rc() const override
```


**Reimplements**: [llarp::AbstractRouter::rc](Classes/structllarp_1_1AbstractRouter.md#function-rc)


### function ModifyOurRC

```cpp
virtual void ModifyOurRC(
    std::function< std::optional< RouterContact >(RouterContact)> modify
) override
```

modify our rc modify returns nullopt if unmodified otherwise it returns the new rc to be sigend and published out 

**Reimplements**: [llarp::AbstractRouter::ModifyOurRC](Classes/structllarp_1_1AbstractRouter.md#function-modifyourrc)


### function SetRouterWhitelist

```cpp
virtual void SetRouterWhitelist(
    const std::vector< RouterID > & whitelist,
    const std::vector< RouterID > & greylist
) override
```

set router's service node whitelist 

**Reimplements**: [llarp::AbstractRouter::SetRouterWhitelist](Classes/structllarp_1_1AbstractRouter.md#function-setrouterwhitelist)


### function GetRouterWhitelist

```cpp
inline virtual std::unordered_set< RouterID > GetRouterWhitelist() const override
```


**Reimplements**: [llarp::AbstractRouter::GetRouterWhitelist](Classes/structllarp_1_1AbstractRouter.md#function-getrouterwhitelist)


### function exitContext

```cpp
inline virtual exit::Context & exitContext() override
```


**Reimplements**: [llarp::AbstractRouter::exitContext](Classes/structllarp_1_1AbstractRouter.md#function-exitcontext)


### function keyManager

```cpp
inline virtual const std::shared_ptr< KeyManager > & keyManager() const override
```


**Reimplements**: [llarp::AbstractRouter::keyManager](Classes/structllarp_1_1AbstractRouter.md#function-keymanager)


### function identity

```cpp
inline virtual const SecretKey & identity() const override
```


**Reimplements**: [llarp::AbstractRouter::identity](Classes/structllarp_1_1AbstractRouter.md#function-identity)


### function encryption

```cpp
inline virtual const SecretKey & encryption() const override
```


**Reimplements**: [llarp::AbstractRouter::encryption](Classes/structllarp_1_1AbstractRouter.md#function-encryption)


### function routerProfiling

```cpp
inline virtual Profiling & routerProfiling() override
```


**Reimplements**: [llarp::AbstractRouter::routerProfiling](Classes/structllarp_1_1AbstractRouter.md#function-routerprofiling)


### function loop

```cpp
inline virtual const EventLoop_ptr & loop() const override
```


**Reimplements**: [llarp::AbstractRouter::loop](Classes/structllarp_1_1AbstractRouter.md#function-loop)


### function GetVPNPlatform

```cpp
inline virtual vpn::Platform * GetVPNPlatform() const override
```


**Reimplements**: [llarp::AbstractRouter::GetVPNPlatform](Classes/structllarp_1_1AbstractRouter.md#function-getvpnplatform)


### function QueueWork

```cpp
virtual void QueueWork(
    std::function< void(void)> 
) override
```

call function in crypto worker 

**Reimplements**: [llarp::AbstractRouter::QueueWork](Classes/structllarp_1_1AbstractRouter.md#function-queuework)


### function QueueDiskIO

```cpp
virtual void QueueDiskIO(
    std::function< void(void)> 
) override
```

call function in disk io thread 

**Reimplements**: [llarp::AbstractRouter::QueueDiskIO](Classes/structllarp_1_1AbstractRouter.md#function-queuediskio)


### function LooksDecommissioned

```cpp
bool LooksDecommissioned() const
```

return true if we look like we are a decommissioned service node 

### function LooksDeregistered

```cpp
bool LooksDeregistered() const
```

return true if we look like we are a deregistered service node 

### function ShouldTestOtherRouters

```cpp
bool ShouldTestOtherRouters() const
```

return true if we look like we are allowed and able to test other routers 

### function Uptime

```cpp
virtual llarp_time_t Uptime() const override
```

returns milliseconds since started 

**Reimplements**: [llarp::AbstractRouter::Uptime](Classes/structllarp_1_1AbstractRouter.md#function-uptime)


### function Sign

```cpp
virtual bool Sign(
    Signature & sig,
    const llarp_buffer_t & buf
) const override
```


**Reimplements**: [llarp::AbstractRouter::Sign](Classes/structllarp_1_1AbstractRouter.md#function-sign)


### function hiddenServiceContext

```cpp
inline virtual service::Context & hiddenServiceContext() override
```


**Reimplements**: [llarp::AbstractRouter::hiddenServiceContext](Classes/structllarp_1_1AbstractRouter.md#function-hiddenservicecontext)


### function hiddenServiceContext

```cpp
inline virtual const service::Context & hiddenServiceContext() const override
```


**Reimplements**: [llarp::AbstractRouter::hiddenServiceContext](Classes/structllarp_1_1AbstractRouter.md#function-hiddenservicecontext)


### function SetDownHook

```cpp
inline virtual void SetDownHook(
    std::function< void(void)> hook
) override
```


**Reimplements**: [llarp::AbstractRouter::SetDownHook](Classes/structllarp_1_1AbstractRouter.md#function-setdownhook)


### function LooksAlive

```cpp
inline virtual bool LooksAlive() const override
```


**Reimplements**: [llarp::AbstractRouter::LooksAlive](Classes/structllarp_1_1AbstractRouter.md#function-looksalive)


### function routePoker

```cpp
inline virtual const std::shared_ptr< RoutePoker > & routePoker() const override
```


**Reimplements**: [llarp::AbstractRouter::routePoker](Classes/structllarp_1_1AbstractRouter.md#function-routepoker)


### function TriggerPump

```cpp
virtual void TriggerPump() override
```

Trigger a pump of low level links. Idempotent. 

**Reimplements**: [llarp::AbstractRouter::TriggerPump](Classes/structllarp_1_1AbstractRouter.md#function-triggerpump)


### function PumpLL

```cpp
void PumpLL()
```


### function outboundMessageHandler

```cpp
inline virtual IOutboundMessageHandler & outboundMessageHandler() override
```


**Reimplements**: [llarp::AbstractRouter::outboundMessageHandler](Classes/structllarp_1_1AbstractRouter.md#function-outboundmessagehandler)


### function outboundSessionMaker

```cpp
inline virtual IOutboundSessionMaker & outboundSessionMaker() override
```


**Reimplements**: [llarp::AbstractRouter::outboundSessionMaker](Classes/structllarp_1_1AbstractRouter.md#function-outboundsessionmaker)


### function linkManager

```cpp
inline virtual ILinkManager & linkManager() override
```


**Reimplements**: [llarp::AbstractRouter::linkManager](Classes/structllarp_1_1AbstractRouter.md#function-linkmanager)


### function rcLookupHandler

```cpp
inline virtual I_RCLookupHandler & rcLookupHandler() override
```


**Reimplements**: [llarp::AbstractRouter::rcLookupHandler](Classes/structllarp_1_1AbstractRouter.md#function-rclookuphandler)


### function peerDb

```cpp
inline virtual std::shared_ptr< PeerDb > peerDb() override
```


**Reimplements**: [llarp::AbstractRouter::peerDb](Classes/structllarp_1_1AbstractRouter.md#function-peerdb)


### function OutboundUDPSocket

```cpp
inline virtual int OutboundUDPSocket() const override
```


**Reimplements**: [llarp::AbstractRouter::OutboundUDPSocket](Classes/structllarp_1_1AbstractRouter.md#function-outboundudpsocket)


### function GossipRCIfNeeded

```cpp
virtual void GossipRCIfNeeded(
    const RouterContact rc
) override
```

gossip an rc if required 

**Reimplements**: [llarp::AbstractRouter::GossipRCIfNeeded](Classes/structllarp_1_1AbstractRouter.md#function-gossiprcifneeded)


### function Router

```cpp
explicit Router(
    EventLoop_ptr loop,
    std::shared_ptr< vpn::Platform > vpnPlatform
)
```


### function ~Router

```cpp
~Router() override
```


### function HandleRecvLinkMessageBuffer

```cpp
virtual bool HandleRecvLinkMessageBuffer(
    ILinkSession * from,
    const llarp_buffer_t & msg
) override
```


**Reimplements**: [llarp::AbstractRouter::HandleRecvLinkMessageBuffer](Classes/structllarp_1_1AbstractRouter.md#function-handlerecvlinkmessagebuffer)


### function InitInboundLinks

```cpp
void InitInboundLinks()
```


### function InitOutboundLinks

```cpp
void InitOutboundLinks()
```


### function GetRandomGoodRouter

```cpp
virtual bool GetRandomGoodRouter(
    RouterID & r
) override
```


**Reimplements**: [llarp::AbstractRouter::GetRandomGoodRouter](Classes/structllarp_1_1AbstractRouter.md#function-getrandomgoodrouter)


### function InitServiceNode

```cpp
bool InitServiceNode()
```

initialize us as a service node return true on success 

### function IsRunning

```cpp
virtual bool IsRunning() const override
```


**Reimplements**: [llarp::AbstractRouter::IsRunning](Classes/structllarp_1_1AbstractRouter.md#function-isrunning)


### function IsServiceNode

```cpp
virtual bool IsServiceNode() const override
```

return true if we are running in service node mode 

**Reimplements**: [llarp::AbstractRouter::IsServiceNode](Classes/structllarp_1_1AbstractRouter.md#function-isservicenode)


### function Close

```cpp
void Close()
```


### function Configure

```cpp
virtual bool Configure(
    std::shared_ptr< Config > conf,
    bool isSNode,
    std::shared_ptr< NodeDB > nodedb
) override
```


**Reimplements**: [llarp::AbstractRouter::Configure](Classes/structllarp_1_1AbstractRouter.md#function-configure)


### function StartRpcServer

```cpp
virtual bool StartRpcServer() override
```


**Reimplements**: [llarp::AbstractRouter::StartRpcServer](Classes/structllarp_1_1AbstractRouter.md#function-startrpcserver)


### function Freeze

```cpp
virtual void Freeze() override
```

indicate we are about to sleep for a while 

**Reimplements**: [llarp::AbstractRouter::Freeze](Classes/structllarp_1_1AbstractRouter.md#function-freeze)


### function Thaw

```cpp
virtual void Thaw() override
```

thaw from long sleep or network changed event 

**Reimplements**: [llarp::AbstractRouter::Thaw](Classes/structllarp_1_1AbstractRouter.md#function-thaw)


### function Run

```cpp
virtual bool Run() override
```


**Reimplements**: [llarp::AbstractRouter::Run](Classes/structllarp_1_1AbstractRouter.md#function-run)


### function Stop

```cpp
virtual void Stop() override
```

stop running the router logic gracefully 

**Reimplements**: [llarp::AbstractRouter::Stop](Classes/structllarp_1_1AbstractRouter.md#function-stop)


### function Die

```cpp
virtual void Die() override
```

non graceful stop router 

**Reimplements**: [llarp::AbstractRouter::Die](Classes/structllarp_1_1AbstractRouter.md#function-die)


### function StopLinks

```cpp
void StopLinks()
```

close all sessions and shutdown all links 

### function PersistSessionUntil

```cpp
virtual void PersistSessionUntil(
    const RouterID & remote,
    llarp_time_t until
) override
```


**Reimplements**: [llarp::AbstractRouter::PersistSessionUntil](Classes/structllarp_1_1AbstractRouter.md#function-persistsessionuntil)


### function EnsureIdentity

```cpp
bool EnsureIdentity()
```


### function EnsureEncryptionKey

```cpp
bool EnsureEncryptionKey()
```


### function SessionToRouterAllowed

```cpp
virtual bool SessionToRouterAllowed(
    const RouterID & router
) const override
```


**Reimplements**: [llarp::AbstractRouter::SessionToRouterAllowed](Classes/structllarp_1_1AbstractRouter.md#function-sessiontorouterallowed)


### function PathToRouterAllowed

```cpp
virtual bool PathToRouterAllowed(
    const RouterID & router
) const override
```


**Reimplements**: [llarp::AbstractRouter::PathToRouterAllowed](Classes/structllarp_1_1AbstractRouter.md#function-pathtorouterallowed)


### function HandleSaveRC

```cpp
void HandleSaveRC() const
```


### function SaveRC

```cpp
bool SaveRC()
```


### function HasClientExit

```cpp
virtual bool HasClientExit() const override
```

return true if we are a client with an exit configured 

**Reimplements**: [llarp::AbstractRouter::HasClientExit](Classes/structllarp_1_1AbstractRouter.md#function-hasclientexit)


### function pubkey

```cpp
inline virtual const byte_t * pubkey() const override
```


**Reimplements**: [llarp::AbstractRouter::pubkey](Classes/structllarp_1_1AbstractRouter.md#function-pubkey)


### function try_connect

```cpp
void try_connect(
    fs::path rcfile
)
```


### function TryConnectAsync

```cpp
virtual bool TryConnectAsync(
    RouterContact rc,
    uint16_t tries
) override
```


**Reimplements**: [llarp::AbstractRouter::TryConnectAsync](Classes/structllarp_1_1AbstractRouter.md#function-tryconnectasync)


### function SendToOrQueue

```cpp
virtual bool SendToOrQueue(
    const RouterID & remote,
    const ILinkMessage & msg,
    SendStatusHandler handler
) override
```

send to remote router or queue for sending returns false on overflow returns true on successful queue NOT threadsafe MUST be called in the logic thread 

**Reimplements**: [llarp::AbstractRouter::SendToOrQueue](Classes/structllarp_1_1AbstractRouter.md#function-sendtoorqueue)


### function ForEachPeer

```cpp
virtual void ForEachPeer(
    std::function< void(const ILinkSession *, bool)> visit,
    bool randomize =false
) const override
```

visit each connected link session 

**Reimplements**: [llarp::AbstractRouter::ForEachPeer](Classes/structllarp_1_1AbstractRouter.md#function-foreachpeer)


### function ForEachPeer

```cpp
void ForEachPeer(
    std::function< void(ILinkSession *)> visit
)
```


### function IsBootstrapNode

```cpp
virtual bool IsBootstrapNode(
    RouterID 
) const override
```


**Reimplements**: [llarp::AbstractRouter::IsBootstrapNode](Classes/structllarp_1_1AbstractRouter.md#function-isbootstrapnode)


### function CheckRenegotiateValid

```cpp
virtual bool CheckRenegotiateValid(
    RouterContact newRc,
    RouterContact oldRC
) override
```

check if newRc matches oldRC and update local rc for this remote contact if valid returns true on valid and updated returns false otherwise 

**Reimplements**: [llarp::AbstractRouter::CheckRenegotiateValid](Classes/structllarp_1_1AbstractRouter.md#function-checkrenegotiatevalid)


### function SessionClosed

```cpp
virtual void SessionClosed(
    RouterID remote
) override
```

called by link when a remote session has no more sessions open 

**Reimplements**: [llarp::AbstractRouter::SessionClosed](Classes/structllarp_1_1AbstractRouter.md#function-sessionclosed)


### function ConnectionTimedOut

```cpp
void ConnectionTimedOut(
    ILinkSession * session
)
```

called by link when an unestablished connection times out 

### function ConnectionEstablished

```cpp
bool ConnectionEstablished(
    ILinkSession * session,
    bool inbound
)
```

called by link when session is fully established 

### function Tick

```cpp
void Tick()
```

call internal router ticker 

### function Now

```cpp
inline virtual llarp_time_t Now() const override
```

returns system clock milliseconds since epoch 

**Reimplements**: [llarp::AbstractRouter::Now](Classes/structllarp_1_1AbstractRouter.md#function-now)


### function ParseRoutingMessageBuffer

```cpp
virtual bool ParseRoutingMessageBuffer(
    const llarp_buffer_t & buf,
    routing::IMessageHandler * h,
    const PathID_t & rxid
) override
```

parse a routing message in a buffer and handle it with a handler if successful parsing return true on parse and handle success otherwise return false 

**Reimplements**: [llarp::AbstractRouter::ParseRoutingMessageBuffer](Classes/structllarp_1_1AbstractRouter.md#function-parseroutingmessagebuffer)


### function ConnectToRandomRouters

```cpp
virtual void ConnectToRandomRouters(
    int N
) override
```

connect to N random routers 

**Reimplements**: [llarp::AbstractRouter::ConnectToRandomRouters](Classes/structllarp_1_1AbstractRouter.md#function-connecttorandomrouters)


### function NumberOfConnectedRouters

```cpp
virtual size_t NumberOfConnectedRouters() const override
```

count the number of unique service nodes connected via pubkey 

**Reimplements**: [llarp::AbstractRouter::NumberOfConnectedRouters](Classes/structllarp_1_1AbstractRouter.md#function-numberofconnectedrouters)


### function NumberOfConnectedClients

```cpp
virtual size_t NumberOfConnectedClients() const override
```

count the number of unique clients connected by pubkey 

**Reimplements**: [llarp::AbstractRouter::NumberOfConnectedClients](Classes/structllarp_1_1AbstractRouter.md#function-numberofconnectedclients)


### function GetRandomConnectedRouter

```cpp
virtual bool GetRandomConnectedRouter(
    RouterContact & result
) const override
```


**Reimplements**: [llarp::AbstractRouter::GetRandomConnectedRouter](Classes/structllarp_1_1AbstractRouter.md#function-getrandomconnectedrouter)


### function HandleDHTLookupForExplore

```cpp
virtual void HandleDHTLookupForExplore(
    RouterID remote,
    const std::vector< RouterContact > & results
) override
```


**Reimplements**: [llarp::AbstractRouter::HandleDHTLookupForExplore](Classes/structllarp_1_1AbstractRouter.md#function-handledhtlookupforexplore)


### function LookupRouter

```cpp
virtual void LookupRouter(
    RouterID remote,
    RouterLookupHandler resultHandler
) override
```

lookup router by pubkey if we are a service node this is done direct otherwise it's done via path 

**Reimplements**: [llarp::AbstractRouter::LookupRouter](Classes/structllarp_1_1AbstractRouter.md#function-lookuprouter)


### function HasSessionTo

```cpp
virtual bool HasSessionTo(
    const RouterID & router
) const override
```

return true if we have at least 1 session to this router in either direction 

**Reimplements**: [llarp::AbstractRouter::HasSessionTo](Classes/structllarp_1_1AbstractRouter.md#function-hassessionto)


### function ShortName

```cpp
virtual std::string ShortName() const override
```


**Reimplements**: [llarp::AbstractRouter::ShortName](Classes/structllarp_1_1AbstractRouter.md#function-shortname)


### function NextPathBuildNumber

```cpp
virtual uint32_t NextPathBuildNumber() override
```


**Reimplements**: [llarp::AbstractRouter::NextPathBuildNumber](Classes/structllarp_1_1AbstractRouter.md#function-nextpathbuildnumber)


### function AfterStopLinks

```cpp
void AfterStopLinks()
```


### function AfterStopIssued

```cpp
void AfterStopIssued()
```


### function GetConfig

```cpp
inline virtual std::shared_ptr< Config > GetConfig() const override
```


**Reimplements**: [llarp::AbstractRouter::GetConfig](Classes/structllarp_1_1AbstractRouter.md#function-getconfig)


## Protected Functions Documentation

### function HandleRouterEvent

```cpp
virtual void HandleRouterEvent(
    tooling::RouterEventPtr event
) const override
```

Virtual function to handle RouterEvent. 

**Reimplements**: [llarp::AbstractRouter::HandleRouterEvent](Classes/structllarp_1_1AbstractRouter.md#function-handlerouterevent)


**Reimplemented by**: [tooling::HiveRouter::HandleRouterEvent](Classes/structtooling_1_1HiveRouter.md#function-handlerouterevent)


HiveRouter overrides this in order to inject the event. The default implementation in [Router](Classes/structllarp_1_1Router.md) simply logs it. 


### function disableGossipingRC_TestingOnly

```cpp
inline virtual bool disableGossipingRC_TestingOnly()
```


**Reimplemented by**: [tooling::HiveRouter::disableGossipingRC_TestingOnly](Classes/structtooling_1_1HiveRouter.md#function-disablegossipingrc-testingonly)


## Public Attributes Documentation

### variable _lastPump

```cpp
llarp_time_t _lastPump = 0s;
```


### variable ready

```cpp
bool ready;
```


### variable transport_keyfile

```cpp
fs::path transport_keyfile;
```


### variable ident_keyfile

```cpp
fs::path ident_keyfile;
```


### variable encryption_keyfile

```cpp
fs::path encryption_keyfile;
```


### variable our_rc_file

```cpp
fs::path our_rc_file;
```


### variable m_UseFileLogging

```cpp
bool m_UseFileLogging = false;
```


### variable _rc

```cpp
RouterContact _rc;
```


### variable whitelistRouters

```cpp
bool whitelistRouters = false;
```

should we obey the service node whitelist? 

### variable m_lmq

```cpp
LMQ_ptr m_lmq;
```


### variable m_PathBuildLimiter

```cpp
path::BuildLimiter m_PathBuildLimiter;
```


### variable m_Pump

```cpp
std::shared_ptr< EventLoopWakeup > m_Pump;
```


### variable _ourAddress

```cpp
std::optional< SockAddr > _ourAddress;
```


### variable _loop

```cpp
EventLoop_ptr _loop;
```


### variable _vpnPlatform

```cpp
std::shared_ptr< vpn::Platform > _vpnPlatform;
```


### variable paths

```cpp
path::PathContext paths;
```


### variable _exitContext

```cpp
exit::Context _exitContext;
```


### variable _identity

```cpp
SecretKey _identity;
```


### variable _encryption

```cpp
SecretKey _encryption;
```


### variable _dht

```cpp
llarp_dht_context * _dht = nullptr;
```


### variable _nodedb

```cpp
std::shared_ptr< NodeDB > _nodedb;
```


### variable _startedAt

```cpp
llarp_time_t _startedAt;
```


### variable m_DiskThread

```cpp
const oxenmq::TaggedThreadID m_DiskThread;
```


### variable rcRegenInterval

```cpp
llarp_time_t rcRegenInterval = 1h;
```

how often do we resign our RC? milliseconds. 

### variable sendPadding

```cpp
bool sendPadding = false;
```


### variable inbound_link_msg_parser

```cpp
LinkMessageParser inbound_link_msg_parser;
```


### variable inbound_routing_msg_parser

```cpp
routing::InboundMessageParser inbound_routing_msg_parser;
```


### variable _hiddenServiceContext

```cpp
service::Context _hiddenServiceContext;
```


### variable _lastTick

```cpp
llarp_time_t _lastTick = 0s;
```


### variable _onDown

```cpp
std::function< void(void)> _onDown;
```


### variable bootstrapRCList

```cpp
BootstrapList bootstrapRCList;
```

bootstrap RCs 

### variable m_RoutePoker

```cpp
std::shared_ptr< RoutePoker > m_RoutePoker;
```


### variable DefaultRPCBindAddr

```cpp
const oxenmq::address DefaultRPCBindAddr = oxenmq::address::tcp("127.0.0.1", 1190);
```


### variable enableRPCServer

```cpp
bool enableRPCServer = false;
```


### variable rpcBindAddr

```cpp
oxenmq::address rpcBindAddr = DefaultRPCBindAddr;
```


### variable m_RPCServer

```cpp
std::unique_ptr< rpc::RpcServer > m_RPCServer;
```


### variable _randomStartDelay

```cpp
const llarp_time_t _randomStartDelay;
```


### variable m_lokidRpcClient

```cpp
std::shared_ptr< rpc::LokidRpcClient > m_lokidRpcClient;
```


### variable lokidRPCAddr

```cpp
oxenmq::address lokidRPCAddr;
```


### variable _routerProfiling

```cpp
Profiling _routerProfiling;
```


### variable _profilesFile

```cpp
fs::path _profilesFile;
```


### variable _outboundMessageHandler

```cpp
OutboundMessageHandler _outboundMessageHandler;
```


### variable _outboundSessionMaker

```cpp
OutboundSessionMaker _outboundSessionMaker;
```


### variable _linkManager

```cpp
LinkManager _linkManager;
```


### variable _rcLookupHandler

```cpp
RCLookupHandler _rcLookupHandler;
```


### variable _rcGossiper

```cpp
RCGossiper _rcGossiper;
```


### variable m_NextExploreAt

```cpp
TimePoint_t m_NextExploreAt;
```


### variable m_Config

```cpp
std::shared_ptr< Config > m_Config;
```


### variable m_OutboundUDPSocket

```cpp
int m_OutboundUDPSocket = -1;
```


-------------------------------

Updated on 2022-09-01 at 18:16:52 +0000