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
130 void setMulticastLoopback(bool enable) { _multicastLoopback = enable; }
131
133 bool multicastLoopback() const { return _multicastLoopback; }
134
139 void setReuseAddress(bool enable) { _reuseAddress = enable; }
140
142 bool reuseAddress() const { return _reuseAddress; }
143
152 void setReceiveBufferSize(int bytes) { _recvBufferSize = bytes; }
153
155 int receiveBufferSize() const { return _recvBufferSize; }
156
165 void setSendBufferSize(int bytes) { _sendBufferSize = bytes; }
166
168 int sendBufferSize() const { return _sendBufferSize; }
169
181 UdpSocket *socket() const { return _socket.get(); }
182
184 Error open() override;
185
187 void close() override;
188
190 bool isOpen() const override;
191
193 ssize_t sendPacket(const void *data, size_t size, const SocketAddress &dest) override;
194
196 int sendPackets(const DatagramList &datagrams) override;
197
199 ssize_t receivePacket(void *data, size_t maxSize, SocketAddress *sender = nullptr) override;
200
202 Error setPacingRate(uint64_t bytesPerSec) override;
203
205 Error setTxTime(bool enable) override;
206
207 private:
208 UdpSocket::UPtr _socket;
209 SocketAddress _localAddress;
210 String _multicastInterface;
211 int _recvBufferSize = 0;
212 int _sendBufferSize = 0;
213 uint8_t _dscp = 0;
214 int _multicastTTL = 0;
215 bool _ipv6 = false;
216 bool _reuseAddress = false;
217 bool _multicastLoopback = false;
218};
219
220PROMEKI_NAMESPACE_END
221
222#endif // PROMEKI_ENABLE_NETWORK