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>
8#include <quicr/detail/attributes.h>
10#include <quicr/object.h>
12#include <quicr/track_name.h>
13
14namespace quicr {
15 using namespace quicr;
16
22 class Server : public Transport
23 {
24 public:
29 {};
30
35 {
41 enum class ReasonCode : uint8_t
42 {
43 kOk = 0,
45 };
47
48 std::optional<messages::ReasonPhrase> error_reason;
49 };
50
56 Server(const ServerConfig& cfg)
57 : Transport(cfg, std::make_shared<ThreadedTickService>(cfg.tick_service_sleep_delay_us))
58 {
59 }
60
61 Server(const ServerConfig& cfg, std::shared_ptr<ThreadedTickService> tick_service)
62 : Transport(cfg, tick_service)
63 {
64 }
65
66 ~Server() = default;
67
78
82 void Stop();
83
96 void BindPublisherTrack(ConnectionHandle connection_handle,
97 ConnectionHandle src_id,
98 uint64_t request_id,
99 const std::shared_ptr<PublishTrackHandler>& track_handler,
100 bool ephemeral = false);
101
112 ConnectionHandle src_id,
113 const std::shared_ptr<PublishTrackHandler>& track_handler);
114
120 void BindFetchTrack(TransportConnId conn_id, std::shared_ptr<PublishFetchHandler> track_handler);
121
127 void UnbindFetchTrack(ConnectionHandle conn_id, const std::shared_ptr<PublishFetchHandler>& track_handler);
128
140 virtual void ResolveSubscribe(ConnectionHandle connection_handle,
141 uint64_t request_id,
142 uint64_t track_alias,
143 const SubscribeResponse& subscribe_response);
144
156 virtual void ResolvePublish(ConnectionHandle connection_handle,
157 uint64_t request_id,
158 bool forward,
159 messages::SubscriberPriority priority,
160 messages::GroupOrder group_order,
161 const PublishResponse& publish_response);
162
163 // --BEGIN CALLBACKS ----------------------------------------------------------------------------------
168
176 void NewConnectionAccepted(ConnectionHandle connection_handle, const ConnectionRemoteInfo& remote) override;
177
185 void ConnectionStatusChanged(ConnectionHandle connection_handle, ConnectionStatus status) override;
186
197 void MetricsSampled(ConnectionHandle connection_handle, const ConnectionMetrics& metrics) override;
198
210 const ClientSetupAttributes& client_setup_attributes) = 0;
211
222 virtual void AnnounceReceived(ConnectionHandle connection_handle,
223 const TrackNamespace& track_namespace,
224 const PublishAnnounceAttributes& publish_announce_attributes);
225
239 void ResolveAnnounce(ConnectionHandle connection_handle,
240 uint64_t request_id,
241 const TrackNamespace& track_namespace,
242 const std::vector<ConnectionHandle>& subscribers,
243 const AnnounceResponse& announce_response);
244
259 virtual std::vector<ConnectionHandle> UnannounceReceived(ConnectionHandle connection_handle,
260 const TrackNamespace& track_namespace) = 0;
261
269 virtual void UnsubscribeAnnouncesReceived(ConnectionHandle connection_handle,
270 const TrackNamespace& prefix_namespace) = 0;
271
285 std::pair<std::optional<messages::SubscribeNamespaceErrorCode>, std::vector<TrackNamespace>>;
286
288 ConnectionHandle connection_handle,
289 const TrackNamespace& prefix_namespace,
290 const PublishAnnounceAttributes& announce_attributes);
291
304 virtual void SubscribeReceived(ConnectionHandle connection_handle,
305 uint64_t request_id,
306 messages::FilterType filter_type,
307 const FullTrackName& track_full_name,
308 const messages::SubscribeAttributes& subscribe_attributes);
309
316 virtual void UnsubscribeReceived(ConnectionHandle connection_handle, uint64_t request_id) = 0;
317
323 virtual std::optional<messages::Location> GetLargestAvailable(const FullTrackName& track_name);
324
335 virtual bool FetchReceived(ConnectionHandle connection_handle,
336 uint64_t request_id,
337 const FullTrackName& track_full_name,
338 const quicr::messages::FetchAttributes& attributes) override;
339
350 virtual bool OnFetchOk(ConnectionHandle connection_handle,
351 uint64_t request_id,
352 const FullTrackName& track_full_name,
353 const messages::FetchAttributes& attributes);
354
361 virtual void FetchCancelReceived(ConnectionHandle connection_handle, uint64_t request_id) = 0;
362
374 virtual void PublishReceived(ConnectionHandle connection_handle,
375 uint64_t request_id,
376 const FullTrackName& track_full_name,
377 const messages::PublishAttributes& publish_attributes) = 0;
378
385 virtual void SubscribeDoneReceived(ConnectionHandle connection_handle, uint64_t request_id) = 0;
386
388 // --END OF CALLBACKS ----------------------------------------------------------------------------------
389
390 private:
391 bool ProcessCtrlMessage(ConnectionContext& conn_ctx, BytesSpan msg_bytes) override;
393 uint8_t priority,
394 uint32_t ttl,
395 bool stream_header_needed,
396 uint64_t group_id,
397 uint64_t subgroup_id,
398 uint64_t object_id,
399 std::optional<Extensions> extensions,
400 BytesSpan data) const;
401
402 bool stop_{ false };
403 };
404
405} // namespace moq
PublishObjectStatus
Publish status codes.
Definition publish_track_handler.h:29
virtual std::vector< ConnectionHandle > UnannounceReceived(ConnectionHandle connection_handle, const TrackNamespace &track_namespace)=0
Callback notification for unannounce received.
virtual bool OnFetchOk(ConnectionHandle connection_handle, uint64_t request_id, const FullTrackName &track_full_name, const messages::FetchAttributes &attributes)
Event to run on sending FetchOk.
virtual void UnsubscribeReceived(ConnectionHandle connection_handle, uint64_t request_id)=0
Callback notification on unsubscribe received.
void UnbindFetchTrack(ConnectionHandle conn_id, const std::shared_ptr< PublishFetchHandler > &track_handler)
Unbind a server fetch publisher track handler.
void MetricsSampled(ConnectionHandle connection_handle, const ConnectionMetrics &metrics) override
Notification callback to provide sampled metrics.
void ResolveAnnounce(ConnectionHandle connection_handle, uint64_t request_id, const TrackNamespace &track_namespace, const std::vector< ConnectionHandle > &subscribers, const AnnounceResponse &announce_response)
Accept or reject an announce that was received.
void UnbindPublisherTrack(ConnectionHandle connection_handle, ConnectionHandle src_id, const std::shared_ptr< PublishTrackHandler > &track_handler)
Unbind a server publish track handler.
virtual void FetchCancelReceived(ConnectionHandle connection_handle, uint64_t request_id)=0
Callback notification on receiving a FetchCancel message.
~Server()=default
void BindPublisherTrack(ConnectionHandle connection_handle, ConnectionHandle src_id, uint64_t request_id, const std::shared_ptr< PublishTrackHandler > &track_handler, bool ephemeral=false)
Bind a server publish track handler based on a subscribe.
std::pair< std::optional< messages::SubscribeNamespaceErrorCode >, std::vector< TrackNamespace > > SubscribeAnnouncesResponse
Callback notification for new subscribe announces received.
Definition server.h:284
virtual void SubscribeReceived(ConnectionHandle connection_handle, uint64_t request_id, messages::FilterType filter_type, const FullTrackName &track_full_name, const messages::SubscribeAttributes &subscribe_attributes)
Callback notification for new subscribe received.
virtual std::optional< messages::Location > GetLargestAvailable(const FullTrackName &track_name)
Get the largest available location for the given track, if any.
virtual void SubscribeDoneReceived(ConnectionHandle connection_handle, uint64_t request_id)=0
Callback notification on Subscribe Done received.
virtual void ResolveSubscribe(ConnectionHandle connection_handle, uint64_t request_id, uint64_t track_alias, const SubscribeResponse &subscribe_response)
Accept or reject an subscribe that was received.
void BindFetchTrack(TransportConnId conn_id, std::shared_ptr< PublishFetchHandler > track_handler)
Bind a server fetch publisher track handler.
Status Start()
Starts server transport thread to listen for new connections.
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.
virtual bool FetchReceived(ConnectionHandle connection_handle, uint64_t request_id, const FullTrackName &track_full_name, const quicr::messages::FetchAttributes &attributes) override
Event to run on receiving Fetch request.
void NewConnectionAccepted(ConnectionHandle connection_handle, const ConnectionRemoteInfo &remote) override
Callback notification on new connection.
void ConnectionStatusChanged(ConnectionHandle connection_handle, ConnectionStatus status) override
Callback notification for connection status/state change.
virtual void PublishReceived(ConnectionHandle connection_handle, uint64_t request_id, const FullTrackName &track_full_name, const messages::PublishAttributes &publish_attributes)=0
Callback notification for new publish received.
Server(const ServerConfig &cfg, std::shared_ptr< ThreadedTickService > tick_service)
Definition server.h:61
virtual void ResolvePublish(ConnectionHandle connection_handle, uint64_t request_id, bool forward, messages::SubscriberPriority priority, messages::GroupOrder group_order, const PublishResponse &publish_response)
Accept or reject publish that was received.
Server(const ServerConfig &cfg)
MoQ Server constructor to create the MOQ server mode instance.
Definition server.h:56
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:20
Status
Status of the transport.
Definition transport.h:46
Transport()=delete
friend class PublishFetchHandler
Definition transport.h:613
ConnectionStatus
Connection status codes.
Definition transport.h:81
Definition transport.h:28
uint64_t ConnectionHandle
Definition common.h:22
std::span< const Byte > BytesSpan
Definition common.h:21
Client Setup Attributes.
Definition common.h:37
Definition metrics.h:14
Full track name struct.
Definition track_name.h:260
Publish announce attributes.
Definition common.h:29
Response to received MOQT Announce message.
Definition server.h:35
ReasonCode
Definition server.h:42
ReasonCode reason_code
Definition server.h:46
std::optional< messages::ReasonPhrase > error_reason
Definition server.h:48
Response to received MOQT ClientSetup message.
Definition server.h:29
Definition config.h:28
Connection remote information.
Definition transport.h:93