llarp/link/session.hpp

Namespaces

Name
llarp
[crypto.hpp]

Classes

Name
struct llarp::SessionStats
struct llarp::ILinkSession

Source code

#pragma once

#include <llarp/crypto/types.hpp>
#include <llarp/net/net.hpp>
#include <llarp/ev/ev.hpp>
#include <llarp/router_contact.hpp>
#include <llarp/util/types.hpp>

#include <functional>

namespace llarp
{
  struct LinkIntroMessage;
  struct ILinkMessage;
  struct ILinkLayer;

  struct SessionStats
  {
    // rate
    uint64_t currentRateRX = 0;
    uint64_t currentRateTX = 0;

    uint64_t totalPacketsRX = 0;

    uint64_t totalAckedTX = 0;
    uint64_t totalDroppedTX = 0;
    uint64_t totalInFlightTX = 0;
  };

  struct ILinkSession
  {
    virtual ~ILinkSession() = default;

    enum class DeliveryStatus
    {
      eDeliverySuccess = 0,
      eDeliveryDropped = 1
    };

    virtual void
    OnLinkEstablished(ILinkLayer*){};

    virtual void
    Pump() = 0;

    virtual void Tick(llarp_time_t) = 0;

    using CompletionHandler = std::function<void(DeliveryStatus)>;

    using Packet_t = std::vector<byte_t>;
    using Message_t = std::vector<byte_t>;

    virtual bool
    SendMessageBuffer(Message_t, CompletionHandler handler, uint16_t priority) = 0;

    virtual void
    Start() = 0;

    virtual void
    Close() = 0;

    virtual bool
    Recv_LL(Packet_t)
    {
      return true;
    }

    virtual bool
    SendKeepAlive() = 0;

    virtual bool
    IsEstablished() const = 0;

    virtual bool
    TimedOut(llarp_time_t now) const = 0;

    virtual PubKey
    GetPubKey() const = 0;

    virtual bool
    IsInbound() const = 0;

    virtual const SockAddr&
    GetRemoteEndpoint() const = 0;

    // get remote rc
    virtual RouterContact
    GetRemoteRC() const = 0;

    bool
    IsRelay() const;

    std::function<bool(const LinkIntroMessage* msg)> GotLIM;

    virtual size_t
    SendQueueBacklog() const = 0;

    virtual ILinkLayer*
    GetLinkLayer() const = 0;

    virtual bool
    RenegotiateSession() = 0;

    virtual bool
    ShouldPing() const = 0;

    virtual SessionStats
    GetSessionStats() const = 0;

    virtual void
    HandlePlaintext() = 0;
  };
}  // namespace llarp

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