PrivMX Endpoint v2.7.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 <Poco/Dynamic/Var.h>
16
17#include <functional>
18#include <memory>
19#include <optional>
20#include <privmx/endpoint/core/Connection.hpp>
21#include <privmx/endpoint/core/ExtendedPointer.hpp>
22#include <privmx/endpoint/core/Types.hpp>
23#include <privmx/endpoint/event/EventApi.hpp>
24#include <string>
25#include <vector>
26
27// #include "privmx/endpoint/core/CoreTypes.hpp"
28#include "privmx/endpoint/stream/Types.hpp"
29#include "privmx/endpoint/stream/WebRTCInterface.hpp"
30
31namespace privmx {
32namespace endpoint {
33namespace stream {
34
35class StreamApiLowImpl;
36
37class StreamApiLow : public privmx::endpoint::core::ExtendedPointer<StreamApiLowImpl> {
38public:
39
40 static StreamApiLow create(const core::Connection& connection, event::EventApi& eventApi, StreamEncryptionMode streamEncryptionMode = StreamEncryptionMode::SINGLE_KEY);
41 StreamApiLow();
42 StreamApiLow(const StreamApiLow& obj);
43 StreamApiLow& operator=(const StreamApiLow& obj);
44 StreamApiLow(StreamApiLow&& obj);
45 ~StreamApiLow();
46
47 std::vector<TurnCredentials> getTurnCredentials();
48
49 std::string createStreamRoom(
50 const std::string& contextId,
51 const std::vector<core::UserWithPubKey>& users,
52 const std::vector<core::UserWithPubKey>&managers,
53 const core::Buffer& publicMeta,
54 const core::Buffer& privateMeta,
55 const std::optional<core::ContainerPolicy>& policies
56 );
57
58 std::string createStreamRoomEx(
59 const std::string& contextId,
60 const std::vector<core::UserWithPubKey>& users,
61 const std::vector<core::UserWithPubKey>&managers,
62 const core::Buffer& publicMeta,
63 const core::Buffer& privateMeta,
64 const std::string& type,
65 const std::optional<core::ContainerPolicy>& policies
66 );
67
68 void updateStreamRoom(
69 const std::string& streamRoomId,
70 const std::vector<core::UserWithPubKey>& users,
71 const std::vector<core::UserWithPubKey>&managers,
72 const core::Buffer& publicMeta,
73 const core::Buffer& privateMeta,
74 const int64_t version,
75 const bool force,
76 const bool forceGenerateNewKey,
77 const std::optional<core::ContainerPolicy>& policies
78 );
79
80 core::PagingList<StreamRoom> listStreamRooms(const std::string& contextId, const core::PagingQuery& query);
81 core::PagingList<StreamRoom> listStreamRoomsEx(const std::string& contextId, const core::PagingQuery& query, const std::string& type);
82
83 StreamRoom getStreamRoom(const std::string& streamRoomId);
84 StreamRoom getStreamRoomEx(const std::string& streamRoomId, const std::string& type);
85
86 void deleteStreamRoom(const std::string& streamRoomId);
87 // Stream
88 std::vector<StreamInfo> listStreams(const std::string& streamRoomId);
89 void joinStreamRoom(const std::string& streamRoomId, std::shared_ptr<WebRTCInterface> webRtc); // required before createStream and openStream
90 void leaveStreamRoom(const std::string& streamRoomId);
91 void enableStreamRoomRecording(const std::string& streamRoomId);
92 std::vector<stream::RecordingEncKey> getStreamRoomRecordingKeys(const std::string& streamRoomId);
93 StreamHandle createStream(const std::string& streamRoomId);
94 StreamPublishResult publishStream(const StreamHandle& streamHandle);
95 StreamPublishResult updateStream(const StreamHandle& streamHandle);
96 void unpublishStream(const StreamHandle& streamHandle);
97
98 void subscribeToRemoteStreams(const std::string& streamRoomId, const std::vector<StreamSubscription>& subscriptions);
99 void modifyRemoteStreamsSubscriptions(const std::string& streamRoomId, const std::vector<StreamSubscription>& subscriptionsToAdd, const std::vector<StreamSubscription>& subscriptionsToRemove);
100 void unsubscribeFromRemoteStreams(const std::string& streamRoomId, const std::vector<StreamSubscription>& subscriptionsToRemove);
101
102 void trickle(const int64_t sessionId, const std::string& candidateAsJson);
103 void acceptOfferOnReconfigure(const int64_t sessionId, const SdpWithTypeModel& sdp);
104 void setNewOfferOnReconfigure(const int64_t sessionId, const SdpWithTypeModel& sdp);
105
106 std::vector<std::string> subscribeFor(const std::vector<std::string>& subscriptionQueries);
107 void unsubscribeFrom(const std::vector<std::string>& subscriptionIds);
108 std::string buildSubscriptionQuery(EventType eventType, EventSelectorType selectorType, const std::string& selectorId);
109
110 void keyManagement(const std::string& streamRoomId, bool disable);
111private:
112 StreamApiLow(const std::shared_ptr<StreamApiLowImpl>& impl);
113 std::string _streamRoomCreateEx(
114 const std::string& contextId,
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 std::string& type,
120 const std::optional<core::ContainerPolicy>& policies
121 );
122 core::PagingList<StreamRoom> _streamRoomsListEx(const std::string& contextId, const core::PagingQuery& query, const std::string& type);
123 StreamRoom _streamRoomGetEx(const std::string& streamRoomId, const std::string& type);
124
125 // inline static const std::string STREAM_TYPE_FILTER_FLAG = "stream";
126};
127
128} // namespace stream
129} // namespace endpoint
130} // namespace privmx
131
132#endif // _PRIVMXLIB_ENDPOINT_STREAM_STREAMAPILOW_HPP_
Definition Buffer.hpp:13
Definition Connection.hpp:22
Definition ExtendedPointer.hpp:16
Definition EventApi.hpp:18
Definition Types.hpp:16