libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
udpsockettransport.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>
16#include <promeki/string.h>
17#include <promeki/udpsocket.h>
18
19PROMEKI_NAMESPACE_BEGIN
20
60class UdpSocketTransport : public PacketTransport {
61 public:
63 using UPtr = UniquePtr<UdpSocketTransport>;
64
66 UdpSocketTransport();
67
69 ~UdpSocketTransport() override;
70
80 void setLocalAddress(const SocketAddress &addr) { _localAddress = addr; }
81
83 const SocketAddress &localAddress() const { return _localAddress; }
84
89 void setIpv6(bool enable) { _ipv6 = enable; }
90
92 bool isIpv6() const { return _ipv6; }
93
98 void setDscp(uint8_t dscp) { _dscp = dscp; }
99
101 uint8_t dscp() const { return _dscp; }
102
107 void setMulticastTTL(int ttl) { _multicastTTL = ttl; }
108
110 int multicastTTL() const { return _multicastTTL; }
111
116 void setMulticastInterface(const String &iface) { _multicastInterface = iface; }
117
119 const String &multicastInterface() const { return _multicastInterface; }
120
132 void setBindInterface(const String &iface) { _bindInterface = iface; }
133
135 const String &bindInterface() const { return _bindInterface; }
136
146 void setMulticastLoopback(bool enable) { _multicastLoopback = enable; }
147
149 bool multicastLoopback() const { return _multicastLoopback; }
150
155 void setReuseAddress(bool enable) { _reuseAddress = enable; }
156
158 bool reuseAddress() const { return _reuseAddress; }
159
173 void setDontFragment(bool enable) { _dontFragment = enable; }
174
176 bool dontFragment() const { return _dontFragment; }
177
186 void setReceiveBufferSize(int bytes) { _recvBufferSize = bytes; }
187
189 int receiveBufferSize() const { return _recvBufferSize; }
190
199 void setSendBufferSize(int bytes) { _sendBufferSize = bytes; }
200
202 int sendBufferSize() const { return _sendBufferSize; }
203
215 UdpSocket *socket() const { return _socket.get(); }
216
218 Error open() override;
219
221 void close() override;
222
224 bool isOpen() const override;
225
227 ssize_t sendPacket(const void *data, size_t size, const SocketAddress &dest) override;
228
230 int sendPackets(const DatagramList &datagrams) override;
231
233 ssize_t receivePacket(void *data, size_t maxSize, SocketAddress *sender = nullptr) override;
234
236 Error setPacingRate(uint64_t bytesPerSec) override;
237
239 Error setTxTime(bool enable) override;
240
241 private:
242 UdpSocket::UPtr _socket;
243 SocketAddress _localAddress;
244 String _multicastInterface;
245 String _bindInterface;
246 int _recvBufferSize = 0;
247 int _sendBufferSize = 0;
248 uint8_t _dscp = 0;
249 int _multicastTTL = 0;
250 bool _ipv6 = false;
251 bool _reuseAddress = false;
252 bool _multicastLoopback = false;
253 bool _dontFragment = false;
254};
255
256PROMEKI_NAMESPACE_END
257
258#endif // PROMEKI_ENABLE_NETWORK