libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
packettransport.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 <cstdint>
14#include <cstddef>
15#include <promeki/namespace.h>
16#include <promeki/error.h>
17#include <promeki/list.h>
19#include <promeki/uniqueptr.h>
20
21PROMEKI_NAMESPACE_BEGIN
22
68class PacketTransport {
69 public:
71 using UPtr = UniquePtr<PacketTransport>;
72
81 struct Datagram {
83 const void *data = nullptr;
85 size_t size = 0;
87 SocketAddress dest;
96 uint64_t txTimeNs = 0;
97 };
98
100 using DatagramList = ::promeki::List<Datagram>;
101
103 virtual ~PacketTransport() = default;
104
109 virtual Error open() = 0;
110
112 virtual void close() = 0;
113
115 virtual bool isOpen() const = 0;
116
124 virtual ssize_t sendPacket(const void *data, size_t size, const SocketAddress &dest) = 0;
125
140 virtual int sendPackets(const DatagramList &datagrams) = 0;
141
151 virtual ssize_t receivePacket(void *data, size_t maxSize, SocketAddress *sender = nullptr) = 0;
152
166 virtual Error setPacingRate(uint64_t bytesPerSec);
167
180 virtual Error setTxTime(bool enable);
181
182 protected:
184 PacketTransport() = default;
185
186 PacketTransport(const PacketTransport &) = delete;
187 PacketTransport &operator=(const PacketTransport &) = delete;
188 PacketTransport(PacketTransport &&) = delete;
189 PacketTransport &operator=(PacketTransport &&) = delete;
190};
191
192PROMEKI_NAMESPACE_END
193
194#endif // PROMEKI_ENABLE_NETWORK