11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
20PROMEKI_NAMESPACE_BEGIN
61class LoopbackTransport :
public PacketTransport {
67 ~LoopbackTransport()
override;
79 static void pair(LoopbackTransport *a, LoopbackTransport *b);
82 Error open()
override;
85 void close()
override;
88 bool isOpen()
const override {
return _open; }
91 ssize_t sendPacket(
const void *data,
size_t size,
const SocketAddress &dest)
override;
94 int sendPackets(
const DatagramList &datagrams)
override;
97 ssize_t receivePacket(
void *data,
size_t maxSize, SocketAddress *sender =
nullptr)
override;
100 Error setPacingRate(uint64_t bytesPerSec)
override;
103 Error setTxTime(
bool enable)
override;
106 size_t pendingPackets()
const {
107 Mutex::Locker locker(_queueMutex);
108 return _recvQueue.size();
115 SocketAddress sender;
119 void deliver(
const void *data,
size_t size,
const SocketAddress &sender);
121 LoopbackTransport *_peer =
nullptr;
122 mutable Mutex _queueMutex;
123 List<QueueEntry> _recvQueue;