---
title: llarp::service::Endpoint

---

# llarp::service::Endpoint





Inherits from [llarp::path::Builder](Classes/structllarp_1_1path_1_1Builder.md), [llarp::service::ILookupHolder](Classes/structllarp_1_1service_1_1ILookupHolder.md), [llarp::service::IDataHandler](Classes/structllarp_1_1service_1_1IDataHandler.md), [llarp::EndpointBase](Classes/classllarp_1_1EndpointBase.md), [llarp::path::PathSet](Classes/structllarp_1_1path_1_1PathSet.md)

Inherited by [llarp::handlers::NullEndpoint](Classes/structllarp_1_1handlers_1_1NullEndpoint.md), [llarp::handlers::TunEndpoint](Classes/structllarp_1_1handlers_1_1TunEndpoint.md)

## Public Types

|                | Name           |
| -------------- | -------------- |
| using std::deque< [PendingBuffer](Classes/structllarp_1_1service_1_1PendingBuffer.md) > | **[PendingBufferQueue](Classes/structllarp_1_1service_1_1Endpoint.md#using-pendingbufferqueue)**  |
| using std::function< void([Address](Classes/structllarp_1_1service_1_1Address.md), [OutboundContext](Classes/structllarp_1_1service_1_1OutboundContext.md) *)> | **[PathEnsureHook](Classes/structllarp_1_1service_1_1Endpoint.md#using-pathensurehook)**  |
| using std::function< void(const [RouterID](Classes/structllarp_1_1RouterID.md), exit::BaseSession_ptr, [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md))> | **[SNodeEnsureHook](Classes/structllarp_1_1service_1_1Endpoint.md#using-snodeensurehook)**  |

## Protected Types

|                | Name           |
| -------------- | -------------- |
| using std::unordered_map< [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md), [Session](Classes/structllarp_1_1service_1_1Session.md) > | **[ConvoMap](Classes/structllarp_1_1service_1_1Endpoint.md#using-convomap)**  |

## Public Functions

|                | Name           |
| -------------- | -------------- |
| | **[Endpoint](Classes/structllarp_1_1service_1_1Endpoint.md#function-endpoint)**([AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * r, [Context](Classes/structllarp_1_1service_1_1Context.md) * parent) |
| | **[~Endpoint](Classes/structllarp_1_1service_1_1Endpoint.md#function-~endpoint)**() override |
| bool | **[IsReady](Classes/structllarp_1_1service_1_1Endpoint.md#function-isready)**() const<br>return true if we are ready to recv packets from the void  |
| virtual void | **[QueueRecvData](Classes/structllarp_1_1service_1_1Endpoint.md#function-queuerecvdata)**([RecvDataEvent](Classes/structllarp_1_1service_1_1RecvDataEvent.md) ev) override |
| bool | **[IntrosetIsStale](Classes/structllarp_1_1service_1_1Endpoint.md#function-introsetisstale)**() const<br>return true if our introset has expired intros  |
| virtual std::unordered_map< std::string, std::string > | **[NotifyParams](Classes/structllarp_1_1service_1_1Endpoint.md#function-notifyparams)**() const<br>construct parameters for notify hooks  |
| virtual util::StatusObject | **[ExtractStatus](Classes/structllarp_1_1service_1_1Endpoint.md#function-extractstatus)**() const |
| void | **[SetHandler](Classes/structllarp_1_1service_1_1Endpoint.md#function-sethandler)**([IDataHandler](Classes/structllarp_1_1service_1_1IDataHandler.md) * h) |
| virtual bool | **[Configure](Classes/structllarp_1_1service_1_1Endpoint.md#function-configure)**(const [NetworkConfig](Classes/structllarp_1_1NetworkConfig.md) & conf, const [DnsConfig](Classes/structllarp_1_1DnsConfig.md) & dnsConf) |
| virtual void | **[Tick](Classes/structllarp_1_1service_1_1Endpoint.md#function-tick)**(llarp_time_t now) override<br>tick owned paths  |
| virtual bool | **[HasIfAddr](Classes/structllarp_1_1service_1_1Endpoint.md#function-hasifaddr)**() const<br>return true if we have a resolvable ip address  |
| virtual std::string | **[GetIfName](Classes/structllarp_1_1service_1_1Endpoint.md#function-getifname)**() const =0 |
| std::optional< [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) > | **[GetBestConvoTagFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-getbestconvotagfor)**(std::variant< [Address](Classes/structllarp_1_1service_1_1Address.md), [RouterID](Classes/structllarp_1_1RouterID.md) > addr) const override |
| virtual [huint128_t](Classes/structllarp_1_1huint__t.md) | **[GetIfAddr](Classes/structllarp_1_1service_1_1Endpoint.md#function-getifaddr)**() const<br>get our ifaddr if it is set  |
| virtual std::optional< [net::TrafficPolicy](Classes/structllarp_1_1net_1_1TrafficPolicy.md) > | **[GetExitPolicy](Classes/structllarp_1_1service_1_1Endpoint.md#function-getexitpolicy)**() const<br>get the exit policy for our exit if we have one override me  |
| virtual std::set< [IPRange](Classes/structllarp_1_1IPRange.md) > | **[GetOwnedRanges](Classes/structllarp_1_1service_1_1Endpoint.md#function-getownedranges)**() const<br>get the ip ranges we claim to own override me  |
| virtual void | **[Thaw](Classes/structllarp_1_1service_1_1Endpoint.md#function-thaw)**() |
| virtual void | **[ResetInternalState](Classes/structllarp_1_1service_1_1Endpoint.md#function-resetinternalstate)**() override<br>reset all cooldown timers  |
| virtual const EventLoop_ptr & | **[Loop](Classes/structllarp_1_1service_1_1Endpoint.md#function-loop)**() override<br>loop (via router) use when sending any data on a path  |
| [AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * | **[Router](Classes/structllarp_1_1service_1_1Endpoint.md#function-router)**() |
| virtual bool | **[LoadKeyFile](Classes/structllarp_1_1service_1_1Endpoint.md#function-loadkeyfile)**() |
| virtual bool | **[Start](Classes/structllarp_1_1service_1_1Endpoint.md#function-start)**() |
| virtual std::string | **[Name](Classes/structllarp_1_1service_1_1Endpoint.md#function-name)**() const override<br>get the "name" of this pathset  |
| virtual AddressVariant_t | **[LocalAddress](Classes/structllarp_1_1service_1_1Endpoint.md#function-localaddress)**() const override<br>get our local address  |
| virtual std::optional< [SendStat](Classes/structllarp_1_1EndpointBase_1_1SendStat.md) > | **[GetStatFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-getstatfor)**(AddressVariant_t remote) const override<br>get statistics about how much traffic we sent and recv'd to a remote endpoint  |
| virtual std::unordered_set< AddressVariant_t > | **[AllRemoteEndpoints](Classes/structllarp_1_1service_1_1Endpoint.md#function-allremoteendpoints)**() const override<br>list all remote endpoint addresses we have that are mapped  |
| bool | **[ShouldPublishDescriptors](Classes/structllarp_1_1service_1_1Endpoint.md#function-shouldpublishdescriptors)**(llarp_time_t now) const override |
| virtual void | **[SRVRecordsChanged](Classes/structllarp_1_1service_1_1Endpoint.md#function-srvrecordschanged)**() override<br>called when srv data changes in some way  |
| virtual void | **[HandlePathDied](Classes/structllarp_1_1service_1_1Endpoint.md#function-handlepathdied)**(path::Path_ptr path) override<br>a path died now what?  |
| virtual [vpn::EgresPacketRouter](Classes/classllarp_1_1vpn_1_1EgresPacketRouter.md) * | **[EgresPacketRouter](Classes/structllarp_1_1service_1_1Endpoint.md#function-egrespacketrouter)**() |
| virtual [vpn::NetworkInterface](Classes/classllarp_1_1vpn_1_1NetworkInterface.md) * | **[GetVPNInterface](Classes/structllarp_1_1service_1_1Endpoint.md#function-getvpninterface)**() |
| virtual bool | **[PublishIntroSet](Classes/structllarp_1_1service_1_1Endpoint.md#function-publishintroset)**(const [EncryptedIntroSet](Classes/structllarp_1_1service_1_1EncryptedIntroSet.md) & i, [AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * r) override |
| bool | **[PublishIntroSetVia](Classes/structllarp_1_1service_1_1Endpoint.md#function-publishintrosetvia)**(const [EncryptedIntroSet](Classes/structllarp_1_1service_1_1EncryptedIntroSet.md) & i, [AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * r, path::Path_ptr p, uint64_t relayOrder) |
| virtual bool | **[HandleGotIntroMessage](Classes/structllarp_1_1service_1_1Endpoint.md#function-handlegotintromessage)**(std::shared_ptr< const [dht::GotIntroMessage](Classes/structllarp_1_1dht_1_1GotIntroMessage.md) > ) override<br>override me in subtype  |
| virtual bool | **[HandleGotRouterMessage](Classes/structllarp_1_1service_1_1Endpoint.md#function-handlegotroutermessage)**(std::shared_ptr< const [dht::GotRouterMessage](Classes/structllarp_1_1dht_1_1GotRouterMessage.md) > ) override<br>override me in subtype  |
| virtual bool | **[HandleGotNameMessage](Classes/structllarp_1_1service_1_1Endpoint.md#function-handlegotnamemessage)**(std::shared_ptr< const [dht::GotNameMessage](Classes/structllarp_1_1dht_1_1GotNameMessage.md) > ) override<br>override me in subtype  |
| bool | **[HandleHiddenServiceFrame](Classes/structllarp_1_1service_1_1Endpoint.md#function-handlehiddenserviceframe)**(path::Path_ptr p, const [service::ProtocolFrame](Classes/structllarp_1_1service_1_1ProtocolFrame.md) & msg) |
| void | **[SetEndpointAuth](Classes/structllarp_1_1service_1_1Endpoint.md#function-setendpointauth)**(std::shared_ptr< [IAuthPolicy](Classes/structllarp_1_1service_1_1IAuthPolicy.md) > policy) |
| void | **[SetAuthInfoForEndpoint](Classes/structllarp_1_1service_1_1Endpoint.md#function-setauthinfoforendpoint)**([Address](Classes/structllarp_1_1service_1_1Address.md) remote, [AuthInfo](Classes/structllarp_1_1service_1_1AuthInfo.md) info)<br>sets how we authenticate with remote address  |
| virtual [huint128_t](Classes/structllarp_1_1huint__t.md) | **[ObtainIPForAddr](Classes/structllarp_1_1service_1_1Endpoint.md#function-obtainipforaddr)**(std::variant< [Address](Classes/structllarp_1_1service_1_1Address.md), [RouterID](Classes/structllarp_1_1RouterID.md) > ) =0 |
| virtual std::optional< std::variant< [service::Address](Classes/structllarp_1_1service_1_1Address.md), [RouterID](Classes/structllarp_1_1RouterID.md) > > | **[ObtainAddrForIP](Classes/structllarp_1_1service_1_1Endpoint.md#function-obtainaddrforip)**([huint128_t](Classes/structllarp_1_1huint__t.md) ip) const =0<br>get a key for ip address  |
| bool | **[HasPendingPathToService](Classes/structllarp_1_1service_1_1Endpoint.md#function-haspendingpathtoservice)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) & remote) const<br>return true if we have a pending job to build to a hidden service but it's not done yet  |
| virtual bool | **[HandleDataMessage](Classes/structllarp_1_1service_1_1Endpoint.md#function-handledatamessage)**(path::Path_ptr path, const [PathID_t](Classes/structllarp_1_1PathID__t.md) from, std::shared_ptr< [ProtocolMessage](Classes/structllarp_1_1service_1_1ProtocolMessage.md) > msg) override |
| virtual bool | **[HandleInboundPacket](Classes/structllarp_1_1service_1_1Endpoint.md#function-handleinboundpacket)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) tag, const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & pkt, ProtocolType t, uint64_t seqno) =0<br>handle packet io from service node or hidden service to frontend  |
| bool | **[ProcessDataMessage](Classes/structllarp_1_1service_1_1Endpoint.md#function-processdatamessage)**(std::shared_ptr< [ProtocolMessage](Classes/structllarp_1_1service_1_1ProtocolMessage.md) > msg) |
| void | **[EnsureRouterIsKnown](Classes/structllarp_1_1service_1_1Endpoint.md#function-ensurerouterisknown)**(const [RouterID](Classes/structllarp_1_1RouterID.md) & router)<br>ensure that we know a router, looks up if it doesn't  |
| bool | **[LookupRouterAnon](Classes/structllarp_1_1service_1_1Endpoint.md#function-lookuprouteranon)**([RouterID](Classes/structllarp_1_1RouterID.md) router, RouterLookupHandler handler)<br>lookup a router via closest path  |
| void | **[LookupNameAsync](Classes/structllarp_1_1service_1_1Endpoint.md#function-lookupnameasync)**(std::string name, std::function< void(std::optional< std::variant< [Address](Classes/structllarp_1_1service_1_1Address.md), [RouterID](Classes/structllarp_1_1RouterID.md) >>)> resultHandler) override |
| virtual void | **[LookupServiceAsync](Classes/structllarp_1_1service_1_1Endpoint.md#function-lookupserviceasync)**(std::string name, std::string service, std::function< void(std::vector< [dns::SRVData](Classes/structllarp_1_1dns_1_1SRVData.md) >)> resultHandler) override<br>lookup srv records async  |
| virtual void | **[Pump](Classes/structllarp_1_1service_1_1Endpoint.md#function-pump)**(llarp_time_t now)<br>called on event loop pump  |
| virtual bool | **[Stop](Classes/structllarp_1_1service_1_1Endpoint.md#function-stop)**() override<br>stop this endpoint  |
| const [Identity](Classes/structllarp_1_1service_1_1Identity.md) & | **[GetIdentity](Classes/structllarp_1_1service_1_1Endpoint.md#function-getidentity)**() const |
| void | **[MapExitRange](Classes/structllarp_1_1service_1_1Endpoint.md#function-mapexitrange)**([IPRange](Classes/structllarp_1_1IPRange.md) range, [service::Address](Classes/structllarp_1_1service_1_1Address.md) exit) |
| void | **[UnmapExitRange](Classes/structllarp_1_1service_1_1Endpoint.md#function-unmapexitrange)**([IPRange](Classes/structllarp_1_1IPRange.md) range) |
| virtual void | **[PutLookup](Classes/structllarp_1_1service_1_1Endpoint.md#function-putlookup)**([IServiceLookup](Classes/structllarp_1_1service_1_1IServiceLookup.md) * lookup, uint64_t txid) override |
| virtual void | **[HandlePathBuilt](Classes/structllarp_1_1service_1_1Endpoint.md#function-handlepathbuilt)**(path::Path_ptr path) override |
| bool | **[HandleDataDrop](Classes/structllarp_1_1service_1_1Endpoint.md#function-handledatadrop)**(path::Path_ptr p, const [PathID_t](Classes/structllarp_1_1PathID__t.md) & dst, uint64_t s) |
| bool | **[CheckPathIsDead](Classes/structllarp_1_1service_1_1Endpoint.md#function-checkpathisdead)**(path::Path_ptr p, llarp_time_t latency) |
| size_t | **[RemoveAllConvoTagsFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-removeallconvotagsfor)**([service::Address](Classes/structllarp_1_1service_1_1Address.md) remote) |
| virtual bool | **[WantsOutboundSession](Classes/structllarp_1_1service_1_1Endpoint.md#function-wantsoutboundsession)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) & addr) const override<br>do we want a session outbound to addr  |
| virtual void | **[MarkAddressOutbound](Classes/structllarp_1_1service_1_1Endpoint.md#function-markaddressoutbound)**(AddressVariant_t ) override<br>this MUST be called if you want to call EnsurePathTo on the given address  |
| virtual bool | **[ShouldBundleRC](Classes/structllarp_1_1service_1_1Endpoint.md#function-shouldbundlerc)**() const override<br>should we bundle RCs in builds?  |
| virtual void | **[BlacklistSNode](Classes/structllarp_1_1service_1_1Endpoint.md#function-blacklistsnode)**(const [RouterID](Classes/structllarp_1_1RouterID.md) snode) override |
| virtual std::optional< std::variant< [Address](Classes/structllarp_1_1service_1_1Address.md), [RouterID](Classes/structllarp_1_1RouterID.md) > > | **[GetEndpointWithConvoTag](Classes/structllarp_1_1service_1_1Endpoint.md#function-getendpointwithconvotag)**([ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) t) const override<br>maybe get an endpoint variant given its convo tag  |
| virtual bool | **[HasConvoTag](Classes/structllarp_1_1service_1_1Endpoint.md#function-hasconvotag)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & t) const override |
| virtual bool | **[ShouldBuildMore](Classes/structllarp_1_1service_1_1Endpoint.md#function-shouldbuildmore)**(llarp_time_t now) const override<br>return true if we should build another path  |
| virtual llarp_time_t | **[PathAlignmentTimeout](Classes/structllarp_1_1service_1_1Endpoint.md#function-pathalignmenttimeout)**() const |
| bool | **[EnsurePathTo](Classes/structllarp_1_1service_1_1Endpoint.md#function-ensurepathto)**(std::variant< [Address](Classes/structllarp_1_1service_1_1Address.md), [RouterID](Classes/structllarp_1_1RouterID.md) > addr, std::function< void(std::optional< [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) >)> hook, llarp_time_t timeout) override |
| bool | **[EnsurePathToService](Classes/structllarp_1_1service_1_1Endpoint.md#function-ensurepathtoservice)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) remote, PathEnsureHook h, llarp_time_t timeoutMS =DefaultPathEnsureTimeout)<br>return false if we have already called this function before for this address  |
| void | **[InformPathToService](Classes/structllarp_1_1service_1_1Endpoint.md#function-informpathtoservice)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) remote, [OutboundContext](Classes/structllarp_1_1service_1_1OutboundContext.md) * ctx) |
| bool | **[EnsurePathToSNode](Classes/structllarp_1_1service_1_1Endpoint.md#function-ensurepathtosnode)**(const [RouterID](Classes/structllarp_1_1RouterID.md) remote, SNodeEnsureHook h)<br>ensure a path to a service node by public key  |
| bool | **[HasPendingRouterLookup](Classes/structllarp_1_1service_1_1Endpoint.md#function-haspendingrouterlookup)**(const [RouterID](Classes/structllarp_1_1RouterID.md) remote) const<br>return true if this endpoint is trying to lookup this router right now  |
| bool | **[HasPathToSNode](Classes/structllarp_1_1service_1_1Endpoint.md#function-haspathtosnode)**(const [RouterID](Classes/structllarp_1_1RouterID.md) remote) const |
| bool | **[HasFlowToService](Classes/structllarp_1_1service_1_1Endpoint.md#function-hasflowtoservice)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) remote) const |
| virtual void | **[PutSenderFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-putsenderfor)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & tag, const [ServiceInfo](Classes/structllarp_1_1service_1_1ServiceInfo.md) & info, bool inbound) override |
| virtual bool | **[HasInboundConvo](Classes/structllarp_1_1service_1_1Endpoint.md#function-hasinboundconvo)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) & addr) const override |
| virtual bool | **[HasOutboundConvo](Classes/structllarp_1_1service_1_1Endpoint.md#function-hasoutboundconvo)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) & addr) const override |
| virtual bool | **[GetCachedSessionKeyFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-getcachedsessionkeyfor)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & remote, [SharedSecret](Classes/structllarp_1_1AlignedBuffer.md) & secret) const override |
| virtual void | **[PutCachedSessionKeyFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-putcachedsessionkeyfor)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & remote, const [SharedSecret](Classes/structllarp_1_1AlignedBuffer.md) & secret) override |
| virtual bool | **[GetSenderFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-getsenderfor)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & remote, [ServiceInfo](Classes/structllarp_1_1service_1_1ServiceInfo.md) & si) const override |
| virtual void | **[PutIntroFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-putintrofor)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & remote, const [Introduction](Classes/structllarp_1_1service_1_1Introduction.md) & intro) override |
| virtual bool | **[GetIntroFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-getintrofor)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & remote, [Introduction](Classes/structllarp_1_1service_1_1Introduction.md) & intro) const override |
| virtual void | **[RemoveConvoTag](Classes/structllarp_1_1service_1_1Endpoint.md#function-removeconvotag)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & remote) override |
| virtual void | **[ConvoTagTX](Classes/structllarp_1_1service_1_1Endpoint.md#function-convotagtx)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & tag) override<br>called when we send data to remote on a convotag  |
| virtual void | **[ConvoTagRX](Classes/structllarp_1_1service_1_1Endpoint.md#function-convotagrx)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & tag) override<br>called when we got data from remote on a convotag  |
| virtual void | **[PutReplyIntroFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-putreplyintrofor)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & remote, const [Introduction](Classes/structllarp_1_1service_1_1Introduction.md) & intro) override |
| virtual bool | **[GetReplyIntroFor](Classes/structllarp_1_1service_1_1Endpoint.md#function-getreplyintrofor)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & remote, [Introduction](Classes/structllarp_1_1service_1_1Introduction.md) & intro) const override |
| virtual bool | **[GetConvoTagsForService](Classes/structllarp_1_1service_1_1Endpoint.md#function-getconvotagsforservice)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) & si, std::set< [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) > & tag) const override |
| void | **[PutNewOutboundContext](Classes/structllarp_1_1service_1_1Endpoint.md#function-putnewoutboundcontext)**(const [IntroSet](Classes/structllarp_1_1service_1_1IntroSet.md) & introset, llarp_time_t timeLeftToAlign) |
| std::optional< uint64_t > | **[GetSeqNoForConvo](Classes/structllarp_1_1service_1_1Endpoint.md#function-getseqnoforconvo)**(const [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) & tag) |
| size_t | **[UniqueEndpoints](Classes/structllarp_1_1service_1_1Endpoint.md#function-uniqueendpoints)**() const<br>count unique endpoints we are talking to  |
| bool | **[HasExit](Classes/structllarp_1_1service_1_1Endpoint.md#function-hasexit)**() const |
| virtual std::optional< std::vector< [RouterContact](Classes/structllarp_1_1RouterContact.md) > > | **[GetHopsForBuild](Classes/structllarp_1_1service_1_1Endpoint.md#function-gethopsforbuild)**() override |
| std::optional< std::vector< [RouterContact](Classes/structllarp_1_1RouterContact.md) > > | **[GetHopsForBuildWithEndpoint](Classes/structllarp_1_1service_1_1Endpoint.md#function-gethopsforbuildwithendpoint)**([RouterID](Classes/structllarp_1_1RouterID.md) endpoint) |
| virtual void | **[PathBuildStarted](Classes/structllarp_1_1service_1_1Endpoint.md#function-pathbuildstarted)**(path::Path_ptr path) override |
| virtual void | **[IntroSetPublishFail](Classes/structllarp_1_1service_1_1Endpoint.md#function-introsetpublishfail)**() |
| virtual void | **[IntroSetPublished](Classes/structllarp_1_1service_1_1Endpoint.md#function-introsetpublished)**() |
| void | **[AsyncProcessAuthMessage](Classes/structllarp_1_1service_1_1Endpoint.md#function-asyncprocessauthmessage)**(std::shared_ptr< [ProtocolMessage](Classes/structllarp_1_1service_1_1ProtocolMessage.md) > msg, std::function< void([AuthResult](Classes/structllarp_1_1service_1_1AuthResult.md))> hook) |
| void | **[SendAuthResult](Classes/structllarp_1_1service_1_1Endpoint.md#function-sendauthresult)**(path::Path_ptr path, [PathID_t](Classes/structllarp_1_1PathID__t.md) replyPath, [ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) tag, [AuthResult](Classes/structllarp_1_1service_1_1AuthResult.md) st) |
| uint64_t | **[GenTXID](Classes/structllarp_1_1service_1_1Endpoint.md#function-gentxid)**() |
| void | **[ResetConvoTag](Classes/structllarp_1_1service_1_1Endpoint.md#function-resetconvotag)**([ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) tag, path::Path_ptr path, [PathID_t](Classes/structllarp_1_1PathID__t.md) from) |
| const std::set< [RouterID](Classes/structllarp_1_1RouterID.md) > & | **[SnodeBlacklist](Classes/structllarp_1_1service_1_1Endpoint.md#function-snodeblacklist)**() const |
| virtual bool | **[SendToOrQueue](Classes/structllarp_1_1service_1_1Endpoint.md#function-sendtoorqueue)**([ConvoTag](Classes/structllarp_1_1service_1_1ConvoTag.md) tag, const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & payload, ProtocolType t) override |
| bool | **[SendToOrQueue](Classes/structllarp_1_1service_1_1Endpoint.md#function-sendtoorqueue)**(const std::variant< [Address](Classes/structllarp_1_1service_1_1Address.md), [RouterID](Classes/structllarp_1_1RouterID.md) > & addr, const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & payload, ProtocolType t) |
| bool | **[SendToOrQueue](Classes/structllarp_1_1service_1_1Endpoint.md#function-sendtoorqueue)**(const [Address](Classes/structllarp_1_1service_1_1Address.md) & addr, const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & payload, ProtocolType t) |
| bool | **[SendToOrQueue](Classes/structllarp_1_1service_1_1Endpoint.md#function-sendtoorqueue)**(const [RouterID](Classes/structllarp_1_1RouterID.md) & addr, const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & payload, ProtocolType t) |
| std::optional< [AuthInfo](Classes/structllarp_1_1service_1_1AuthInfo.md) > | **[MaybeGetAuthInfoForEndpoint](Classes/structllarp_1_1service_1_1Endpoint.md#function-maybegetauthinfoforendpoint)**([service::Address](Classes/structllarp_1_1service_1_1Address.md) addr) |
| virtual [quic::TunnelManager](Classes/classllarp_1_1quic_1_1TunnelManager.md) * | **[GetQUICTunnel](Classes/structllarp_1_1service_1_1Endpoint.md#function-getquictunnel)**() override<br>Returns a pointer to the quic::Tunnel object handling quic connections for this endpoint.  |

## Protected Functions

|                | Name           |
| -------------- | -------------- |
| virtual bool | **[SupportsV6](Classes/structllarp_1_1service_1_1Endpoint.md#function-supportsv6)**() const =0 |
| void | **[RegenAndPublishIntroSet](Classes/structllarp_1_1service_1_1Endpoint.md#function-regenandpublishintroset)**() |
| [IServiceLookup](Classes/structllarp_1_1service_1_1IServiceLookup.md) * | **[GenerateLookupByTag](Classes/structllarp_1_1service_1_1Endpoint.md#function-generatelookupbytag)**(const [Tag](Classes/structllarp_1_1service_1_1Tag.md) & tag) |
| void | **[PrefetchServicesByTag](Classes/structllarp_1_1service_1_1Endpoint.md#function-prefetchservicesbytag)**(const [Tag](Classes/structllarp_1_1service_1_1Tag.md) & tag) |
| void | **[FlushRecvData](Classes/structllarp_1_1service_1_1Endpoint.md#function-flushrecvdata)**() |
| const [IntroSet](Classes/structllarp_1_1service_1_1IntroSet.md) & | **[introSet](Classes/structllarp_1_1service_1_1Endpoint.md#function-introset)**() const |
| [IntroSet](Classes/structllarp_1_1service_1_1IntroSet.md) & | **[introSet](Classes/structllarp_1_1service_1_1Endpoint.md#function-introset)**() |
| const ConvoMap & | **[Sessions](Classes/structllarp_1_1service_1_1Endpoint.md#function-sessions)**() const |
| ConvoMap & | **[Sessions](Classes/structllarp_1_1service_1_1Endpoint.md#function-sessions)**() |

## Public Attributes

|                | Name           |
| -------------- | -------------- |
| constexpr auto | **[DefaultPathEnsureTimeout](Classes/structllarp_1_1service_1_1Endpoint.md#variable-defaultpathensuretimeout)**  |
| [SendMessageQueue_t](Classes/classllarp_1_1thread_1_1Queue.md) | **[m_SendQueue](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-sendqueue)**  |

## Protected Attributes

|                | Name           |
| -------------- | -------------- |
| [Context](Classes/structllarp_1_1service_1_1Context.md) *const | **[context](Classes/structllarp_1_1service_1_1Endpoint.md#variable-context)** <br>parent context that owns this endpoint  |
| [IDataHandler](Classes/structllarp_1_1service_1_1IDataHandler.md) * | **[m_DataHandler](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-datahandler)**  |
| [Identity](Classes/structllarp_1_1service_1_1Identity.md) | **[m_Identity](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-identity)**  |
| [net::IPRangeMap](Classes/structllarp_1_1net_1_1IPRangeMap.md)< [service::Address](Classes/structllarp_1_1service_1_1Address.md) > | **[m_ExitMap](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-exitmap)**  |
| bool | **[m_PublishIntroSet](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-publishintroset)**  |
| std::unique_ptr< [EndpointState](Classes/structllarp_1_1service_1_1EndpointState.md) > | **[m_state](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-state)**  |
| std::shared_ptr< [IAuthPolicy](Classes/structllarp_1_1service_1_1IAuthPolicy.md) > | **[m_AuthPolicy](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-authpolicy)**  |
| std::unordered_map< [Address](Classes/structllarp_1_1service_1_1Address.md), [AuthInfo](Classes/structllarp_1_1service_1_1AuthInfo.md) > | **[m_RemoteAuthInfos](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-remoteauthinfos)**  |
| std::unique_ptr< [quic::TunnelManager](Classes/classllarp_1_1quic_1_1TunnelManager.md) > | **[m_quic](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-quic)**  |
| std::unordered_map< std::string, std::pair< std::optional< [IPRange](Classes/structllarp_1_1IPRange.md) >, std::optional< [AuthInfo](Classes/structllarp_1_1service_1_1AuthInfo.md) > > > | **[m_StartupLNSMappings](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-startuplnsmappings)** <br>(lns name, optional exit range, optional auth info) for looking up on startup  |
| [RecvPacketQueue_t](Classes/classllarp_1_1thread_1_1Queue.md) | **[m_InboundTrafficQueue](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-inboundtrafficqueue)**  |
| [thread::Queue](Classes/classllarp_1_1thread_1_1Queue.md)< [RecvDataEvent](Classes/structllarp_1_1service_1_1RecvDataEvent.md) > | **[m_RecvQueue](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-recvqueue)**  |
| [util::DecayingHashSet](Classes/structllarp_1_1util_1_1DecayingHashSet.md)< [Address](Classes/structllarp_1_1service_1_1Address.md) > | **[m_IntrosetLookupFilter](Classes/structllarp_1_1service_1_1Endpoint.md#variable-m-introsetlookupfilter)** <br>for rate limiting introset lookups  |

## Friends

|                | Name           |
| -------------- | -------------- |
| struct | **[EndpointUtil](Classes/structllarp_1_1service_1_1Endpoint.md#friend-endpointutil)**  |

## Additional inherited members

**Public Functions inherited from [llarp::path::Builder](Classes/structllarp_1_1path_1_1Builder.md)**

|                | Name           |
| -------------- | -------------- |
| | **[Builder](Classes/structllarp_1_1path_1_1Builder.md#function-builder)**([AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * p_router, size_t numDesiredPaths, size_t numHops)<br>construct  |
| virtual | **[~Builder](Classes/structllarp_1_1path_1_1Builder.md#function-~builder)**() =default |
| bool | **[BuildCooldownHit](Classes/structllarp_1_1path_1_1Builder.md#function-buildcooldownhit)**(llarp_time_t now) const<br>return true if we hit our soft limit for building paths too fast  |
| virtual PathRole | **[GetRoles](Classes/structllarp_1_1path_1_1Builder.md#function-getroles)**() const<br>get roles for this path builder  |
| [BuildStats](Classes/structllarp_1_1path_1_1BuildStats.md) | **[CurrentBuildStats](Classes/structllarp_1_1path_1_1Builder.md#function-currentbuildstats)**() const |
| virtual bool | **[IsStopped](Classes/structllarp_1_1path_1_1Builder.md#function-isstopped)**() const override<br>return true if we are stopped  |
| virtual bool | **[ShouldRemove](Classes/structllarp_1_1path_1_1Builder.md#function-shouldremove)**() const override<br>return true if we can and should remove this pathset and underlying resources from its parent context  |
| virtual llarp_time_t | **[Now](Classes/structllarp_1_1path_1_1Builder.md#function-now)**() const override<br>get time from event loop  |
| virtual void | **[BuildOne](Classes/structllarp_1_1path_1_1Builder.md#function-buildone)**(PathRole roles =ePathRoleAny) override |
| virtual bool | **[BuildOneAlignedTo](Classes/structllarp_1_1path_1_1Builder.md#function-buildonealignedto)**(const [RouterID](Classes/structllarp_1_1RouterID.md) endpoint) override |
| std::optional< std::vector< [RouterContact](Classes/structllarp_1_1RouterContact.md) > > | **[GetHopsAlignedToForBuild](Classes/structllarp_1_1path_1_1Builder.md#function-gethopsalignedtoforbuild)**([RouterID](Classes/structllarp_1_1RouterID.md) endpoint, const std::set< [RouterID](Classes/structllarp_1_1RouterID.md) > & exclude ={}) |
| virtual void | **[Build](Classes/structllarp_1_1path_1_1Builder.md#function-build)**(std::vector< [RouterContact](Classes/structllarp_1_1RouterContact.md) > hops, PathRole roles =ePathRoleAny) override<br>manual build on these hops  |
| std::optional< [RouterContact](Classes/structllarp_1_1RouterContact.md) > | **[SelectFirstHop](Classes/structllarp_1_1path_1_1Builder.md#function-selectfirsthop)**(const std::set< [RouterID](Classes/structllarp_1_1RouterID.md) > & exclude ={}) const<br>pick a first hop  |
| void | **[ManualRebuild](Classes/structllarp_1_1path_1_1Builder.md#function-manualrebuild)**(size_t N, PathRole roles =ePathRoleAny) |
| virtual const [SecretKey](Classes/structllarp_1_1SecretKey.md) & | **[GetTunnelEncryptionSecretKey](Classes/structllarp_1_1path_1_1Builder.md#function-gettunnelencryptionsecretkey)**() const |
| virtual void | **[HandlePathBuildTimeout](Classes/structllarp_1_1path_1_1Builder.md#function-handlepathbuildtimeout)**(Path_ptr p) override |
| virtual void | **[HandlePathBuildFailedAt](Classes/structllarp_1_1path_1_1Builder.md#function-handlepathbuildfailedat)**(Path_ptr p, [RouterID](Classes/structllarp_1_1RouterID.md) hop) override |

**Protected Functions inherited from [llarp::path::Builder](Classes/structllarp_1_1path_1_1Builder.md)**

|                | Name           |
| -------------- | -------------- |
| virtual bool | **[UrgentBuild](Classes/structllarp_1_1path_1_1Builder.md#function-urgentbuild)**(llarp_time_t now) const |
| bool | **[BuildCooldownHit](Classes/structllarp_1_1path_1_1Builder.md#function-buildcooldownhit)**([RouterID](Classes/structllarp_1_1RouterID.md) edge) const<br>return true if we hit our soft limit for building paths too fast on a first hop  |

**Public Attributes inherited from [llarp::path::Builder](Classes/structllarp_1_1path_1_1Builder.md)**

|                | Name           |
| -------------- | -------------- |
| [AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) *const | **[m_router](Classes/structllarp_1_1path_1_1Builder.md#variable-m-router)**  |
| [SecretKey](Classes/structllarp_1_1SecretKey.md) | **[enckey](Classes/structllarp_1_1path_1_1Builder.md#variable-enckey)**  |
| size_t | **[numHops](Classes/structllarp_1_1path_1_1Builder.md#variable-numhops)**  |
| llarp_time_t | **[lastBuild](Classes/structllarp_1_1path_1_1Builder.md#variable-lastbuild)**  |
| llarp_time_t | **[buildIntervalLimit](Classes/structllarp_1_1path_1_1Builder.md#variable-buildintervallimit)**  |

**Protected Attributes inherited from [llarp::path::Builder](Classes/structllarp_1_1path_1_1Builder.md)**

|                | Name           |
| -------------- | -------------- |
| std::atomic< bool > | **[_run](Classes/structllarp_1_1path_1_1Builder.md#variable--run)** <br>flag for [PathSet::Stop()]() |

**Public Classes inherited from [llarp::EndpointBase](Classes/classllarp_1_1EndpointBase.md)**

|                | Name           |
| -------------- | -------------- |
| struct | **[QUICMappingInfo](Classes/structllarp_1_1EndpointBase_1_1QUICMappingInfo.md)** <br>info about a quic mapping  |
| struct | **[SendStat](Classes/structllarp_1_1EndpointBase_1_1SendStat.md)**  |

**Public Types inherited from [llarp::EndpointBase](Classes/classllarp_1_1EndpointBase.md)**

|                | Name           |
| -------------- | -------------- |
| using std::variant< [service::Address](Classes/structllarp_1_1service_1_1Address.md), [RouterID](Classes/structllarp_1_1RouterID.md) > | **[AddressVariant_t](Classes/classllarp_1_1EndpointBase.md#using-addressvariant-t)**  |

**Public Functions inherited from [llarp::EndpointBase](Classes/classllarp_1_1EndpointBase.md)**

|                | Name           |
| -------------- | -------------- |
| virtual | **[~EndpointBase](Classes/classllarp_1_1EndpointBase.md#function-~endpointbase)**() =default |
| std::optional< [QUICMappingInfo](Classes/structllarp_1_1EndpointBase_1_1QUICMappingInfo.md) > | **[GetQUICMappingInfoByID](Classes/classllarp_1_1EndpointBase.md#function-getquicmappinginfobyid)**(int stream_id) const<br>maybe get quic mapping info given its stream id returns std::nullopt if we have no stream given that id  |
| void | **[PutSRVRecord](Classes/classllarp_1_1EndpointBase.md#function-putsrvrecord)**([dns::SRVData](Classes/structllarp_1_1dns_1_1SRVData.md) srv)<br>add an srv record to this endpoint's descriptor  |
| virtual std::shared_ptr< [dns::Server](Classes/classllarp_1_1dns_1_1Server.md) > | **[DNS](Classes/classllarp_1_1EndpointBase.md#function-dns)**() const<br>get dns serverr if we have on on this endpoint  |
| bool | **[DelSRVRecordIf](Classes/classllarp_1_1EndpointBase.md#function-delsrvrecordif)**(std::function< bool(const [dns::SRVData](Classes/structllarp_1_1dns_1_1SRVData.md) &)> filter)<br>remove srv records from this endpoint that match a filter for each srv record call it with filter, remove if filter returns true return if we removed any srv records  |
| std::set< [dns::SRVData](Classes/structllarp_1_1dns_1_1SRVData.md) > | **[SRVRecords](Classes/classllarp_1_1EndpointBase.md#function-srvrecords)**() const<br>get copy of all srv records  |

**Protected Types inherited from [llarp::path::PathSet](Classes/structllarp_1_1path_1_1PathSet.md)**

|                | Name           |
| -------------- | -------------- |
| using [util::NullMutex](Classes/structllarp_1_1util_1_1NullMutex.md) | **[Mtx_t](Classes/structllarp_1_1path_1_1PathSet.md#using-mtx-t)**  |
| using [util::NullLock](Classes/structllarp_1_1util_1_1NullLock.md) | **[Lock_t](Classes/structllarp_1_1path_1_1PathSet.md#using-lock-t)**  |
| using std::unordered_map< std::pair< [RouterID](Classes/structllarp_1_1RouterID.md), [PathID_t](Classes/structllarp_1_1PathID__t.md) >, Path_ptr > | **[PathMap_t](Classes/structllarp_1_1path_1_1PathSet.md#using-pathmap-t)**  |

**Public Functions inherited from [llarp::path::PathSet](Classes/structllarp_1_1path_1_1PathSet.md)**

|                | Name           |
| -------------- | -------------- |
| | **[PathSet](Classes/structllarp_1_1path_1_1PathSet.md#function-pathset)**(size_t numDesiredPaths)<br>construct @params numDesiredPaths the number of paths to maintain  |
| virtual PathSet_ptr | **[GetSelf](Classes/structllarp_1_1path_1_1PathSet.md#function-getself)**() =0<br>get a shared_ptr of ourself  |
| virtual std::weak_ptr< [PathSet](Classes/structllarp_1_1path_1_1PathSet.md) > | **[GetWeak](Classes/structllarp_1_1path_1_1PathSet.md#function-getweak)**() =0<br>get a weak_ptr of ourself  |
| virtual void | **[BuildOne](Classes/structllarp_1_1path_1_1PathSet.md#function-buildone)**(PathRole roles =ePathRoleAny) =0 |
| virtual void | **[Build](Classes/structllarp_1_1path_1_1PathSet.md#function-build)**(std::vector< [RouterContact](Classes/structllarp_1_1RouterContact.md) > hops, PathRole roles =ePathRoleAny) =0<br>manual build on these hops  |
| size_t | **[NumPathsExistingAt](Classes/structllarp_1_1path_1_1PathSet.md#function-numpathsexistingat)**(llarp_time_t futureTime) const<br>count the number of paths that will exist at this timestamp in future  |
| virtual void | **[HandlePathBuildTimeout](Classes/structllarp_1_1path_1_1PathSet.md#function-handlepathbuildtimeout)**(Path_ptr path) |
| virtual void | **[HandlePathBuildFailedAt](Classes/structllarp_1_1path_1_1PathSet.md#function-handlepathbuildfailedat)**(Path_ptr path, [RouterID](Classes/structllarp_1_1RouterID.md) hop) |
| bool | **[GetNewestIntro](Classes/structllarp_1_1path_1_1PathSet.md#function-getnewestintro)**([service::Introduction](Classes/structllarp_1_1service_1_1Introduction.md) & intro) const |
| void | **[AddPath](Classes/structllarp_1_1path_1_1PathSet.md#function-addpath)**(Path_ptr path) |
| Path_ptr | **[GetByUpstream](Classes/structllarp_1_1path_1_1PathSet.md#function-getbyupstream)**([RouterID](Classes/structllarp_1_1RouterID.md) remote, [PathID_t](Classes/structllarp_1_1PathID__t.md) rxid) const |
| void | **[ExpirePaths](Classes/structllarp_1_1path_1_1PathSet.md#function-expirepaths)**(llarp_time_t now, [AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * router) |
| size_t | **[NumInStatus](Classes/structllarp_1_1path_1_1PathSet.md#function-numinstatus)**(PathStatus st) const<br>get the number of paths in this status  |
| size_t | **[AvailablePaths](Classes/structllarp_1_1path_1_1PathSet.md#function-availablepaths)**(PathRole role) const<br>get the number of paths that match the role that are available  |
| virtual llarp_time_t | **[Now](Classes/structllarp_1_1path_1_1PathSet.md#function-now)**() const =0<br>get time from event loop  |
| virtual bool | **[IsStopped](Classes/structllarp_1_1path_1_1PathSet.md#function-isstopped)**() const =0<br>return true if we are stopped  |
| virtual bool | **[ShouldRemove](Classes/structllarp_1_1path_1_1PathSet.md#function-shouldremove)**() const =0<br>return true if we can and should remove this pathset and underlying resources from its parent context  |
| virtual bool | **[ShouldBuildMoreForRoles](Classes/structllarp_1_1path_1_1PathSet.md#function-shouldbuildmoreforroles)**(llarp_time_t now, PathRole roles) const<br>return true if we need another path with the given path roles  |
| virtual size_t | **[MinRequiredForRoles](Classes/structllarp_1_1path_1_1PathSet.md#function-minrequiredforroles)**(PathRole roles) const<br>return the minimum number of paths we want for given roles  |
| virtual [routing::IMessageHandler](Classes/structllarp_1_1routing_1_1IMessageHandler.md) * | **[GetDHTHandler](Classes/structllarp_1_1path_1_1PathSet.md#function-getdhthandler)**() |
| Path_ptr | **[GetEstablishedPathClosestTo](Classes/structllarp_1_1path_1_1PathSet.md#function-getestablishedpathclosestto)**([RouterID](Classes/structllarp_1_1RouterID.md) router, std::unordered_set< [RouterID](Classes/structllarp_1_1RouterID.md) > excluding ={}, PathRole roles =ePathRoleAny) const |
| Path_ptr | **[PickEstablishedPath](Classes/structllarp_1_1path_1_1PathSet.md#function-pickestablishedpath)**(PathRole roles =ePathRoleAny) const |
| Path_ptr | **[PickRandomEstablishedPath](Classes/structllarp_1_1path_1_1PathSet.md#function-pickrandomestablishedpath)**(PathRole roles =ePathRoleAny) const |
| Path_ptr | **[GetPathByRouter](Classes/structllarp_1_1path_1_1PathSet.md#function-getpathbyrouter)**([RouterID](Classes/structllarp_1_1RouterID.md) router, PathRole roles =ePathRoleAny) const |
| Path_ptr | **[GetNewestPathByRouter](Classes/structllarp_1_1path_1_1PathSet.md#function-getnewestpathbyrouter)**([RouterID](Classes/structllarp_1_1RouterID.md) router, PathRole roles =ePathRoleAny) const |
| Path_ptr | **[GetRandomPathByRouter](Classes/structllarp_1_1path_1_1PathSet.md#function-getrandompathbyrouter)**([RouterID](Classes/structllarp_1_1RouterID.md) router, PathRole roles =ePathRoleAny) const |
| Path_ptr | **[GetPathByID](Classes/structllarp_1_1path_1_1PathSet.md#function-getpathbyid)**([PathID_t](Classes/structllarp_1_1PathID__t.md) id) const |
| Path_ptr | **[GetByEndpointWithID](Classes/structllarp_1_1path_1_1PathSet.md#function-getbyendpointwithid)**([RouterID](Classes/structllarp_1_1RouterID.md) router, [PathID_t](Classes/structllarp_1_1PathID__t.md) id) const |
| std::optional< std::set< [service::Introduction](Classes/structllarp_1_1service_1_1Introduction.md) > > | **[GetCurrentIntroductionsWithFilter](Classes/structllarp_1_1path_1_1PathSet.md#function-getcurrentintroductionswithfilter)**(std::function< bool(const [service::Introduction](Classes/structllarp_1_1service_1_1Introduction.md) &)> filter) const |
| virtual bool | **[BuildOneAlignedTo](Classes/structllarp_1_1path_1_1PathSet.md#function-buildonealignedto)**(const [RouterID](Classes/structllarp_1_1RouterID.md) endpoint) =0 |
| virtual void | **[SendPacketToRemote](Classes/structllarp_1_1path_1_1PathSet.md#function-sendpackettoremote)**(const [llarp_buffer_t](Classes/structllarp__buffer__t.md) & pkt, service::ProtocolType t) =0 |
| void | **[ForEachPath](Classes/structllarp_1_1path_1_1PathSet.md#function-foreachpath)**(std::function< void(const Path_ptr &)> visit) const |
| void | **[UpstreamFlush](Classes/structllarp_1_1path_1_1PathSet.md#function-upstreamflush)**([AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * r) |
| void | **[DownstreamFlush](Classes/structllarp_1_1path_1_1PathSet.md#function-downstreamflush)**([AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * r) |

**Protected Functions inherited from [llarp::path::PathSet](Classes/structllarp_1_1path_1_1PathSet.md)**

|                | Name           |
| -------------- | -------------- |
| void | **[TickPaths](Classes/structllarp_1_1path_1_1PathSet.md#function-tickpaths)**([AbstractRouter](Classes/structllarp_1_1AbstractRouter.md) * r) |

**Public Attributes inherited from [llarp::path::PathSet](Classes/structllarp_1_1path_1_1PathSet.md)**

|                | Name           |
| -------------- | -------------- |
| constexpr size_t | **[max_paths](Classes/structllarp_1_1path_1_1PathSet.md#variable-max-paths)** <br>maximum number of paths a path set can maintain  |
| size_t | **[numDesiredPaths](Classes/structllarp_1_1path_1_1PathSet.md#variable-numdesiredpaths)**  |

**Protected Attributes inherited from [llarp::path::PathSet](Classes/structllarp_1_1path_1_1PathSet.md)**

|                | Name           |
| -------------- | -------------- |
| [BuildStats](Classes/structllarp_1_1path_1_1BuildStats.md) | **[m_BuildStats](Classes/structllarp_1_1path_1_1PathSet.md#variable-m-buildstats)**  |
| [Mtx_t](Classes/structllarp_1_1util_1_1NullMutex.md) | **[m_PathsMutex](Classes/structllarp_1_1path_1_1PathSet.md#variable-m-pathsmutex)**  |
| PathMap_t | **[m_Paths](Classes/structllarp_1_1path_1_1PathSet.md#variable-m-paths)**  |


## Public Types Documentation

### using PendingBufferQueue

```cpp
using llarp::service::Endpoint::PendingBufferQueue =  std::deque<PendingBuffer>;
```


### using PathEnsureHook

```cpp
using llarp::service::Endpoint::PathEnsureHook =  std::function<void(Address, OutboundContext*)>;
```


### using SNodeEnsureHook

```cpp
using llarp::service::Endpoint::SNodeEnsureHook =  std::function<void(const RouterID, exit::BaseSession_ptr, ConvoTag)>;
```


## Protected Types Documentation

### using ConvoMap

```cpp
using llarp::service::Endpoint::ConvoMap =  std::unordered_map<ConvoTag, Session>;
```


## Public Functions Documentation

### function Endpoint

```cpp
Endpoint(
    AbstractRouter * r,
    Context * parent
)
```


### function ~Endpoint

```cpp
~Endpoint() override
```


### function IsReady

```cpp
bool IsReady() const
```

return true if we are ready to recv packets from the void 

### function QueueRecvData

```cpp
virtual void QueueRecvData(
    RecvDataEvent ev
) override
```


**Reimplements**: [llarp::service::IDataHandler::QueueRecvData](Classes/structllarp_1_1service_1_1IDataHandler.md#function-queuerecvdata)


### function IntrosetIsStale

```cpp
bool IntrosetIsStale() const
```

return true if our introset has expired intros 

### function NotifyParams

```cpp
virtual std::unordered_map< std::string, std::string > NotifyParams() const
```

construct parameters for notify hooks 

**Reimplemented by**: [llarp::handlers::TunEndpoint::NotifyParams](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-notifyparams)


### function ExtractStatus

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


**Reimplemented by**: [llarp::handlers::TunEndpoint::ExtractStatus](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-extractstatus)


### function SetHandler

```cpp
void SetHandler(
    IDataHandler * h
)
```


### function Configure

```cpp
virtual bool Configure(
    const NetworkConfig & conf,
    const DnsConfig & dnsConf
)
```


**Reimplemented by**: [llarp::handlers::TunEndpoint::Configure](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-configure)


### function Tick

```cpp
virtual void Tick(
    llarp_time_t now
) override
```

tick owned paths 

**Reimplements**: [llarp::path::Builder::Tick](Classes/structllarp_1_1path_1_1Builder.md#function-tick)


### function HasIfAddr

```cpp
inline virtual bool HasIfAddr() const
```

return true if we have a resolvable ip address 

**Reimplemented by**: [llarp::handlers::TunEndpoint::HasIfAddr](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-hasifaddr)


### function GetIfName

```cpp
virtual std::string GetIfName() const =0
```


**Reimplemented by**: [llarp::handlers::NullEndpoint::GetIfName](Classes/structllarp_1_1handlers_1_1NullEndpoint.md#function-getifname), [llarp::handlers::TunEndpoint::GetIfName](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-getifname)


### function GetBestConvoTagFor

```cpp
std::optional< ConvoTag > GetBestConvoTagFor(
    std::variant< Address, RouterID > addr
) const override
```


### function GetIfAddr

```cpp
inline virtual huint128_t GetIfAddr() const
```

get our ifaddr if it is set 

**Reimplemented by**: [llarp::handlers::TunEndpoint::GetIfAddr](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-getifaddr)


### function GetExitPolicy

```cpp
inline virtual std::optional< net::TrafficPolicy > GetExitPolicy() const
```

get the exit policy for our exit if we have one override me 

**Reimplemented by**: [llarp::handlers::TunEndpoint::GetExitPolicy](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-getexitpolicy)


### function GetOwnedRanges

```cpp
inline virtual std::set< IPRange > GetOwnedRanges() const
```

get the ip ranges we claim to own override me 

**Reimplemented by**: [llarp::handlers::TunEndpoint::GetOwnedRanges](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-getownedranges)


### function Thaw

```cpp
inline virtual void Thaw()
```


**Reimplemented by**: [llarp::handlers::TunEndpoint::Thaw](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-thaw)


### function ResetInternalState

```cpp
virtual void ResetInternalState() override
```

reset all cooldown timers 

**Reimplements**: [llarp::path::Builder::ResetInternalState](Classes/structllarp_1_1path_1_1Builder.md#function-resetinternalstate)


### function Loop

```cpp
virtual const EventLoop_ptr & Loop() override
```

loop (via router) use when sending any data on a path 

**Reimplements**: [llarp::EndpointBase::Loop](Classes/classllarp_1_1EndpointBase.md#function-loop)


### function Router

```cpp
AbstractRouter * Router()
```


### function LoadKeyFile

```cpp
virtual bool LoadKeyFile()
```


### function Start

```cpp
virtual bool Start()
```


**Reimplemented by**: [llarp::handlers::TunEndpoint::Start](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-start)


### function Name

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

get the "name" of this pathset 

**Reimplements**: [llarp::path::PathSet::Name](Classes/structllarp_1_1path_1_1PathSet.md#function-name)


### function LocalAddress

```cpp
virtual AddressVariant_t LocalAddress() const override
```

get our local address 

**Reimplements**: [llarp::EndpointBase::LocalAddress](Classes/classllarp_1_1EndpointBase.md#function-localaddress)


### function GetStatFor

```cpp
virtual std::optional< SendStat > GetStatFor(
    AddressVariant_t remote
) const override
```

get statistics about how much traffic we sent and recv'd to a remote endpoint 

**Reimplements**: [llarp::EndpointBase::GetStatFor](Classes/classllarp_1_1EndpointBase.md#function-getstatfor)


### function AllRemoteEndpoints

```cpp
virtual std::unordered_set< AddressVariant_t > AllRemoteEndpoints() const override
```

list all remote endpoint addresses we have that are mapped 

**Reimplements**: [llarp::EndpointBase::AllRemoteEndpoints](Classes/classllarp_1_1EndpointBase.md#function-allremoteendpoints)


### function ShouldPublishDescriptors

```cpp
bool ShouldPublishDescriptors(
    llarp_time_t now
) const override
```


### function SRVRecordsChanged

```cpp
virtual void SRVRecordsChanged() override
```

called when srv data changes in some way 

**Reimplements**: [llarp::EndpointBase::SRVRecordsChanged](Classes/classllarp_1_1EndpointBase.md#function-srvrecordschanged)


### function HandlePathDied

```cpp
virtual void HandlePathDied(
    path::Path_ptr path
) override
```

a path died now what? 

**Reimplements**: [llarp::path::PathSet::HandlePathDied](Classes/structllarp_1_1path_1_1PathSet.md#function-handlepathdied)


### function EgresPacketRouter

```cpp
inline virtual vpn::EgresPacketRouter * EgresPacketRouter()
```


**Reimplemented by**: [llarp::handlers::NullEndpoint::EgresPacketRouter](Classes/structllarp_1_1handlers_1_1NullEndpoint.md#function-egrespacketrouter)


### function GetVPNInterface

```cpp
inline virtual vpn::NetworkInterface * GetVPNInterface()
```


**Reimplemented by**: [llarp::handlers::TunEndpoint::GetVPNInterface](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-getvpninterface)


### function PublishIntroSet

```cpp
virtual bool PublishIntroSet(
    const EncryptedIntroSet & i,
    AbstractRouter * r
) override
```


**Reimplements**: [llarp::path::PathSet::PublishIntroSet](Classes/structllarp_1_1path_1_1PathSet.md#function-publishintroset)


### function PublishIntroSetVia

```cpp
bool PublishIntroSetVia(
    const EncryptedIntroSet & i,
    AbstractRouter * r,
    path::Path_ptr p,
    uint64_t relayOrder
)
```


### function HandleGotIntroMessage

```cpp
virtual bool HandleGotIntroMessage(
    std::shared_ptr< const dht::GotIntroMessage > 
) override
```

override me in subtype 

**Reimplements**: [llarp::path::PathSet::HandleGotIntroMessage](Classes/structllarp_1_1path_1_1PathSet.md#function-handlegotintromessage)


### function HandleGotRouterMessage

```cpp
virtual bool HandleGotRouterMessage(
    std::shared_ptr< const dht::GotRouterMessage > 
) override
```

override me in subtype 

**Reimplements**: [llarp::path::PathSet::HandleGotRouterMessage](Classes/structllarp_1_1path_1_1PathSet.md#function-handlegotroutermessage)


### function HandleGotNameMessage

```cpp
virtual bool HandleGotNameMessage(
    std::shared_ptr< const dht::GotNameMessage > 
) override
```

override me in subtype 

**Reimplements**: [llarp::path::PathSet::HandleGotNameMessage](Classes/structllarp_1_1path_1_1PathSet.md#function-handlegotnamemessage)


### function HandleHiddenServiceFrame

```cpp
bool HandleHiddenServiceFrame(
    path::Path_ptr p,
    const service::ProtocolFrame & msg
)
```


### function SetEndpointAuth

```cpp
void SetEndpointAuth(
    std::shared_ptr< IAuthPolicy > policy
)
```


### function SetAuthInfoForEndpoint

```cpp
void SetAuthInfoForEndpoint(
    Address remote,
    AuthInfo info
)
```

sets how we authenticate with remote address 

### function ObtainIPForAddr

```cpp
virtual huint128_t ObtainIPForAddr(
    std::variant< Address, RouterID > 
) =0
```


### function ObtainAddrForIP

```cpp
virtual std::optional< std::variant< service::Address, RouterID > > ObtainAddrForIP(
    huint128_t ip
) const =0
```

get a key for ip address 

**Reimplemented by**: [llarp::handlers::TunEndpoint::ObtainAddrForIP](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-obtainaddrforip), [llarp::handlers::NullEndpoint::ObtainAddrForIP](Classes/structllarp_1_1handlers_1_1NullEndpoint.md#function-obtainaddrforip)


### function HasPendingPathToService

```cpp
bool HasPendingPathToService(
    const Address & remote
) const
```

return true if we have a pending job to build to a hidden service but it's not done yet 

### function HandleDataMessage

```cpp
virtual bool HandleDataMessage(
    path::Path_ptr path,
    const PathID_t from,
    std::shared_ptr< ProtocolMessage > msg
) override
```


**Reimplements**: [llarp::service::IDataHandler::HandleDataMessage](Classes/structllarp_1_1service_1_1IDataHandler.md#function-handledatamessage)


### function HandleInboundPacket

```cpp
virtual bool HandleInboundPacket(
    const ConvoTag tag,
    const llarp_buffer_t & pkt,
    ProtocolType t,
    uint64_t seqno
) =0
```

handle packet io from service node or hidden service to frontend 

**Reimplemented by**: [llarp::handlers::NullEndpoint::HandleInboundPacket](Classes/structllarp_1_1handlers_1_1NullEndpoint.md#function-handleinboundpacket), [llarp::handlers::TunEndpoint::HandleInboundPacket](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-handleinboundpacket)


### function ProcessDataMessage

```cpp
bool ProcessDataMessage(
    std::shared_ptr< ProtocolMessage > msg
)
```


### function EnsureRouterIsKnown

```cpp
void EnsureRouterIsKnown(
    const RouterID & router
)
```

ensure that we know a router, looks up if it doesn't 

### function LookupRouterAnon

```cpp
bool LookupRouterAnon(
    RouterID router,
    RouterLookupHandler handler
)
```

lookup a router via closest path 

### function LookupNameAsync

```cpp
void LookupNameAsync(
    std::string name,
    std::function< void(std::optional< std::variant< Address, RouterID >>)> resultHandler
) override
```


### function LookupServiceAsync

```cpp
virtual void LookupServiceAsync(
    std::string name,
    std::string service,
    std::function< void(std::vector< dns::SRVData >)> resultHandler
) override
```

lookup srv records async 

**Reimplements**: [llarp::EndpointBase::LookupServiceAsync](Classes/classllarp_1_1EndpointBase.md#function-lookupserviceasync)


### function Pump

```cpp
virtual void Pump(
    llarp_time_t now
)
```

called on event loop pump 

**Reimplemented by**: [llarp::handlers::TunEndpoint::Pump](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-pump)


### function Stop

```cpp
virtual bool Stop() override
```

stop this endpoint 

**Reimplements**: [llarp::path::Builder::Stop](Classes/structllarp_1_1path_1_1Builder.md#function-stop)


### function GetIdentity

```cpp
inline const Identity & GetIdentity() const
```


### function MapExitRange

```cpp
void MapExitRange(
    IPRange range,
    service::Address exit
)
```


### function UnmapExitRange

```cpp
void UnmapExitRange(
    IPRange range
)
```


### function PutLookup

```cpp
virtual void PutLookup(
    IServiceLookup * lookup,
    uint64_t txid
) override
```


**Reimplements**: [llarp::service::ILookupHolder::PutLookup](Classes/structllarp_1_1service_1_1ILookupHolder.md#function-putlookup)


### function HandlePathBuilt

```cpp
virtual void HandlePathBuilt(
    path::Path_ptr path
) override
```


**Reimplements**: [llarp::path::Builder::HandlePathBuilt](Classes/structllarp_1_1path_1_1Builder.md#function-handlepathbuilt)


### function HandleDataDrop

```cpp
bool HandleDataDrop(
    path::Path_ptr p,
    const PathID_t & dst,
    uint64_t s
)
```


### function CheckPathIsDead

```cpp
bool CheckPathIsDead(
    path::Path_ptr p,
    llarp_time_t latency
)
```


### function RemoveAllConvoTagsFor

```cpp
size_t RemoveAllConvoTagsFor(
    service::Address remote
)
```


### function WantsOutboundSession

```cpp
virtual bool WantsOutboundSession(
    const Address & addr
) const override
```

do we want a session outbound to addr 

**Reimplements**: [llarp::service::IDataHandler::WantsOutboundSession](Classes/structllarp_1_1service_1_1IDataHandler.md#function-wantsoutboundsession)


### function MarkAddressOutbound

```cpp
virtual void MarkAddressOutbound(
    AddressVariant_t 
) override
```

this MUST be called if you want to call EnsurePathTo on the given address 

**Reimplements**: [llarp::EndpointBase::MarkAddressOutbound](Classes/classllarp_1_1EndpointBase.md#function-markaddressoutbound)


### function ShouldBundleRC

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

should we bundle RCs in builds? 

**Reimplements**: [llarp::path::Builder::ShouldBundleRC](Classes/structllarp_1_1path_1_1Builder.md#function-shouldbundlerc)


### function BlacklistSNode

```cpp
virtual void BlacklistSNode(
    const RouterID snode
) override
```


**Reimplements**: [llarp::path::PathSet::BlacklistSNode](Classes/structllarp_1_1path_1_1PathSet.md#function-blacklistsnode)


### function GetEndpointWithConvoTag

```cpp
virtual std::optional< std::variant< Address, RouterID > > GetEndpointWithConvoTag(
    ConvoTag t
) const override
```

maybe get an endpoint variant given its convo tag 

**Reimplements**: [llarp::EndpointBase::GetEndpointWithConvoTag](Classes/classllarp_1_1EndpointBase.md#function-getendpointwithconvotag)


### function HasConvoTag

```cpp
virtual bool HasConvoTag(
    const ConvoTag & t
) const override
```


**Reimplements**: [llarp::service::IDataHandler::HasConvoTag](Classes/structllarp_1_1service_1_1IDataHandler.md#function-hasconvotag)


### function ShouldBuildMore

```cpp
virtual bool ShouldBuildMore(
    llarp_time_t now
) const override
```

return true if we should build another path 

**Reimplements**: [llarp::path::Builder::ShouldBuildMore](Classes/structllarp_1_1path_1_1Builder.md#function-shouldbuildmore)


### function PathAlignmentTimeout

```cpp
inline virtual llarp_time_t PathAlignmentTimeout() const
```


**Reimplemented by**: [llarp::handlers::TunEndpoint::PathAlignmentTimeout](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-pathalignmenttimeout)


### function EnsurePathTo

```cpp
bool EnsurePathTo(
    std::variant< Address, RouterID > addr,
    std::function< void(std::optional< ConvoTag >)> hook,
    llarp_time_t timeout
) override
```


### function EnsurePathToService

```cpp
bool EnsurePathToService(
    const Address remote,
    PathEnsureHook h,
    llarp_time_t timeoutMS =DefaultPathEnsureTimeout
)
```

return false if we have already called this function before for this address 

### function InformPathToService

```cpp
void InformPathToService(
    const Address remote,
    OutboundContext * ctx
)
```


### function EnsurePathToSNode

```cpp
bool EnsurePathToSNode(
    const RouterID remote,
    SNodeEnsureHook h
)
```

ensure a path to a service node by public key 

### function HasPendingRouterLookup

```cpp
bool HasPendingRouterLookup(
    const RouterID remote
) const
```

return true if this endpoint is trying to lookup this router right now 

### function HasPathToSNode

```cpp
bool HasPathToSNode(
    const RouterID remote
) const
```


### function HasFlowToService

```cpp
bool HasFlowToService(
    const Address remote
) const
```


### function PutSenderFor

```cpp
virtual void PutSenderFor(
    const ConvoTag & tag,
    const ServiceInfo & info,
    bool inbound
) override
```


**Reimplements**: [llarp::service::IDataHandler::PutSenderFor](Classes/structllarp_1_1service_1_1IDataHandler.md#function-putsenderfor)


### function HasInboundConvo

```cpp
virtual bool HasInboundConvo(
    const Address & addr
) const override
```


**Reimplements**: [llarp::service::IDataHandler::HasInboundConvo](Classes/structllarp_1_1service_1_1IDataHandler.md#function-hasinboundconvo)


### function HasOutboundConvo

```cpp
virtual bool HasOutboundConvo(
    const Address & addr
) const override
```


**Reimplements**: [llarp::service::IDataHandler::HasOutboundConvo](Classes/structllarp_1_1service_1_1IDataHandler.md#function-hasoutboundconvo)


### function GetCachedSessionKeyFor

```cpp
virtual bool GetCachedSessionKeyFor(
    const ConvoTag & remote,
    SharedSecret & secret
) const override
```


**Reimplements**: [llarp::service::IDataHandler::GetCachedSessionKeyFor](Classes/structllarp_1_1service_1_1IDataHandler.md#function-getcachedsessionkeyfor)


### function PutCachedSessionKeyFor

```cpp
virtual void PutCachedSessionKeyFor(
    const ConvoTag & remote,
    const SharedSecret & secret
) override
```


**Reimplements**: [llarp::service::IDataHandler::PutCachedSessionKeyFor](Classes/structllarp_1_1service_1_1IDataHandler.md#function-putcachedsessionkeyfor)


### function GetSenderFor

```cpp
virtual bool GetSenderFor(
    const ConvoTag & remote,
    ServiceInfo & si
) const override
```


**Reimplements**: [llarp::service::IDataHandler::GetSenderFor](Classes/structllarp_1_1service_1_1IDataHandler.md#function-getsenderfor)


### function PutIntroFor

```cpp
virtual void PutIntroFor(
    const ConvoTag & remote,
    const Introduction & intro
) override
```


**Reimplements**: [llarp::service::IDataHandler::PutIntroFor](Classes/structllarp_1_1service_1_1IDataHandler.md#function-putintrofor)


### function GetIntroFor

```cpp
virtual bool GetIntroFor(
    const ConvoTag & remote,
    Introduction & intro
) const override
```


**Reimplements**: [llarp::service::IDataHandler::GetIntroFor](Classes/structllarp_1_1service_1_1IDataHandler.md#function-getintrofor)


### function RemoveConvoTag

```cpp
virtual void RemoveConvoTag(
    const ConvoTag & remote
) override
```


**Reimplements**: [llarp::service::IDataHandler::RemoveConvoTag](Classes/structllarp_1_1service_1_1IDataHandler.md#function-removeconvotag)


### function ConvoTagTX

```cpp
virtual void ConvoTagTX(
    const ConvoTag & tag
) override
```

called when we send data to remote on a convotag 

**Reimplements**: [llarp::service::IDataHandler::ConvoTagTX](Classes/structllarp_1_1service_1_1IDataHandler.md#function-convotagtx)


### function ConvoTagRX

```cpp
virtual void ConvoTagRX(
    const ConvoTag & tag
) override
```

called when we got data from remote on a convotag 

**Reimplements**: [llarp::service::IDataHandler::ConvoTagRX](Classes/structllarp_1_1service_1_1IDataHandler.md#function-convotagrx)


### function PutReplyIntroFor

```cpp
virtual void PutReplyIntroFor(
    const ConvoTag & remote,
    const Introduction & intro
) override
```


**Reimplements**: [llarp::service::IDataHandler::PutReplyIntroFor](Classes/structllarp_1_1service_1_1IDataHandler.md#function-putreplyintrofor)


### function GetReplyIntroFor

```cpp
virtual bool GetReplyIntroFor(
    const ConvoTag & remote,
    Introduction & intro
) const override
```


**Reimplements**: [llarp::service::IDataHandler::GetReplyIntroFor](Classes/structllarp_1_1service_1_1IDataHandler.md#function-getreplyintrofor)


### function GetConvoTagsForService

```cpp
virtual bool GetConvoTagsForService(
    const Address & si,
    std::set< ConvoTag > & tag
) const override
```


**Reimplements**: [llarp::service::IDataHandler::GetConvoTagsForService](Classes/structllarp_1_1service_1_1IDataHandler.md#function-getconvotagsforservice)


### function PutNewOutboundContext

```cpp
void PutNewOutboundContext(
    const IntroSet & introset,
    llarp_time_t timeLeftToAlign
)
```


### function GetSeqNoForConvo

```cpp
std::optional< uint64_t > GetSeqNoForConvo(
    const ConvoTag & tag
)
```


### function UniqueEndpoints

```cpp
size_t UniqueEndpoints() const
```

count unique endpoints we are talking to 

### function HasExit

```cpp
bool HasExit() const
```


### function GetHopsForBuild

```cpp
virtual std::optional< std::vector< RouterContact > > GetHopsForBuild() override
```


**Reimplements**: [llarp::path::Builder::GetHopsForBuild](Classes/structllarp_1_1path_1_1Builder.md#function-gethopsforbuild)


### function GetHopsForBuildWithEndpoint

```cpp
std::optional< std::vector< RouterContact > > GetHopsForBuildWithEndpoint(
    RouterID endpoint
)
```


### function PathBuildStarted

```cpp
virtual void PathBuildStarted(
    path::Path_ptr path
) override
```


**Reimplements**: [llarp::path::PathSet::PathBuildStarted](Classes/structllarp_1_1path_1_1PathSet.md#function-pathbuildstarted)


### function IntroSetPublishFail

```cpp
virtual void IntroSetPublishFail()
```


### function IntroSetPublished

```cpp
virtual void IntroSetPublished()
```


### function AsyncProcessAuthMessage

```cpp
void AsyncProcessAuthMessage(
    std::shared_ptr< ProtocolMessage > msg,
    std::function< void(AuthResult)> hook
)
```


### function SendAuthResult

```cpp
void SendAuthResult(
    path::Path_ptr path,
    PathID_t replyPath,
    ConvoTag tag,
    AuthResult st
)
```


### function GenTXID

```cpp
uint64_t GenTXID()
```


### function ResetConvoTag

```cpp
void ResetConvoTag(
    ConvoTag tag,
    path::Path_ptr path,
    PathID_t from
)
```


### function SnodeBlacklist

```cpp
const std::set< RouterID > & SnodeBlacklist() const
```


### function SendToOrQueue

```cpp
virtual bool SendToOrQueue(
    ConvoTag tag,
    const llarp_buffer_t & payload,
    ProtocolType t
) override
```


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


### function SendToOrQueue

```cpp
bool SendToOrQueue(
    const std::variant< Address, RouterID > & addr,
    const llarp_buffer_t & payload,
    ProtocolType t
)
```


### function SendToOrQueue

```cpp
bool SendToOrQueue(
    const Address & addr,
    const llarp_buffer_t & payload,
    ProtocolType t
)
```


### function SendToOrQueue

```cpp
bool SendToOrQueue(
    const RouterID & addr,
    const llarp_buffer_t & payload,
    ProtocolType t
)
```


### function MaybeGetAuthInfoForEndpoint

```cpp
std::optional< AuthInfo > MaybeGetAuthInfoForEndpoint(
    service::Address addr
)
```


### function GetQUICTunnel

```cpp
virtual quic::TunnelManager * GetQUICTunnel() override
```

Returns a pointer to the quic::Tunnel object handling quic connections for this endpoint. 

**Reimplements**: [llarp::EndpointBase::GetQUICTunnel](Classes/classllarp_1_1EndpointBase.md#function-getquictunnel)


Returns nullptr if quic is not supported. 


## Protected Functions Documentation

### function SupportsV6

```cpp
virtual bool SupportsV6() const =0
```


**Reimplemented by**: [llarp::handlers::NullEndpoint::SupportsV6](Classes/structllarp_1_1handlers_1_1NullEndpoint.md#function-supportsv6), [llarp::handlers::TunEndpoint::SupportsV6](Classes/structllarp_1_1handlers_1_1TunEndpoint.md#function-supportsv6)


### function RegenAndPublishIntroSet

```cpp
void RegenAndPublishIntroSet()
```


### function GenerateLookupByTag

```cpp
IServiceLookup * GenerateLookupByTag(
    const Tag & tag
)
```


### function PrefetchServicesByTag

```cpp
void PrefetchServicesByTag(
    const Tag & tag
)
```


### function FlushRecvData

```cpp
void FlushRecvData()
```


### function introSet

```cpp
const IntroSet & introSet() const
```


### function introSet

```cpp
IntroSet & introSet()
```


### function Sessions

```cpp
const ConvoMap & Sessions() const
```


### function Sessions

```cpp
ConvoMap & Sessions()
```


## Public Attributes Documentation

### variable DefaultPathEnsureTimeout

```cpp
static constexpr auto DefaultPathEnsureTimeout = 2s;
```


### variable m_SendQueue

```cpp
SendMessageQueue_t m_SendQueue;
```


## Protected Attributes Documentation

### variable context

```cpp
Context *const context;
```

parent context that owns this endpoint 

### variable m_DataHandler

```cpp
IDataHandler * m_DataHandler = nullptr;
```


### variable m_Identity

```cpp
Identity m_Identity;
```


### variable m_ExitMap

```cpp
net::IPRangeMap< service::Address > m_ExitMap;
```


### variable m_PublishIntroSet

```cpp
bool m_PublishIntroSet = true;
```


### variable m_state

```cpp
std::unique_ptr< EndpointState > m_state;
```


### variable m_AuthPolicy

```cpp
std::shared_ptr< IAuthPolicy > m_AuthPolicy;
```


### variable m_RemoteAuthInfos

```cpp
std::unordered_map< Address, AuthInfo > m_RemoteAuthInfos;
```


### variable m_quic

```cpp
std::unique_ptr< quic::TunnelManager > m_quic;
```


### variable m_StartupLNSMappings

```cpp
std::unordered_map< std::string, std::pair< std::optional< IPRange >, std::optional< AuthInfo > > > m_StartupLNSMappings;
```

(lns name, optional exit range, optional auth info) for looking up on startup 

### variable m_InboundTrafficQueue

```cpp
RecvPacketQueue_t m_InboundTrafficQueue;
```


### variable m_RecvQueue

```cpp
thread::Queue< RecvDataEvent > m_RecvQueue;
```


### variable m_IntrosetLookupFilter

```cpp
util::DecayingHashSet< Address > m_IntrosetLookupFilter;
```

for rate limiting introset lookups 

## Friends

### friend EndpointUtil

```cpp
friend struct EndpointUtil(
    EndpointUtil 
);
```


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

Updated on 2022-10-26 at 17:18:04 +0000