LibQuicR
Loading...
Searching...
No Matches
client.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 <optional>
7#include <quicr/common.h>
8#include <quicr/config.h>
10#include <quicr/track_name.h>
11
12namespace quicr {
13 using namespace quicr;
14
20 class Client : public Transport
21 {
22 public:
28 Client(const ClientConfig& cfg)
29 : Transport(cfg, std::make_shared<ThreadedTickService>())
30 {
31 }
32
33 ~Client() = default;
34
45
56
57 // --BEGIN CALLBACKS ----------------------------------------------------------------------------------
61
62
71 virtual void ServerSetupReceived(const ServerSetupAttributes& server_setup_attributes);
72
81 virtual void AnnounceStatusChanged(const TrackNamespace& track_namespace, const PublishAnnounceStatus status);
82
89 virtual void AnnounceReceived(const TrackNamespace& track_namespace,
90 const PublishAnnounceAttributes& announce_attributes);
91
97 virtual void UnannounceReceived(const TrackNamespace& track_namespace);
98
109 virtual void SubscribeAnnouncesStatusChanged(const TrackNamespace& track_namespace,
110 std::optional<messages::SubscribeAnnouncesErrorCode> error_code,
111 std::optional<messages::ReasonPhrase> reason);
112
130 virtual void UnpublishedSubscribeReceived(const FullTrackName& track_full_name,
131 const SubscribeAttributes& subscribe_attributes);
132
143 virtual void ResolveSubscribe(ConnectionHandle connection_handle,
144 uint64_t subscribe_id,
145 const SubscribeResponse& subscribe_response);
146
156 void MetricsSampled(const ConnectionMetrics& metrics) override;
157
159 // --END OF CALLBACKS ----------------------------------------------------------------------------------
160
168
174 void SubscribeTrack(std::shared_ptr<SubscribeTrackHandler> track_handler)
175 {
176 if (connection_handle_) {
177 Transport::SubscribeTrack(*connection_handle_, std::move(track_handler));
178 }
179 }
180
186 void UnsubscribeTrack(std::shared_ptr<SubscribeTrackHandler> track_handler)
187 {
188 if (connection_handle_) {
189 Transport::UnsubscribeTrack(*connection_handle_, std::move(track_handler));
190 }
191 }
192
214 void PublishAnnounce(const TrackNamespace& track_namespace);
215
224 void PublishUnannounce(const TrackNamespace& track_namespace);
225
233 void SubscribeAnnounces(const TrackNamespace& prefix_namespace)
234 {
235 if (!connection_handle_) {
236 return;
237 }
238
239 SendSubscribeAnnounces(*connection_handle_, prefix_namespace);
240 }
241
247 void UnsubscribeAnnounces(const TrackNamespace& prefix_namespace)
248 {
249 if (!connection_handle_) {
250 return;
251 }
252
253 SendUnsubscribeAnnounces(*connection_handle_, prefix_namespace);
254 }
255
262 void PublishTrack(std::shared_ptr<PublishTrackHandler> track_handler)
263 {
264 if (connection_handle_) {
265 Transport::PublishTrack(*connection_handle_, std::move(track_handler));
266 }
267 }
268
276 void UnpublishTrack(std::shared_ptr<PublishTrackHandler> track_handler)
277 {
278 if (connection_handle_) {
279 Transport::UnpublishTrack(*connection_handle_, std::move(track_handler));
280 }
281 }
282
288 void FetchTrack(std::shared_ptr<FetchTrackHandler> track_handler)
289 {
290 if (connection_handle_.has_value()) {
291 Transport::FetchTrack(connection_handle_.value(), std::move(track_handler));
292 }
293 }
294
300 void CancelFetchTrack(std::shared_ptr<FetchTrackHandler> track_handler)
301 {
302 if (connection_handle_.has_value()) {
303 Transport::CancelFetchTrack(connection_handle_.value(), std::move(track_handler));
304 }
305 }
306
312 std::optional<ConnectionHandle> GetConnectionHandle() const { return connection_handle_; }
313
314 private:
315 bool ProcessCtrlMessage(ConnectionContext& conn_ctx, BytesSpan stream_buffer) override;
316
317 void SetConnectionHandle(ConnectionHandle connection_handle) override
318 {
319 connection_handle_ = connection_handle;
320 }
321
322 void SetStatus(Status status)
323 {
324 status_ = status;
325 StatusChanged(status);
326 }
327
328 std::optional<ConnectionHandle> connection_handle_;
329 };
330
331} // namespace quicr
MoQ Client.
Definition client.h:21
void SubscribeTrack(std::shared_ptr< SubscribeTrackHandler > track_handler)
Subscribe to a track.
Definition client.h:174
PublishAnnounceStatus GetAnnounceStatus(const TrackNamespace &track_namespace)
Get announce status for namespace.
void CancelFetchTrack(std::shared_ptr< FetchTrackHandler > track_handler)
Cancel a given Fetch track handler.
Definition client.h:300
std::optional< ConnectionHandle > GetConnectionHandle() const
Get the connection handle.
Definition client.h:312
void UnsubscribeAnnounces(const TrackNamespace &prefix_namespace)
Unsubscribe announces to prefix namespace.
Definition client.h:247
virtual void AnnounceStatusChanged(const TrackNamespace &track_namespace, const PublishAnnounceStatus status)
Notification on publish announcement status change.
virtual void UnpublishedSubscribeReceived(const FullTrackName &track_full_name, const SubscribeAttributes &subscribe_attributes)
Callback notification for new subscribe received that doesn't match an existing publish track.
virtual void ResolveSubscribe(ConnectionHandle connection_handle, uint64_t subscribe_id, const SubscribeResponse &subscribe_response)
Accept or reject an subscribe that was received.
void UnpublishTrack(std::shared_ptr< PublishTrackHandler > track_handler)
Unpublish track.
Definition client.h:276
void FetchTrack(std::shared_ptr< FetchTrackHandler > track_handler)
Fetch track.
Definition client.h:288
virtual void ServerSetupReceived(const ServerSetupAttributes &server_setup_attributes)
Callback on server setup message.
void PublishAnnounce(const TrackNamespace &track_namespace)
Publish a track namespace.
void SubscribeAnnounces(const TrackNamespace &prefix_namespace)
Subscribe Announces to prefix namespace.
Definition client.h:233
void PublishUnannounce(const TrackNamespace &track_namespace)
Unannounce a publish namespace.
virtual void UnannounceReceived(const TrackNamespace &track_namespace)
Callback notification for unannounce received by subscribe announces.
Client(const ClientConfig &cfg)
MoQ Client Constructor to create the client mode instance.
Definition client.h:28
virtual void AnnounceReceived(const TrackNamespace &track_namespace, const PublishAnnounceAttributes &announce_attributes)
Callback notification for announce received by subscribe announces.
void MetricsSampled(const ConnectionMetrics &metrics) override
Notification callback to provide sampled metrics.
void UnsubscribeTrack(std::shared_ptr< SubscribeTrackHandler > track_handler)
Unsubscribe track.
Definition client.h:186
~Client()=default
virtual void SubscribeAnnouncesStatusChanged(const TrackNamespace &track_namespace, std::optional< messages::SubscribeAnnouncesErrorCode > error_code, std::optional< messages::ReasonPhrase > reason)
Callback notification for subscribe announces OK or Error.
Status Disconnect()
Disconnect the client connection gracefully.
void PublishTrack(std::shared_ptr< PublishTrackHandler > track_handler)
Publish to a track.
Definition client.h:262
Status Connect()
Starts a client connection via a transport thread.
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
void UnpublishTrack(ConnectionHandle connection_handle, const std::shared_ptr< PublishTrackHandler > &track_handler)
Unpublish track.
Status
Status of the transport.
Definition transport.h:42
void CancelFetchTrack(ConnectionHandle connection_handle, std::shared_ptr< FetchTrackHandler > track_handler)
Cancel Fetch track.
void SubscribeTrack(ConnectionHandle connection_handle, std::shared_ptr< SubscribeTrackHandler > track_handler)
Subscribe to a track.
void FetchTrack(ConnectionHandle connection_handle, std::shared_ptr< FetchTrackHandler > track_handler)
Fetch track.
void PublishTrack(ConnectionHandle connection_handle, std::shared_ptr< PublishTrackHandler > track_handler)
Publish to a track.
void UnsubscribeTrack(ConnectionHandle connection_handle, const std::shared_ptr< SubscribeTrackHandler > &track_handler)
Unsubscribe track.
virtual void StatusChanged(Status status)
Callback notification for status/state change.
Definition transport.h:196
Definition transport.h:26
Span< const Byte > BytesSpan
Definition common.h:23
uint64_t ConnectionHandle
Definition common.h:24
PublishAnnounceStatus
Publish Announce Status.
Definition common.h:66
Definition config.h:22
Definition metrics.h:14
Full track name struct.
Definition track_name.h:267
Publish announce attributes.
Definition common.h:43
Server Setup Attributes.
Definition common.h:57
Subscribe attributes.
Definition common.h:32