llarp/ev/tcp_handle.hpp
Namespaces
| Name |
|---|
| llarp [crypto.hpp] |
Classes
| Name | |
|---|---|
| class | llarp::TCPConnection |
| class | llarp::TCPConnectionPool |
| class | llarp::TCPAcceptor |
Source code
#pragma once
#include <functional>
#include <llarp/net/sock_addr.hpp>
#include <llarp/util/buffer.hpp>
namespace llarp
{
class TCPConnectionPool;
class TCPAcceptor;
class TCPConnection : public std::enable_shared_from_this<TCPConnection>
{
public:
using RecvHandler = std::function<void(std::optional<OwnedBuffer>, std::error_code)>;
using SendCompletionHandler = std::function<void(std::error_code)>;
virtual ~TCPConnection() = default;
virtual void
Send(OwnedBuffer buffer, SendCompletionHandler completionHandler = nullptr) = 0;
virtual void
Close() = 0;
virtual SockAddr
LocalAddr() const = 0;
virtual SockAddr
RemoteAddr() const = 0;
virtual int
Bind(SockAddr laddr) = 0;
virtual bool
Start() = 0;
void
SetRecvHandler(RecvHandler h);
protected:
RecvHandler m_RecvHandler;
TCPConnectionPool& m_Pool;
TCPConnection(RecvHandler recvHandler, TCPConnectionPool& pool);
// untrack from connection pool.
void
Untrack();
};
class TCPConnectionPool
{
public:
friend class TCPConnection;
friend class TCPAcceptor;
virtual ~TCPConnectionPool() = default;
using CompletionHandler = std::function<void(std::shared_ptr<TCPConnection>, std::error_code)>;
virtual void
Connect(
SockAddr remote_addr,
CompletionHandler completion_hander,
TCPConnection::RecvHandler recv_handler,
std::optional<SockAddr> local_addr = std::nullopt) = 0;
using AcceptHandler = std::function<void(std::shared_ptr<TCPConnection>, std::error_code)>;
virtual std::shared_ptr<TCPAcceptor>
CreateAcceptor(AcceptHandler accept_handler) = 0;
virtual void
CloseAll() = 0;
protected:
// maps local addr to connection
std::unordered_map<SockAddr, std::shared_ptr<TCPConnection>> m_Connections;
virtual std::shared_ptr<TCPConnection>
MakeConnection(std::optional<SockAddr> local_addr, TCPConnection::RecvHandler recv_handler) = 0;
void
RemoveConn(std::shared_ptr<TCPConnection> conn);
void
RemoveConn(std::shared_ptr<TCPAcceptor> acceptor);
};
class TCPAcceptor : public std::enable_shared_from_this<TCPAcceptor>
{
public:
using AcceptHandler = TCPConnectionPool::AcceptHandler;
virtual ~TCPAcceptor() = default;
virtual bool
Bind(SockAddr addr) = 0;
virtual std::optional<SockAddr>
LocalAddr() const = 0;
virtual void
Close() = 0;
protected:
AcceptHandler m_AcceptHandler;
TCPConnectionPool& m_Pool;
TCPAcceptor(AcceptHandler handler, TCPConnectionPool& pool);
std::shared_ptr<TCPConnection>
MakeConn();
void
Untrack();
};
} // namespace llarp
Updated on 2026-04-01 at 23:35:40 +0000