11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
21PROMEKI_NAMESPACE_BEGIN
68class PacketTransport {
71 using UPtr = UniquePtr<PacketTransport>;
83 const void *data =
nullptr;
96 uint64_t txTimeNs = 0;
100 using DatagramList = ::promeki::List<Datagram>;
103 virtual ~PacketTransport() =
default;
109 virtual Error open() = 0;
112 virtual void close() = 0;
115 virtual bool isOpen()
const = 0;
124 virtual ssize_t sendPacket(
const void *data,
size_t size,
const SocketAddress &dest) = 0;
140 virtual int sendPackets(
const DatagramList &datagrams) = 0;
151 virtual ssize_t receivePacket(
void *data,
size_t maxSize, SocketAddress *sender =
nullptr) = 0;
166 virtual Error setPacingRate(uint64_t bytesPerSec);
180 virtual Error setTxTime(
bool enable);
184 PacketTransport() =
default;
186 PacketTransport(
const PacketTransport &) =
delete;
187 PacketTransport &operator=(
const PacketTransport &) =
delete;
188 PacketTransport(PacketTransport &&) =
delete;
189 PacketTransport &operator=(PacketTransport &&) =
delete;