11#include <promeki/config.h>
19PROMEKI_NAMESPACE_BEGIN
75class SrtSocketTransport :
public PacketTransport {
78 using UPtr = UniquePtr<SrtSocketTransport>;
91 explicit SrtSocketTransport(Mode mode = Caller);
94 ~SrtSocketTransport()
override;
97 Mode mode()
const {
return _mode; }
109 void setLocalAddress(
const SocketAddress &addr) { _localAddress = addr; }
112 const SocketAddress &localAddress()
const {
return _localAddress; }
123 void setPeerAddress(
const SocketAddress &addr) { _peerAddress = addr; }
126 const SocketAddress &peerAddress()
const {
return _peerAddress; }
132 void setAcceptTimeoutMs(
unsigned int ms) { _acceptTimeoutMs = ms; }
135 unsigned int acceptTimeoutMs()
const {
return _acceptTimeoutMs; }
138 Error setLatency(
int ms) {
139 if (ms < 0 || ms > 60000)
return Error::Invalid;
143 int latency()
const {
return _latencyMs; }
146 Error setPassphrase(
const String &passphrase) {
147 if (!passphrase.isEmpty() && (passphrase.byteCount() < 10 || passphrase.byteCount() > 79))
148 return Error::Invalid;
149 _passphrase = passphrase;
154 Error setEncryptionKeyLength(
int bytes) {
155 if (bytes != 0 && bytes != 16 && bytes != 24 && bytes != 32)
return Error::Invalid;
161 Error setStreamId(
const String &
id) {
162 if (
id.byteCount() > 512)
return Error::Invalid;
166 const String &streamId()
const {
return _streamId; }
169 Error setPayloadSize(
int bytes) {
170 if (bytes < 0 || bytes > 1456)
return Error::Invalid;
171 _payloadSize = bytes;
185 void setMaxBandwidth(int64_t bytesPerSec) { _maxBw = bytesPerSec; }
194 SrtSocket *socket()
const {
return _socket.get(); }
205 SrtSocket::Stats stats(
bool resetWindowed =
false)
const {
206 if (!_socket)
return SrtSocket::Stats{};
207 return _socket->stats(resetWindowed);
211 Error open()
override;
214 void close()
override;
217 bool isOpen()
const override;
220 ssize_t sendPacket(
const void *data,
size_t size,
const SocketAddress &dest)
override;
223 int sendPackets(
const DatagramList &datagrams)
override;
226 ssize_t receivePacket(
void *data,
size_t maxSize, SocketAddress *sender =
nullptr)
override;
230 SrtSocket::UPtr _socket;
231 UniquePtr<SrtServer> _listener;
232 SocketAddress _localAddress;
233 SocketAddress _peerAddress;
236 int _latencyMs = 120;
237 int _payloadSize = 0;
240 unsigned int _acceptTimeoutMs = 0;
249 Error applySocketOptions(SrtSocket &sock);