libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
loopbacktransport.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <promeki/namespace.h>
15#include <promeki/buffer.h>
16#include <promeki/list.h>
17#include <promeki/mutex.h>
18#include <promeki/pair.h>
19
20PROMEKI_NAMESPACE_BEGIN
21
61class LoopbackTransport : public PacketTransport {
62 public:
64 LoopbackTransport();
65
67 ~LoopbackTransport() override;
68
79 static void pair(LoopbackTransport *a, LoopbackTransport *b);
80
82 Error open() override;
83
85 void close() override;
86
88 bool isOpen() const override { return _open; }
89
91 ssize_t sendPacket(const void *data, size_t size, const SocketAddress &dest) override;
92
94 int sendPackets(const DatagramList &datagrams) override;
95
97 ssize_t receivePacket(void *data, size_t maxSize, SocketAddress *sender = nullptr) override;
98
100 Error setPacingRate(uint64_t bytesPerSec) override;
101
103 Error setTxTime(bool enable) override;
104
106 size_t pendingPackets() const {
107 Mutex::Locker locker(_queueMutex);
108 return _recvQueue.size();
109 }
110
111 private:
113 struct QueueEntry {
114 Buffer data;
115 SocketAddress sender;
116 };
117
119 void deliver(const void *data, size_t size, const SocketAddress &sender);
120
121 LoopbackTransport *_peer = nullptr;
122 mutable Mutex _queueMutex;
123 List<QueueEntry> _recvQueue;
124 bool _open = false;
125};
126
127PROMEKI_NAMESPACE_END
128
129#endif // PROMEKI_ENABLE_NETWORK