LibQuicR
Loading...
Searching...
No Matches
server.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) 2024 Cisco Systems
2// SPDX-License-Identifier: BSD-2-Clause
3
4#pragma once
5
6#include "quicr/detail/messages.h"
7#include <quicr/config.h>
9#include <quicr/object.h>
10#include <quicr/track_name.h>
11
12namespace quicr {
13 using namespace quicr;
14
20 class Server : public Transport
21 {
22 public:
27 {};
28
33 {
39 enum class ReasonCode : uint8_t
40 {
41 kOk = 0,
43 };
45
46 std::optional<Bytes> reason_phrase;
47 };
48
54 Server(const ServerConfig& cfg)
55 : Transport(cfg, std::make_shared<ThreadedTickService>())
56 {
57 }
58
59 Server(const ServerConfig& cfg, std::shared_ptr<ThreadedTickService> tick_service)
60 : Transport(cfg, tick_service)
61 {
62 }
63
64 ~Server() = default;
65
76
80 void Stop();
81
93 void BindPublisherTrack(ConnectionHandle connection_handle,
94 uint64_t subscribe_id,
95 const std::shared_ptr<PublishTrackHandler>& track_handler,
96 bool ephemeral = false);
97
107 const std::shared_ptr<PublishTrackHandler>& track_handler);
108
119 virtual void ResolveSubscribe(ConnectionHandle connection_handle,
120 uint64_t subscribe_id,
121 const SubscribeResponse& subscribe_response);
122
123 // --BEGIN CALLBACKS ----------------------------------------------------------------------------------
127
128
136 void NewConnectionAccepted(ConnectionHandle connection_handle, const ConnectionRemoteInfo& remote) override;
137
145 void ConnectionStatusChanged(ConnectionHandle connection_handle, ConnectionStatus status) override;
146
157 void MetricsSampled(ConnectionHandle connection_handle, const ConnectionMetrics& metrics) override;
158
170 const ClientSetupAttributes& client_setup_attributes) = 0;
171
182 virtual void AnnounceReceived(ConnectionHandle connection_handle,
183 const TrackNamespace& track_namespace,
184 const PublishAnnounceAttributes& publish_announce_attributes);
185
198 void ResolveAnnounce(ConnectionHandle connection_handle,
199 const TrackNamespace& track_namespace,
200 const std::vector<ConnectionHandle>& subscribers,
201 const AnnounceResponse& announce_response);
202
217 virtual std::vector<ConnectionHandle> UnannounceReceived(ConnectionHandle connection_handle,
218 const TrackNamespace& track_namespace) = 0;
219
227 virtual void UnsubscribeAnnouncesReceived(ConnectionHandle connection_handle,
228 const TrackNamespace& prefix_namespace) = 0;
229
243 std::pair<std::optional<messages::SubscribeAnnouncesErrorCode>, std::vector<TrackNamespace>>;
244
246 ConnectionHandle connection_handle,
247 const TrackNamespace& prefix_namespace,
248 const PublishAnnounceAttributes& announce_attributes);
249
262 virtual void SubscribeReceived(ConnectionHandle connection_handle,
263 uint64_t subscribe_id,
264 uint64_t proposed_track_alias,
265 quicr::messages::FilterType filter_type,
266 const FullTrackName& track_full_name,
267 const SubscribeAttributes& subscribe_attributes);
268
275 virtual void UnsubscribeReceived(ConnectionHandle connection_handle, uint64_t subscribe_id) = 0;
276
287 virtual bool FetchReceived(ConnectionHandle connection_handle,
288 uint64_t subscribe_id,
289 const FullTrackName& track_full_name,
290 const FetchAttributes& attributes);
291
300 virtual void OnFetchOk(ConnectionHandle connection_handle,
301 uint64_t subscribe_id,
302 const FullTrackName& track_full_name,
303 const FetchAttributes& attributes);
304
311 virtual void FetchCancelReceived(ConnectionHandle connection_handle, uint64_t subscribe_id) = 0;
312
313 virtual void NewGroupRequested(ConnectionHandle connection_handle, uint64_t subscribe_id, uint64_t track_alias);
314
316 // --END OF CALLBACKS ----------------------------------------------------------------------------------
317
318 private:
319 bool ProcessCtrlMessage(ConnectionContext& conn_ctx, BytesSpan msg_bytes) override;
320
321 bool stop_{ false };
322 };
323
324} // namespace moq
MoQ Server.
Definition server.h:21
virtual void OnFetchOk(ConnectionHandle connection_handle, uint64_t subscribe_id, const FullTrackName &track_full_name, const FetchAttributes &attributes)
Event to run on sending FetchOk.
virtual std::vector< ConnectionHandle > UnannounceReceived(ConnectionHandle connection_handle, const TrackNamespace &track_namespace)=0
Callback notification for unannounce received.
void UnbindPublisherTrack(ConnectionHandle connection_handle, const std::shared_ptr< PublishTrackHandler > &track_handler)
Unbind a server publish track handler.
void MetricsSampled(ConnectionHandle connection_handle, const ConnectionMetrics &metrics) override
Notification callback to provide sampled metrics.
~Server()=default
virtual void ResolveSubscribe(ConnectionHandle connection_handle, uint64_t subscribe_id, const SubscribeResponse &subscribe_response)
Accept or reject an subscribe that was received.
virtual void FetchCancelReceived(ConnectionHandle connection_handle, uint64_t subscribe_id)=0
Callback notification on receiving a FetchCancel message.
virtual void SubscribeReceived(ConnectionHandle connection_handle, uint64_t subscribe_id, uint64_t proposed_track_alias, quicr::messages::FilterType filter_type, const FullTrackName &track_full_name, const SubscribeAttributes &subscribe_attributes)
Callback notification for new subscribe received.
virtual void UnsubscribeReceived(ConnectionHandle connection_handle, uint64_t subscribe_id)=0
Callback notification on unsubscribe received.
std::pair< std::optional< messages::SubscribeAnnouncesErrorCode >, std::vector< TrackNamespace > > SubscribeAnnouncesResponse
Callback notification for new subscribe announces received.
Definition server.h:242
Status Start()
Starts server transport thread to listen for new connections.
virtual void NewGroupRequested(ConnectionHandle connection_handle, uint64_t subscribe_id, uint64_t track_alias)
virtual SubscribeAnnouncesResponse SubscribeAnnouncesReceived(ConnectionHandle connection_handle, const TrackNamespace &prefix_namespace, const PublishAnnounceAttributes &announce_attributes)
virtual void AnnounceReceived(ConnectionHandle connection_handle, const TrackNamespace &track_namespace, const PublishAnnounceAttributes &publish_announce_attributes)
Callback notification for new announce received that needs to be authorized.
virtual ClientSetupResponse ClientSetupReceived(ConnectionHandle connection_handle, const ClientSetupAttributes &client_setup_attributes)=0
Callback on client setup message.
void NewConnectionAccepted(ConnectionHandle connection_handle, const ConnectionRemoteInfo &remote) override
Callback notification on new connection.
void ResolveAnnounce(ConnectionHandle connection_handle, const TrackNamespace &track_namespace, const std::vector< ConnectionHandle > &subscribers, const AnnounceResponse &announce_response)
Accept or reject an announce that was received.
void BindPublisherTrack(ConnectionHandle connection_handle, uint64_t subscribe_id, const std::shared_ptr< PublishTrackHandler > &track_handler, bool ephemeral=false)
Bind a server publish track handler based on a subscribe.
void ConnectionStatusChanged(ConnectionHandle connection_handle, ConnectionStatus status) override
Callback notification for connection status/state change.
Server(const ServerConfig &cfg, std::shared_ptr< ThreadedTickService > tick_service)
Definition server.h:59
virtual bool FetchReceived(ConnectionHandle connection_handle, uint64_t subscribe_id, const FullTrackName &track_full_name, const FetchAttributes &attributes)
Callback notification on Fetch message received.
Server(const ServerConfig &cfg)
MoQ Server constructor to create the MOQ server mode instance.
Definition server.h:54
virtual void UnsubscribeAnnouncesReceived(ConnectionHandle connection_handle, const TrackNamespace &prefix_namespace)=0
Callback notification for Unsubscribe announces received.
An N-tuple representation of a MOQ namespace.
Definition track_name.h:21
MOQ Implementation supporting both client and server modes.
Definition transport.h:34
Status
Status of the transport.
Definition transport.h:42
ConnectionStatus
Connection status codes.
Definition transport.h:77
Definition transport.h:26
Span< const Byte > BytesSpan
Definition common.h:23
uint64_t ConnectionHandle
Definition common.h:24
Client Setup Attributes.
Definition common.h:49
Definition metrics.h:14
Fetch attributes.
Definition common.h:79
Full track name struct.
Definition track_name.h:267
Publish announce attributes.
Definition common.h:43
Response to received MOQT Announce message.
Definition server.h:33
std::optional< Bytes > reason_phrase
Definition server.h:46
ReasonCode
Definition server.h:40
ReasonCode reason_code
Definition server.h:44
Response to received MOQT ClientSetup message.
Definition server.h:27
Definition config.h:27
Subscribe attributes.
Definition common.h:32
Connection remote information.
Definition transport.h:89