LibQuicR
session_callbacks.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/errors.h"
7 #include "quicr/reply.h"
8 #include "quicr/session.h"
10 
11 #include <cstdint>
12 #include <memory>
13 #include <optional>
14 #include <string>
15 #include <vector>
16 
17 namespace quicr {
18 
19  class SubscribeNamespaceHandler;
20 
27  enum class RequestErrorCode : uint8_t
28  {
29  kInternalError = 1,
31  kTimeout,
42  kRedirect,
43  kGoingAway,
44  };
45 
52  enum class PublishErrorCode : std::uint8_t
53  {
54  kInternalError = 1,
57  kRejected,
58  };
59 
62  {
64 
65  std::shared_ptr<SubscribeTrackHandler>
67  };
68 
75  enum class PublishNamespaceErrorCode : uint8_t
76  {
77  kOk = 0,
79  };
80 
87  enum class FetchErrorCode : uint8_t
88  {
89  kOk = 0,
91  kNoObjects,
93  // TODO: Expand reasons.
94  };
95 
122  {
124  virtual ~Callbacks() = default;
125 
135  virtual Expected<void, Error<ErrorCode>> SetupReceived(const std::shared_ptr<Session>& session,
136  const SetupAttributes& setup_attributes);
137 
143  virtual void OnStreamClosed(std::uint64_t stream_id, StreamClosedFlag flag);
144 
154  virtual void StatusChanged(const std::shared_ptr<Session>& session, Status status);
155 
170  virtual void MetricsSampled(const std::shared_ptr<Session>& session, const ConnectionMetrics& metrics);
171 
184  const std::shared_ptr<Session>& session,
185  std::uint64_t request_id,
186  const PublishAttributes& publish_attributes,
187  std::weak_ptr<SubscribeNamespaceHandler> sub_ns_handler);
188 
200  const std::shared_ptr<Session>& session,
201  const TrackNamespace& track_namespace,
202  const PublishNamespaceAttributes& publish_namespace_attributes);
203 
216  const std::shared_ptr<Session>& session,
217  std::uint64_t request_id,
218  const FullTrackName& track_full_name,
219  const StandaloneFetchAttributes& attributes);
220 
233  const std::shared_ptr<Session>& session,
234  std::uint64_t request_id,
235  const FullTrackName& track_full_name,
236  const JoiningFetchAttributes& attributes);
237 
245  virtual Reply<void, FetchErrorCode> FetchCancelReceived(const std::shared_ptr<Session>& session,
246  std::uint64_t request_id);
247 
258  const std::shared_ptr<Session>& session,
259  const FullTrackName& track_full_name);
260  };
261 
266  {
268  virtual ~ClientCallbacks() = default;
269 
284  virtual Reply<void, ErrorCode> UnpublishedSubscribeReceived(const std::shared_ptr<Session>& session,
285  const FullTrackName& track_full_name,
286  const SubscribeAttributes& subscribe_attributes);
287  };
288 
293  {
295  virtual ~ServerCallbacks() = default;
296 
302  virtual void OnStreamClosed(std::uint64_t stream_id, StreamClosedFlag flag);
303 
316  const std::shared_ptr<Session>& session,
317  const TrackNamespace& prefix_namespace,
318  const SubscribeNamespaceAttributes& attributes);
319 
332  const std::shared_ptr<Session>& session,
333  const TrackNamespace& prefix_namespace,
334  const SubscribeNamespaceAttributes& attributes);
335 
348  const std::shared_ptr<Session>& session,
349  std::uint64_t request_id,
350  const FullTrackName& track_full_name,
351  const SubscribeAttributes& subscribe_attributes);
352 
362  virtual Reply<void, ErrorCode> NewGroupRequested(const FullTrackName& track_full_name, std::uint64_t group_id);
363 
374  virtual void PublishNamespaceDoneReceived(const std::shared_ptr<Session>& session, std::uint64_t request_id);
375 
384  virtual void UnsubscribeNamespaceReceived(const std::shared_ptr<Session>& session,
385  const TrackNamespace& prefix_namespace);
386 
395  virtual void UnsubscribeReceived(const std::shared_ptr<Session>& session, std::uint64_t request_id);
396 
405  virtual void PublishDoneReceived(const std::shared_ptr<Session>& session, std::uint64_t request_id);
406  };
407 }
Holds either a success value or an error value.
Definition: expected.h:65
The reply to a callback, which may be answered immediately or deferred.
Definition: reply.h:31
Status
Status of the transport.
Definition: session.h:76
An N-tuple representation of a MOQ namespace.
Definition: track_name.h:22
Definition: attributes.h:13
PublishNamespaceErrorCode
Why a publish namespace was rejected, carried by the error of a Reply.
Definition: session_callbacks.h:76
@ kOk
Vestigial success value; do not return it as an error.
@ kInternalError
Unspecified application or endpoint failure.
FetchErrorCode
Why a fetch was rejected, carried by the error of a Reply.
Definition: session_callbacks.h:88
@ kInvalidRange
Requested fetch range is invalid.
@ kNoObjects
No objects are available in the requested range.
@ kOk
Vestigial success value; do not return it as an error.
@ kInternalError
Unspecified application or endpoint failure.
PublishErrorCode
Why a publish was rejected, carried by the error of a Reply.
Definition: session_callbacks.h:53
@ kNotAuthorized
Publisher is not authorized.
@ kRejected
Publication was declined for another reason.
@ kNotSupported
Receiving publications is unsupported.
@ kInternalError
Unspecified application or endpoint failure.
RequestErrorCode
Why a request was rejected, carried by the error of a Reply.
Definition: session_callbacks.h:28
@ kUnauthorized
Requester is not authorized.
@ kGoingAway
The request is going away.
@ kDoesNotExist
Requested resource does not exist.
@ kExpiredAuthToken
Authorization token has expired.
@ kMalformedAuthToken
Authorization token is malformed.
@ kRedirect
A request should redirect with the given Redirect info.
@ kInvalidRange
Requested object range is invalid.
@ kTimeout
Request could not be completed before its deadline.
@ kInvalidJoiningRequestId
Joining fetch references an invalid request.
@ kPrefixOverlap
Namespace prefix overlaps an existing request incompatibly.
@ kUninterested
Endpoint is no longer interested.
@ kNotSupported
Requested operation is unsupported.
@ kDuplicateSubscription
Equivalent subscription already exists.
@ kMalformedTrack
Track name or properties are malformed.
@ kInternalError
Unspecified application or endpoint failure.
StreamClosedFlag
Peer or transport event that closed a stream direction.
Definition: connection.h:29
Application-facing metrics for one connection sample period.
Definition: metrics.h:326
Full track name struct.
Definition: track_name.h:436
Attributes of an inbound joining FETCH request.
Definition: attributes.h:138
Attributes of an inbound PUBLISH request.
Definition: attributes.h:93
Publish namespace attributes.
Definition: attributes.h:31
Attributes received in response to a successful PUBLISH request.
Definition: attributes.h:49
Successful application response to an inbound PUBLISH request.
Definition: session_callbacks.h:62
std::shared_ptr< SubscribeTrackHandler > handler
Handler that receives objects from the accepted publication.
Definition: session_callbacks.h:66
const PublishOkAttributes attributes
Attributes to return in PUBLISH_OK.
Definition: session_callbacks.h:63
Callback interface for session events common to both client and server mode.
Definition: session_callbacks.h:122
virtual void StatusChanged(const std::shared_ptr< Session > &session, Status status)
Callback notification for status/state change.
virtual void MetricsSampled(const std::shared_ptr< Session > &session, const ConnectionMetrics &metrics)
Notification callback to provide sampled connection metrics.
virtual void OnStreamClosed(std::uint64_t stream_id, StreamClosedFlag flag)
Notify that a QUIC stream closed.
virtual Expected< void, Error< ErrorCode > > SetupReceived(const std::shared_ptr< Session > &session, const SetupAttributes &setup_attributes)
Callback on receipt of the peer's SETUP message.
virtual Reply< const FetchResponse, FetchErrorCode > JoiningFetchReceived(const std::shared_ptr< Session > &session, std::uint64_t request_id, const FullTrackName &track_full_name, const JoiningFetchAttributes &attributes)
Event to run on receiving a Joining Fetch request.
virtual Reply< void, FetchErrorCode > FetchCancelReceived(const std::shared_ptr< Session > &session, std::uint64_t request_id)
Callback notification on receiving a FetchCancel message.
virtual Reply< const FetchResponse, FetchErrorCode > StandaloneFetchReceived(const std::shared_ptr< Session > &session, std::uint64_t request_id, const FullTrackName &track_full_name, const StandaloneFetchAttributes &attributes)
Event to run on receiving a Standalone Fetch request.
virtual Reply< TrackStatusResponse, RequestErrorCode > TrackStatusReceived(const std::shared_ptr< Session > &session, const FullTrackName &track_full_name)
Callback notification for track status message received.
virtual Reply< void, PublishNamespaceErrorCode > PublishNamespaceReceived(const std::shared_ptr< Session > &session, const TrackNamespace &track_namespace, const PublishNamespaceAttributes &publish_namespace_attributes)
Callback notification for announce received by subscribe namespace.
virtual ~Callbacks()=default
Destroy the callback interface.
virtual Reply< const PublishResponse, PublishErrorCode > PublishReceived(const std::shared_ptr< Session > &session, std::uint64_t request_id, const PublishAttributes &publish_attributes, std::weak_ptr< SubscribeNamespaceHandler > sub_ns_handler)
Callback notification for new publish received.
Callback interface for session events specific to client mode.
Definition: session_callbacks.h:266
virtual Reply< void, ErrorCode > UnpublishedSubscribeReceived(const std::shared_ptr< Session > &session, const FullTrackName &track_full_name, const SubscribeAttributes &subscribe_attributes)
Callback notification for new subscribe received that doesn't match an existing publish track.
virtual ~ClientCallbacks()=default
Destroy the client callback interface.
Callback interface for session events specific to server mode.
Definition: session_callbacks.h:293
virtual Reply< std::vector< TrackNamespace >, RequestErrorCode > SubscribeNamespaceReceived(const std::shared_ptr< Session > &session, const TrackNamespace &prefix_namespace, const SubscribeNamespaceAttributes &attributes)
Callback notification for new subscribe namespace received.
virtual void UnsubscribeReceived(const std::shared_ptr< Session > &session, std::uint64_t request_id)
Callback notification on unsubscribe received.
virtual Reply< SubscribeResponse, RequestErrorCode > SubscribeReceived(const std::shared_ptr< Session > &session, std::uint64_t request_id, const FullTrackName &track_full_name, const SubscribeAttributes &subscribe_attributes)
Callback notification for new subscribe received.
virtual void UnsubscribeNamespaceReceived(const std::shared_ptr< Session > &session, const TrackNamespace &prefix_namespace)
Callback notification for unsubscribe namespace received.
virtual Reply< std::vector< TrackNamespace >, RequestErrorCode > SubscribeTracksReceived(const std::shared_ptr< Session > &session, const TrackNamespace &prefix_namespace, const SubscribeNamespaceAttributes &attributes)
Callback notification for new subscribe tracks received.
virtual void OnStreamClosed(std::uint64_t stream_id, StreamClosedFlag flag)
Notify that a server-side QUIC stream closed.
virtual void PublishDoneReceived(const std::shared_ptr< Session > &session, std::uint64_t request_id)
Callback notification on publish done received.
virtual void PublishNamespaceDoneReceived(const std::shared_ptr< Session > &session, std::uint64_t request_id)
Callback notification for publish namespace done received.
virtual ~ServerCallbacks()=default
Destroy the server callback interface.
virtual Reply< void, ErrorCode > NewGroupRequested(const FullTrackName &track_full_name, std::uint64_t group_id)
New group requested received by a subscription.
Peer setup attributes.
Definition: attributes.h:39
Attributes of an inbound standalone FETCH request.
Definition: attributes.h:126
Subscribe attributes.
Definition: attributes.h:75
Attributes of an inbound namespace subscription request.
Definition: attributes.h:151