PrivMX Endpoint v2.8.0
Loading...
Searching...
No Matches
StreamApiLow.hpp
1/*
2PrivMX Endpoint.
3Copyright © 2024 Simplito sp. z o.o.
4
5This file is part of the PrivMX Platform (https://privmx.dev).
6This software is Licensed under the PrivMX Free License.
7
8See the License for the specific language governing permissions and
9limitations under the License.
10*/
11
12#ifndef _PRIVMXLIB_ENDPOINT_STREAM_STREAMAPILOW_HPP_
13#define _PRIVMXLIB_ENDPOINT_STREAM_STREAMAPILOW_HPP_
14
15#include "privmx/endpoint/stream/Types.hpp"
16#include "privmx/endpoint/stream/WebRTCInterface.hpp"
17#include <memory>
18#include <optional>
19#include <privmx/endpoint/core/Connection.hpp>
20#include <privmx/endpoint/core/ExtendedPointer.hpp>
21#include <privmx/endpoint/core/Types.hpp>
22#include <string>
23#include <vector>
24
25namespace privmx {
26namespace endpoint {
27namespace stream {
28
29class StreamApiLowImpl;
30
42class StreamApiLow : public privmx::endpoint::core::ExtendedPointer<StreamApiLowImpl> {
43public:
51 static StreamApiLow create(const core::Connection& connection);
52
57 StreamApiLow(const StreamApiLow& obj);
58 StreamApiLow& operator=(const StreamApiLow& obj);
61
72 std::vector<TurnCredentials> getTurnCredentials();
73
89 std::string createStreamRoom(
90 const std::string& contextId,
91 const std::vector<core::UserWithPubKey>& users,
92 const std::vector<core::UserWithPubKey>& managers,
93 const core::Buffer& publicMeta,
94 const core::Buffer& privateMeta,
95 const std::optional<core::ContainerPolicyWithoutItem>& policies,
96 const std::optional<int64_t>& emptyRoomTtl = std::nullopt
97 );
98
114 const std::string& streamRoomId,
115 const std::vector<core::UserWithPubKey>& users,
116 const std::vector<core::UserWithPubKey>& managers,
117 const core::Buffer& publicMeta,
118 const core::Buffer& privateMeta,
119 const int64_t version,
120 const bool force,
121 const bool forceGenerateNewKey,
122 const std::optional<core::ContainerPolicyWithoutItem>& policies
123 );
124
133 core::PagingList<StreamRoom> listStreamRooms(const std::string& contextId, const core::PagingQuery& query);
134
142 StreamRoom getStreamRoom(const std::string& streamRoomId);
143
149 void deleteStreamRoom(const std::string& streamRoomId);
150 // Stream
151
161 std::vector<StreamInfo> listStreams(const std::string& streamRoomId);
162
174 std::vector<StreamSubscriber> listStreamRoomParticipants(const std::string& streamRoomId);
175
185 std::vector<std::string> subscribeFor(const std::vector<std::string>& subscriptionQueries);
186
192 void unsubscribeFrom(const std::vector<std::string>& subscriptionIds);
193
207 EventType eventType,
208 EventSelectorType selectorType,
209 const std::string& selectorId
210 );
211
221 void trickle(const int64_t sessionId, const std::string& candidateAsJson);
222
232 void setNewOfferOnReconfigure(const int64_t sessionId, const SdpWithTypeModel& sdp);
233
246 const std::string& streamRoomId,
247 std::shared_ptr<WebRTCInterface> webRtc
248 ); // required before createStream and createSubscription
249
260 void leaveStreamRoom(const std::string& streamRoomId);
261 // Publisher stream part
262
275 StreamHandle createStream(const std::string& streamRoomId);
276
288 StreamPublishResult publishStream(const StreamHandle& streamHandle);
289
300 StreamPublishResult updateStream(const StreamHandle& streamHandle);
301
310 void removeStream(const StreamHandle& streamHandle);
311 // Subscriber stream part
312
328 SubscriberStreamHandle createSubscriberStream(
329 const std::string& streamRoomId,
330 const std::vector<StreamSubscription>& subscriptions
331 );
332
344 const SubscriberStreamHandle& subscriptionHandle,
345 const std::vector<StreamSubscription>& subscriptionsToAdd,
346 const std::vector<StreamSubscription>& subscriptionsToRemove
347 );
348
357 void removeSubscriberStream(const SubscriberStreamHandle& subscriptionHandle);
358 // Data Channel
371 core::Buffer encryptDataChannelMessage(const std::string& streamRoomId, const DataChannelMessage& plainMessage);
372
387 const std::string& streamRoomId,
388 const std::string& remoteStreamId,
389 const core::Buffer& encryptedData
390 );
391
392private:
393 StreamApiLow(const std::shared_ptr<StreamApiLowImpl>& impl);
394};
395
396} // namespace stream
397} // namespace endpoint
398} // namespace privmx
399
400#endif // _PRIVMXLIB_ENDPOINT_STREAM_STREAMAPILOW_HPP_
Definition Buffer.hpp:13
Definition Connection.hpp:21
Definition ExtendedPointer.hpp:16
StreamPublishResult publishStream(const StreamHandle &streamHandle)
void removeStream(const StreamHandle &streamHandle)
std::vector< StreamInfo > listStreams(const std::string &streamRoomId)
core::Buffer encryptDataChannelMessage(const std::string &streamRoomId, const DataChannelMessage &plainMessage)
static StreamApiLow create(const core::Connection &connection)
std::vector< TurnCredentials > getTurnCredentials()
std::vector< StreamSubscriber > listStreamRoomParticipants(const std::string &streamRoomId)
void joinStreamRoom(const std::string &streamRoomId, std::shared_ptr< WebRTCInterface > webRtc)
void updateSubscriberStream(const SubscriberStreamHandle &subscriptionHandle, const std::vector< StreamSubscription > &subscriptionsToAdd, const std::vector< StreamSubscription > &subscriptionsToRemove)
StreamRoom getStreamRoom(const std::string &streamRoomId)
void removeSubscriberStream(const SubscriberStreamHandle &subscriptionHandle)
void updateStreamRoom(const std::string &streamRoomId, const std::vector< core::UserWithPubKey > &users, const std::vector< core::UserWithPubKey > &managers, const core::Buffer &publicMeta, const core::Buffer &privateMeta, const int64_t version, const bool force, const bool forceGenerateNewKey, const std::optional< core::ContainerPolicyWithoutItem > &policies)
StreamHandle createStream(const std::string &streamRoomId)
DecryptedDataChannelMessage decryptDataChannelMessage(const std::string &streamRoomId, const std::string &remoteStreamId, const core::Buffer &encryptedData)
void leaveStreamRoom(const std::string &streamRoomId)
std::string createStreamRoom(const std::string &contextId, const std::vector< core::UserWithPubKey > &users, const std::vector< core::UserWithPubKey > &managers, const core::Buffer &publicMeta, const core::Buffer &privateMeta, const std::optional< core::ContainerPolicyWithoutItem > &policies, const std::optional< int64_t > &emptyRoomTtl=std::nullopt)
std::string buildSubscriptionQuery(EventType eventType, EventSelectorType selectorType, const std::string &selectorId)
SubscriberStreamHandle createSubscriberStream(const std::string &streamRoomId, const std::vector< StreamSubscription > &subscriptions)
void trickle(const int64_t sessionId, const std::string &candidateAsJson)
core::PagingList< StreamRoom > listStreamRooms(const std::string &contextId, const core::PagingQuery &query)
void deleteStreamRoom(const std::string &streamRoomId)
void unsubscribeFrom(const std::vector< std::string > &subscriptionIds)
StreamPublishResult updateStream(const StreamHandle &streamHandle)
std::vector< std::string > subscribeFor(const std::vector< std::string > &subscriptionQueries)
void setNewOfferOnReconfigure(const int64_t sessionId, const SdpWithTypeModel &sdp)
Definition Types.hpp:16