llarp::path::Path

A path we made.

#include <path.hpp>

Inherits from llarp::path::IHopHandler, llarp::routing::IMessageHandler, std::enable_shared_from_this< Path >

Public Classes

Name
struct Endpoint_Equals
comparision for equal endpoints
struct Endpoint_Hash
hash for std::shared_ptr by path endpoint
struct Hash
struct Ptr_Hash
hash for std::shared_ptr

Public Types

Name
using std::function< void(Path_ptr)> BuildResultHookFunc
using std::function< bool(Path_ptr, llarp_time_t)> CheckForDeadFunc
using std::function< bool(Path_ptr, const PathID_t &, uint64_t)> DropHandlerFunc
using std::vector< PathHopConfig > HopList
using std::function< bool(Path_ptr, const service::ProtocolFrame &)> DataHandlerFunc
using std::function< bool(Path_ptr)> ExitUpdatedFunc
using std::function< bool(Path_ptr)> ExitClosedFunc
using std::function< bool(Path_ptr, const llarp_buffer_t &, uint64_t, service::ProtocolType)> ExitTrafficHandlerFunc
using std::function< bool(Path_ptr, llarp_time_t)> ObtainedExitHandler
(path, backoff) backoff is 0 on success
using std::unordered_set< Path_ptr, Endpoint_Hash, Endpoint_Equals > UniqueEndpointSet_t
unordered set of paths with unique endpoints

Public Functions

Name
Path(const std::vector< RouterContact > & routers, std::weak_ptr< PathSet > parent, PathRole startingRoles, std::string shortName)
PathRole Role() const
bool operator<(const Path & other) const
void MarkActive(llarp_time_t now)
bool SupportsAllRoles(PathRole roles) const
return true if ALL of the specified roles are supported
bool SupportsAnyRoles(PathRole roles) const
return true if ANY of the specified roles are supported
void ClearRoles(PathRole roles)
clear role bits
PathStatus Status() const
virtual bool HandleUpstream(const llarp_buffer_t & X, const TunnelNonce & Y, AbstractRouter * ) override
virtual bool HandleDownstream(const llarp_buffer_t & X, const TunnelNonce & Y, AbstractRouter * ) override
const std::string & ShortName() const
std::string HopsString() const
virtual llarp_time_t LastRemoteActivityAt() const override
return timestamp last remote activity happened at
virtual bool HandleLRSM(uint64_t status, std::array< EncryptedFrame, 8 > & frames, AbstractRouter * r) override
void SetBuildResultHook(BuildResultHookFunc func)
void SetExitTrafficHandler(ExitTrafficHandlerFunc handler)
void SetCloseExitFunc(ExitClosedFunc handler)
void SetUpdateExitFunc(ExitUpdatedFunc handler)
void SetDataHandler(DataHandlerFunc func)
void SetDropHandler(DropHandlerFunc func)
void SetDeadChecker(CheckForDeadFunc func)
void EnterState(PathStatus st, llarp_time_t now)
llarp_time_t ExpireTime() const
virtual bool ExpiresSoon(llarp_time_t now, llarp_time_t dlt =5s) const override
virtual bool Expired(llarp_time_t now) const override
void Rebuild()
build a new path on the same set of hops as us regenerates keys
void Tick(llarp_time_t now, AbstractRouter * r)
virtual bool SendRoutingMessage(const routing::IMessage & msg, AbstractRouter * r) override
send routing message and increment sequence number
virtual bool HandleObtainExitMessage(const routing::ObtainExitMessage & msg, AbstractRouter * r) override
virtual bool HandleUpdateExitVerifyMessage(const routing::UpdateExitVerifyMessage & msg, AbstractRouter * r) override
virtual bool HandleTransferTrafficMessage(const routing::TransferTrafficMessage & msg, AbstractRouter * r) override
virtual bool HandleUpdateExitMessage(const routing::UpdateExitMessage & msg, AbstractRouter * r) override
virtual bool HandleCloseExitMessage(const routing::CloseExitMessage & msg, AbstractRouter * r) override
virtual bool HandleGrantExitMessage(const routing::GrantExitMessage & msg, AbstractRouter * r) override
virtual bool HandleRejectExitMessage(const routing::RejectExitMessage & msg, AbstractRouter * r) override
virtual bool HandleDataDiscardMessage(const routing::DataDiscardMessage & msg, AbstractRouter * r) override
bool HandlePathConfirmMessage(AbstractRouter * r)
virtual bool HandlePathConfirmMessage(const routing::PathConfirmMessage & msg, AbstractRouter * r) override
virtual bool HandlePathLatencyMessage(const routing::PathLatencyMessage & msg, AbstractRouter * r) override
virtual bool HandlePathTransferMessage(const routing::PathTransferMessage & msg, AbstractRouter * r) override
virtual bool HandleHiddenServiceFrame(const service::ProtocolFrame & frame) override
bool HandleGotIntroMessage(const dht::GotIntroMessage & msg)
virtual bool HandleDHTMessage(const dht::IMessage & msg, AbstractRouter * r) override
bool HandleRoutingMessage(const llarp_buffer_t & buf, AbstractRouter * r)
bool IsReady() const
PathID_t TXID() const
RouterID Endpoint() const
PubKey EndpointPubKey() const
bool IsEndpoint(const RouterID & router, const PathID_t & path) const
virtual PathID_t RXID() const override
RouterID Upstream() const
std::string Name() const
void AddObtainExitHandler(ObtainedExitHandler handler)
bool SendExitRequest(const routing::ObtainExitMessage & msg, AbstractRouter * r)
bool SendExitClose(const routing::CloseExitMessage & msg, AbstractRouter * r)
virtual void FlushUpstream(AbstractRouter * r) override
virtual void FlushDownstream(AbstractRouter * r) override

Protected Functions

Name
virtual void UpstreamWork(TrafficQueue_t queue, AbstractRouter * r) override
virtual void DownstreamWork(TrafficQueue_t queue, AbstractRouter * r) override
virtual void HandleAllUpstream(std::vector< RelayUpstreamMessage > msgs, AbstractRouter * r) override
virtual void HandleAllDownstream(std::vector< RelayDownstreamMessage > msgs, AbstractRouter * r) override

Public Attributes

Name
HopList hops
std::weak_ptr< PathSet > m_PathSet
service::Introduction intro
llarp_time_t buildStarted

Additional inherited members

Public Types inherited from llarp::path::IHopHandler

Name
using std::pair< std::vector< byte_t >, TunnelNonce > TrafficEvent_t
using std::list< TrafficEvent_t > TrafficQueue_t

Public Functions inherited from llarp::path::IHopHandler

Name
virtual ~IHopHandler() =default
void DecayFilters(llarp_time_t now)
uint64_t NextSeqNo()

Protected Attributes inherited from llarp::path::IHopHandler

Name
uint64_t m_SequenceNum
TrafficQueue_t m_UpstreamQueue
TrafficQueue_t m_DownstreamQueue
util::DecayingHashSet< TunnelNonce > m_UpstreamReplayFilter
util::DecayingHashSet< TunnelNonce > m_DownstreamReplayFilter

Public Types Documentation

using BuildResultHookFunc

using llarp::path::Path::BuildResultHookFunc =  std::function<void(Path_ptr)>;

using CheckForDeadFunc

using llarp::path::Path::CheckForDeadFunc =  std::function<bool(Path_ptr, llarp_time_t)>;

using DropHandlerFunc

using llarp::path::Path::DropHandlerFunc =  std::function<bool(Path_ptr, const PathID_t&, uint64_t)>;

using HopList

using llarp::path::Path::HopList =  std::vector<PathHopConfig>;

using DataHandlerFunc

using llarp::path::Path::DataHandlerFunc =  std::function<bool(Path_ptr, const service::ProtocolFrame&)>;

using ExitUpdatedFunc

using llarp::path::Path::ExitUpdatedFunc =  std::function<bool(Path_ptr)>;

using ExitClosedFunc

using llarp::path::Path::ExitClosedFunc =  std::function<bool(Path_ptr)>;

using ExitTrafficHandlerFunc

using llarp::path::Path::ExitTrafficHandlerFunc =  std::function<bool(Path_ptr, const llarp_buffer_t&, uint64_t, service::ProtocolType)>;

using ObtainedExitHandler

using llarp::path::Path::ObtainedExitHandler =  std::function<bool(Path_ptr, llarp_time_t)>;

(path, backoff) backoff is 0 on success

using UniqueEndpointSet_t

using llarp::path::Path::UniqueEndpointSet_t =  std::unordered_set<Path_ptr, Endpoint_Hash, Endpoint_Equals>;

unordered set of paths with unique endpoints

Public Functions Documentation

function Path

Path(
    const std::vector< RouterContact > & routers,
    std::weak_ptr< PathSet > parent,
    PathRole startingRoles,
    std::string shortName
)

function Role

inline PathRole Role() const

function operator<

inline bool operator<(
    const Path & other
) const

function MarkActive

inline void MarkActive(
    llarp_time_t now
)

function SupportsAllRoles

inline bool SupportsAllRoles(
    PathRole roles
) const

return true if ALL of the specified roles are supported

function SupportsAnyRoles

inline bool SupportsAnyRoles(
    PathRole roles
) const

return true if ANY of the specified roles are supported

function ClearRoles

inline void ClearRoles(
    PathRole roles
)

clear role bits

function Status

inline PathStatus Status() const

function HandleUpstream

virtual bool HandleUpstream(
    const llarp_buffer_t & X,
    const TunnelNonce & Y,
    AbstractRouter * 
) override

Reimplements: llarp::path::IHopHandler::HandleUpstream

function HandleDownstream

virtual bool HandleDownstream(
    const llarp_buffer_t & X,
    const TunnelNonce & Y,
    AbstractRouter * 
) override

Reimplements: llarp::path::IHopHandler::HandleDownstream

function ShortName

const std::string & ShortName() const

function HopsString

std::string HopsString() const

function LastRemoteActivityAt

inline virtual llarp_time_t LastRemoteActivityAt() const override

return timestamp last remote activity happened at

Reimplements: llarp::path::IHopHandler::LastRemoteActivityAt

function HandleLRSM

virtual bool HandleLRSM(
    uint64_t status,
    std::array< EncryptedFrame, 8 > & frames,
    AbstractRouter * r
) override

Reimplements: llarp::path::IHopHandler::HandleLRSM

function SetBuildResultHook

void SetBuildResultHook(
    BuildResultHookFunc func
)

function SetExitTrafficHandler

inline void SetExitTrafficHandler(
    ExitTrafficHandlerFunc handler
)

function SetCloseExitFunc

inline void SetCloseExitFunc(
    ExitClosedFunc handler
)

function SetUpdateExitFunc

inline void SetUpdateExitFunc(
    ExitUpdatedFunc handler
)

function SetDataHandler

inline void SetDataHandler(
    DataHandlerFunc func
)

function SetDropHandler

inline void SetDropHandler(
    DropHandlerFunc func
)

function SetDeadChecker

inline void SetDeadChecker(
    CheckForDeadFunc func
)

function EnterState

void EnterState(
    PathStatus st,
    llarp_time_t now
)

function ExpireTime

inline llarp_time_t ExpireTime() const

function ExpiresSoon

inline virtual bool ExpiresSoon(
    llarp_time_t now,
    llarp_time_t dlt =5s
) const override

Reimplements: llarp::path::IHopHandler::ExpiresSoon

function Expired

virtual bool Expired(
    llarp_time_t now
) const override

Reimplements: llarp::path::IHopHandler::Expired

function Rebuild

void Rebuild()

build a new path on the same set of hops as us regenerates keys

function Tick

void Tick(
    llarp_time_t now,
    AbstractRouter * r
)

function SendRoutingMessage

virtual bool SendRoutingMessage(
    const routing::IMessage & msg,
    AbstractRouter * r
) override

send routing message and increment sequence number

Reimplements: llarp::path::IHopHandler::SendRoutingMessage

function HandleObtainExitMessage

virtual bool HandleObtainExitMessage(
    const routing::ObtainExitMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleObtainExitMessage

function HandleUpdateExitVerifyMessage

virtual bool HandleUpdateExitVerifyMessage(
    const routing::UpdateExitVerifyMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleUpdateExitVerifyMessage

function HandleTransferTrafficMessage

virtual bool HandleTransferTrafficMessage(
    const routing::TransferTrafficMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleTransferTrafficMessage

function HandleUpdateExitMessage

virtual bool HandleUpdateExitMessage(
    const routing::UpdateExitMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleUpdateExitMessage

function HandleCloseExitMessage

virtual bool HandleCloseExitMessage(
    const routing::CloseExitMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleCloseExitMessage

function HandleGrantExitMessage

virtual bool HandleGrantExitMessage(
    const routing::GrantExitMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleGrantExitMessage

function HandleRejectExitMessage

virtual bool HandleRejectExitMessage(
    const routing::RejectExitMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleRejectExitMessage

function HandleDataDiscardMessage

virtual bool HandleDataDiscardMessage(
    const routing::DataDiscardMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleDataDiscardMessage

function HandlePathConfirmMessage

bool HandlePathConfirmMessage(
    AbstractRouter * r
)

function HandlePathConfirmMessage

virtual bool HandlePathConfirmMessage(
    const routing::PathConfirmMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandlePathConfirmMessage

function HandlePathLatencyMessage

virtual bool HandlePathLatencyMessage(
    const routing::PathLatencyMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandlePathLatencyMessage

function HandlePathTransferMessage

virtual bool HandlePathTransferMessage(
    const routing::PathTransferMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandlePathTransferMessage

function HandleHiddenServiceFrame

virtual bool HandleHiddenServiceFrame(
    const service::ProtocolFrame & frame
) override

Reimplements: llarp::routing::IMessageHandler::HandleHiddenServiceFrame

function HandleGotIntroMessage

bool HandleGotIntroMessage(
    const dht::GotIntroMessage & msg
)

function HandleDHTMessage

virtual bool HandleDHTMessage(
    const dht::IMessage & msg,
    AbstractRouter * r
) override

Reimplements: llarp::routing::IMessageHandler::HandleDHTMessage

function HandleRoutingMessage

bool HandleRoutingMessage(
    const llarp_buffer_t & buf,
    AbstractRouter * r
)

function IsReady

bool IsReady() const

function TXID

PathID_t TXID() const

function Endpoint

RouterID Endpoint() const

function EndpointPubKey

PubKey EndpointPubKey() const

function IsEndpoint

bool IsEndpoint(
    const RouterID & router,
    const PathID_t & path
) const

function RXID

virtual PathID_t RXID() const override

Reimplements: llarp::path::IHopHandler::RXID

function Upstream

RouterID Upstream() const

function Name

std::string Name() const

function AddObtainExitHandler

inline void AddObtainExitHandler(
    ObtainedExitHandler handler
)

function SendExitRequest

bool SendExitRequest(
    const routing::ObtainExitMessage & msg,
    AbstractRouter * r
)

function SendExitClose

bool SendExitClose(
    const routing::CloseExitMessage & msg,
    AbstractRouter * r
)

function FlushUpstream

virtual void FlushUpstream(
    AbstractRouter * r
) override

Reimplements: llarp::path::IHopHandler::FlushUpstream

function FlushDownstream

virtual void FlushDownstream(
    AbstractRouter * r
) override

Reimplements: llarp::path::IHopHandler::FlushDownstream

Protected Functions Documentation

function UpstreamWork

virtual void UpstreamWork(
    TrafficQueue_t queue,
    AbstractRouter * r
) override

Reimplements: llarp::path::IHopHandler::UpstreamWork

function DownstreamWork

virtual void DownstreamWork(
    TrafficQueue_t queue,
    AbstractRouter * r
) override

Reimplements: llarp::path::IHopHandler::DownstreamWork

function HandleAllUpstream

virtual void HandleAllUpstream(
    std::vector< RelayUpstreamMessage > msgs,
    AbstractRouter * r
) override

Reimplements: llarp::path::IHopHandler::HandleAllUpstream

function HandleAllDownstream

virtual void HandleAllDownstream(
    std::vector< RelayDownstreamMessage > msgs,
    AbstractRouter * r
) override

Reimplements: llarp::path::IHopHandler::HandleAllDownstream

Public Attributes Documentation

variable hops

HopList hops;

variable m_PathSet

std::weak_ptr< PathSet > m_PathSet;

variable intro

service::Introduction intro;

variable buildStarted

llarp_time_t buildStarted = 0s;

Updated on 2026-01-10 at 22:49:45 +0000