mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-11-03 23:15:52 +00:00
ccc7b5c9e9
loop->call(...) is similar to the old logic->Call(...), but is smart about the current thread: if called from within the event loop it simply runs the argument directly, otherwise it queues it. Similarly most of the other event loop calls are also now thread-aware: for example, `call_later(...)` can queue the job directly when called if in the event loop rather than having to double-queue through the even loop (once to call, then inside the call to initiate the time).
103 lines
2.4 KiB
C++
103 lines
2.4 KiB
C++
#ifndef LLARP_I_LINK_MANAGER_HPP
|
|
#define LLARP_I_LINK_MANAGER_HPP
|
|
|
|
#include <link/server.hpp>
|
|
#include <util/types.hpp>
|
|
#include <peerstats/peer_db.hpp>
|
|
|
|
#include <functional>
|
|
#include <optional>
|
|
|
|
struct llarp_buffer_t;
|
|
|
|
namespace llarp
|
|
{
|
|
struct RouterContact;
|
|
struct ILinkSession;
|
|
struct IOutboundSessionMaker;
|
|
struct RouterID;
|
|
|
|
struct ILinkManager
|
|
{
|
|
virtual ~ILinkManager() = default;
|
|
|
|
virtual LinkLayer_ptr
|
|
GetCompatibleLink(const RouterContact& rc) const = 0;
|
|
|
|
virtual IOutboundSessionMaker*
|
|
GetSessionMaker() const = 0;
|
|
|
|
virtual bool
|
|
SendTo(
|
|
const RouterID& remote,
|
|
const llarp_buffer_t& buf,
|
|
ILinkSession::CompletionHandler completed) = 0;
|
|
|
|
virtual bool
|
|
HasSessionTo(const RouterID& remote) const = 0;
|
|
|
|
/// return true if the session with this pubkey is a client
|
|
/// return false if the session with this pubkey is a router
|
|
/// return std::nullopt we have no session with this pubkey
|
|
virtual std::optional<bool>
|
|
SessionIsClient(RouterID remote) const = 0;
|
|
|
|
virtual void
|
|
PumpLinks() = 0;
|
|
|
|
virtual void
|
|
AddLink(LinkLayer_ptr link, bool inbound = false) = 0;
|
|
|
|
virtual bool
|
|
StartLinks(const EventLoop_ptr& loop) = 0;
|
|
|
|
virtual void
|
|
Stop() = 0;
|
|
|
|
virtual void
|
|
PersistSessionUntil(const RouterID& remote, llarp_time_t until) = 0;
|
|
|
|
virtual void
|
|
ForEachPeer(
|
|
std::function<void(const ILinkSession*, bool)> visit, bool randomize = false) const = 0;
|
|
|
|
virtual void
|
|
ForEachPeer(std::function<void(ILinkSession*)> visit) = 0;
|
|
|
|
virtual void
|
|
ForEachInboundLink(std::function<void(LinkLayer_ptr)> visit) const = 0;
|
|
|
|
virtual void
|
|
ForEachOutboundLink(std::function<void(LinkLayer_ptr)> visit) const = 0;
|
|
|
|
/// close all connections to this peer
|
|
/// remove all link layer commits
|
|
virtual void
|
|
DeregisterPeer(RouterID remote) = 0;
|
|
|
|
virtual size_t
|
|
NumberOfConnectedRouters() const = 0;
|
|
|
|
virtual size_t
|
|
NumberOfConnectedClients() const = 0;
|
|
|
|
virtual size_t
|
|
NumberOfPendingConnections() const = 0;
|
|
|
|
virtual bool
|
|
GetRandomConnectedRouter(RouterContact& router) const = 0;
|
|
|
|
virtual void
|
|
CheckPersistingSessions(llarp_time_t now) = 0;
|
|
|
|
virtual void
|
|
updatePeerDb(std::shared_ptr<PeerDb> peerDb) = 0;
|
|
|
|
virtual util::StatusObject
|
|
ExtractStatus() const = 0;
|
|
};
|
|
|
|
} // namespace llarp
|
|
|
|
#endif // LLARP_I_LINK_MANAGER_HPP
|