libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
srtserver.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_SRT
13#include <promeki/function.h>
14#include <promeki/objectbase.h>
15#include <promeki/error.h>
17#include <promeki/string.h>
18#include <promeki/srtsocket.h>
19
20#include <functional>
21
22PROMEKI_NAMESPACE_BEGIN
23
50class SrtServer : public ObjectBase {
51 PROMEKI_OBJECT(SrtServer, ObjectBase)
52 public:
54 static constexpr int DefaultBacklog = 50;
55
60 SrtServer(ObjectBase *parent = nullptr);
61
63 ~SrtServer() override;
64
78 Error listen(const SocketAddress &address, int backlog = DefaultBacklog);
79
81 void close();
82
84 bool isListening() const { return _listening; }
85
87 SocketAddress serverAddress() const { return _address; }
88
102 SrtSocket::UPtr accept(unsigned int timeoutMs = 0);
103
111 int handle() const { return _sock; }
112
122 Error setNonBlocking(bool enable);
123
124 // ---- Pre-listen configuration ----
125
127 Error setLatency(int ms);
128
130 Error setPassphrase(const String &passphrase);
131
133 Error setEncryptionKeyLength(int bytes);
134
136 Error setMaxBandwidth(int64_t bytesPerSec);
137
139 Error setPayloadSize(int bytes);
140
151 Error setReuseAddress(bool enable);
152
167 using ListenCallback = Function<bool(const String &streamId, const SocketAddress &peer)>;
168
183 Error setListenCallback(ListenCallback cb);
184
186 String lastError() const { return _lastError; }
187
189 PROMEKI_SIGNAL(newConnection);
190
200 static bool dispatchListenCallback(SrtServer *server, const String &streamId,
201 const SocketAddress &peer);
202
203 private:
204 int _sock = SrtSocket::InvalidHandle;
205 bool _listening = false;
206 SocketAddress _address;
207 String _passphrase;
208 String _lastError;
209 int _latencyMs = 120;
210 int _payloadSize = 0;
211 int _pbKeyLen = 0;
212 int64_t _maxBw = 0;
213 bool _reuseAddr = true;
214 ListenCallback _listenCb;
215
223 Error openAndConfigure();
224
228 void captureLastError();
229};
230
231PROMEKI_NAMESPACE_END
232
233#endif // PROMEKI_ENABLE_SRT