LibQuicR
Loading...
Searching...
No Matches
quicr::Client Class Reference

MoQ Client. More...

#include <client.h>

Inheritance diagram for quicr::Client:
quicr::Transport

Public Types

enum class  Status : uint8_t {
  kReady = 0 , kNotReady , kInternalError , kInvalidParams ,
  kConnecting , kDisconnecting , kNotConnected , kFailedToConnect ,
  kPendingSeverSetup
}
 Status of the transport. More...
 
enum class  ControlMessageStatus : uint8_t {
  kMessageIncomplete , kMessageComplete , kStreamBufferCannotBeZero , kStreamBufferMissingType ,
  kUnsupportedMessageType
}
 Control message status codes. More...
 
enum class  StreamDataMessageStatus : uint8_t
 
enum class  ConnectionStatus : uint8_t {
  kNotConnected = 0 , kConnecting , kConnected , kIdleTimeout ,
  kClosedByRemote
}
 Connection status codes. More...
 

Public Member Functions

 Client (const ClientConfig &cfg)
 MoQ Client Constructor to create the client mode instance.
 
 ~Client ()=default
 
Status Connect ()
 Starts a client connection via a transport thread.
 
Status Disconnect ()
 Disconnect the client connection gracefully.
 
PublishAnnounceStatus GetAnnounceStatus (const TrackNamespace &track_namespace)
 Get announce status for namespace.
 
void SubscribeTrack (std::shared_ptr< SubscribeTrackHandler > track_handler)
 Subscribe to a track.
 
void UnsubscribeTrack (std::shared_ptr< SubscribeTrackHandler > track_handler)
 Unsubscribe track.
 
void PublishAnnounce (const TrackNamespace &track_namespace)
 Publish a track namespace.
 
void PublishUnannounce (const TrackNamespace &track_namespace)
 Unannounce a publish namespace.
 
void SubscribeAnnounces (const TrackNamespace &prefix_namespace)
 Subscribe Announces to prefix namespace.
 
void UnsubscribeAnnounces (const TrackNamespace &prefix_namespace)
 Unsubscribe announces to prefix namespace.
 
void PublishTrack (std::shared_ptr< PublishTrackHandler > track_handler)
 Publish to a track.
 
void UnpublishTrack (std::shared_ptr< PublishTrackHandler > track_handler)
 Unpublish track.
 
void FetchTrack (std::shared_ptr< FetchTrackHandler > track_handler)
 Fetch track.
 
void CancelFetchTrack (std::shared_ptr< FetchTrackHandler > track_handler)
 Cancel a given Fetch track handler.
 
std::optional< ConnectionHandleGetConnectionHandle () const
 Get the connection handle.
 
const std::shared_ptr< TickService > & GetTickService () const noexcept
 
void SubscribeTrack (ConnectionHandle connection_handle, std::shared_ptr< SubscribeTrackHandler > track_handler)
 Subscribe to a track.
 
void UnsubscribeTrack (ConnectionHandle connection_handle, const std::shared_ptr< SubscribeTrackHandler > &track_handler)
 Unsubscribe track.
 
void UpdateTrackSubscription (ConnectionHandle connection_handle, std::shared_ptr< SubscribeTrackHandler > track_handler)
 Update Subscription to a track.
 
void PublishTrack (ConnectionHandle connection_handle, std::shared_ptr< PublishTrackHandler > track_handler)
 Publish to a track.
 
void UnpublishTrack (ConnectionHandle connection_handle, const std::shared_ptr< PublishTrackHandler > &track_handler)
 Unpublish track.
 
void FetchTrack (ConnectionHandle connection_handle, std::shared_ptr< FetchTrackHandler > track_handler)
 Fetch track.
 
void CancelFetchTrack (ConnectionHandle connection_handle, std::shared_ptr< FetchTrackHandler > track_handler)
 Cancel Fetch track.
 
Status GetStatus () const noexcept
 Get the status of the Client.
 
Client Callbacks

client transport specific callbacks

virtual void ServerSetupReceived (const ServerSetupAttributes &server_setup_attributes)
 Callback on server setup message.
 
virtual void AnnounceStatusChanged (const TrackNamespace &track_namespace, const PublishAnnounceStatus status)
 Notification on publish announcement status change.
 
virtual void AnnounceReceived (const TrackNamespace &track_namespace, const PublishAnnounceAttributes &announce_attributes)
 Callback notification for announce received by subscribe announces.
 
virtual void UnannounceReceived (const TrackNamespace &track_namespace)
 Callback notification for unannounce received by subscribe announces.
 
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.
 
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 MetricsSampled (const ConnectionMetrics &metrics) override
 Notification callback to provide sampled metrics.
 
Base Calbacks

Both client and server implement the same transport base callbacks

virtual void StatusChanged (Status status)
 Callback notification for status/state change.
 

Detailed Description

MoQ Client.

MoQ Client is the handler of the MoQ QUIC transport IP connection.

Examples
client.cpp.

Member Enumeration Documentation

◆ ConnectionStatus

enum class quicr::Transport::ConnectionStatus : uint8_t
stronginherited

Connection status codes.

Enumerator
kNotConnected 
kConnecting 
kConnected 
kIdleTimeout 
kClosedByRemote 

◆ ControlMessageStatus

enum class quicr::Transport::ControlMessageStatus : uint8_t
stronginherited

Control message status codes.

Enumerator
kMessageIncomplete 

control message is incomplete and more data is needed

kMessageComplete 

control message is complete and stream buffer get any has complete message

kStreamBufferCannotBeZero 

stream buffer cannot be zero when parsing message type

kStreamBufferMissingType 

connection context is missing message type

kUnsupportedMessageType 

Unsupported MOQT message type.

◆ Status

enum class quicr::Transport::Status : uint8_t
stronginherited

Status of the transport.

Enumerator
kReady 
kNotReady 
kInternalError 
kInvalidParams 
kConnecting 
kDisconnecting 
kNotConnected 
kFailedToConnect 
kPendingSeverSetup 

◆ StreamDataMessageStatus

enum class quicr::Transport::StreamDataMessageStatus : uint8_t
stronginherited

Constructor & Destructor Documentation

◆ Client()

quicr::Client::Client ( const ClientConfig & cfg)
inline

MoQ Client Constructor to create the client mode instance.

Parameters
cfgMoQ Client Configuration

◆ ~Client()

quicr::Client::~Client ( )
default

Member Function Documentation

◆ AnnounceReceived()

virtual void quicr::Client::AnnounceReceived ( const TrackNamespace & track_namespace,
const PublishAnnounceAttributes & announce_attributes )
virtual

Callback notification for announce received by subscribe announces.

Parameters
track_namespaceTrack namespace
announce_attributesPublish announce attributes received
Examples
client.cpp.

◆ AnnounceStatusChanged()

virtual void quicr::Client::AnnounceStatusChanged ( const TrackNamespace & track_namespace,
const PublishAnnounceStatus status )
virtual

Notification on publish announcement status change.

Callback notification for a change in publish announcement status

Parameters
track_namespaceTrack namespace to announce
statusPublish announce status

◆ CancelFetchTrack() [1/2]

void quicr::Client::CancelFetchTrack ( std::shared_ptr< FetchTrackHandler > track_handler)
inline

Cancel a given Fetch track handler.

Parameters
track_handlerThe given Fetch track handler to cancel.

◆ CancelFetchTrack() [2/2]

void quicr::Transport::CancelFetchTrack ( ConnectionHandle connection_handle,
std::shared_ptr< FetchTrackHandler > track_handler )
inherited

Cancel Fetch track.

Parameters
connection_handleConnection ID to send fetch cancel.
track_handlerFetch Track handler to cancel.

◆ Connect()

Status quicr::Client::Connect ( )

Starts a client connection via a transport thread.

Makes a client connection session and runs in a newly created thread. All control and track callbacks will be run based on events.

Returns
Status indicating state or error. If successful, status will be kClientConnecting.

◆ Disconnect()

Status quicr::Client::Disconnect ( )

Disconnect the client connection gracefully.

Unsubscribes and unpublishes all remaining active ones, sends MoQ control messages for those and then closes the QUIC connection gracefully. Stops the transport thread. The class destructor calls this method as well. Status will be updated to reflect not connected.

Returns
Status of kDisconnecting

◆ FetchTrack() [1/2]

void quicr::Client::FetchTrack ( std::shared_ptr< FetchTrackHandler > track_handler)
inline

Fetch track.

Parameters
track_handlerTrack handler to use for handling Fetch related messages.

◆ FetchTrack() [2/2]

void quicr::Transport::FetchTrack ( ConnectionHandle connection_handle,
std::shared_ptr< FetchTrackHandler > track_handler )
inherited

Fetch track.

Parameters
connection_handleConnection ID to send fetch
track_handlerTrack handler used for fetching

◆ GetAnnounceStatus()

PublishAnnounceStatus quicr::Client::GetAnnounceStatus ( const TrackNamespace & track_namespace)

Get announce status for namespace.

Parameters
track_namespaceTrack namespace of the announcement
Returns
PublishAnnounceStatus of the namespace

◆ GetConnectionHandle()

std::optional< ConnectionHandle > quicr::Client::GetConnectionHandle ( ) const
inline

Get the connection handle.

Returns
ConnectionHandle of the client

◆ GetStatus()

Status quicr::Transport::GetStatus ( ) const
inlinenoexceptinherited

Get the status of the Client.

Returns
Status of the Client

◆ GetTickService()

const std::shared_ptr< TickService > & quicr::Transport::GetTickService ( ) const
inlinenoexceptinherited

◆ MetricsSampled()

void quicr::Client::MetricsSampled ( const ConnectionMetrics & metrics)
overridevirtual

Notification callback to provide sampled metrics.

Callback will be triggered on Config::metrics_sample_ms to provide the sampled data based on the sample period. After this callback, the period/sample based metrics will reset and start over for the new period.

Parameters
metricsCopy of the connection metrics for the sample period

Reimplemented from quicr::Transport.

◆ PublishAnnounce()

void quicr::Client::PublishAnnounce ( const TrackNamespace & track_namespace)

Publish a track namespace.

In MoQ, a publish namespace will result in an announce being sent. Announce OK will be reflected in the Status() of the PublishTrackHandler passed. This method can be called at any time, but normally it would be called before publishing any tracks to the same namespace.

If this method is called after a publish track with a matching namespace that already exists or if called more than once, this will result in this track handler being added to the active state of the announce, but it will not result in a repeated announce being sent. Adding track handler to the announce state ensures that the announce will remain active if the other tracks are removed.

Note
The PublishTrackHandler with this method only needs to have the FullTrackName::name_space defined. Name and track alias is not used.
Parameters
track_namespaceTrack handler to use for track related functions and callbacks

◆ PublishTrack() [1/2]

void quicr::Client::PublishTrack ( std::shared_ptr< PublishTrackHandler > track_handler)
inline

Publish to a track.

Parameters
track_handlerTrack handler to use for track related functions and callbacks

◆ PublishTrack() [2/2]

void quicr::Transport::PublishTrack ( ConnectionHandle connection_handle,
std::shared_ptr< PublishTrackHandler > track_handler )
inherited

Publish to a track.

Parameters
connection_handleConnection ID from transport for the QUIC connection context
track_handlerTrack handler to use for track related functions and callbacks

◆ PublishUnannounce()

void quicr::Client::PublishUnannounce ( const TrackNamespace & track_namespace)

Unannounce a publish namespace.

Unannounce a publish namespace. ALL tracks will be marked unpublish, as if called by UnpublishTrack()

Parameters
track_namespaceTrack namespace to unannounce

◆ ResolveSubscribe()

virtual void quicr::Client::ResolveSubscribe ( ConnectionHandle connection_handle,
uint64_t subscribe_id,
const SubscribeResponse & subscribe_response )
virtual

Accept or reject an subscribe that was received.

Accept or reject an subscribe received via SubscribeReceived(). The MoQ Transport will send the protocol message based on the SubscribeResponse

Parameters
connection_handlesource connection ID
subscribe_idsubscribe ID
subscribe_responseresponse to for the subscribe

◆ ServerSetupReceived()

virtual void quicr::Client::ServerSetupReceived ( const ServerSetupAttributes & server_setup_attributes)
virtual

Callback on server setup message.

Server will send sever setup in response to client setup message sent. This callback is called when a server setup has been received.

Parameters
server_setup_attributesServer setup attributes received

◆ StatusChanged()

virtual void quicr::Transport::StatusChanged ( Status status)
inlinevirtualinherited

Callback notification for status/state change.

Callback notification indicates state change of connection, such as disconnected

Parameters
statusChanged Status value
Examples
client.cpp.

◆ SubscribeAnnounces()

void quicr::Client::SubscribeAnnounces ( const TrackNamespace & prefix_namespace)
inline

Subscribe Announces to prefix namespace.

Note
SubscribeAnnouncesStatusChanged will be called after receiving either an OK or ERROR
Parameters
prefix_namespacePrefix namespace to subscribe announces

◆ SubscribeAnnouncesStatusChanged()

virtual void quicr::Client::SubscribeAnnouncesStatusChanged ( const TrackNamespace & track_namespace,
std::optional< messages::SubscribeAnnouncesErrorCode > error_code,
std::optional< messages::ReasonPhrase > reason )
virtual

Callback notification for subscribe announces OK or Error.

error_code and reason will be nullopt is the announces status is OK and accepted. If error, the error_code and reason will be set to indicate the error.

Parameters
track_namespaceTrack namespace
error_codeSet if there is an error; error code
reasonSet if there is an error; reason phrase
Examples
client.cpp.

◆ SubscribeTrack() [1/2]

void quicr::Client::SubscribeTrack ( std::shared_ptr< SubscribeTrackHandler > track_handler)
inline

Subscribe to a track.

Parameters
track_handlerTrack handler to use for track related functions and callbacks

◆ SubscribeTrack() [2/2]

void quicr::Transport::SubscribeTrack ( ConnectionHandle connection_handle,
std::shared_ptr< SubscribeTrackHandler > track_handler )
inherited

Subscribe to a track.

Parameters
connection_handleConnection ID to send subscribe
track_handlerTrack handler to use for track related functions and callbacks
Examples
server.cpp.

◆ UnannounceReceived()

virtual void quicr::Client::UnannounceReceived ( const TrackNamespace & track_namespace)
virtual

Callback notification for unannounce received by subscribe announces.

Parameters
track_namespaceTrack namespace
Examples
client.cpp.

◆ UnpublishedSubscribeReceived()

virtual void quicr::Client::UnpublishedSubscribeReceived ( const FullTrackName & track_full_name,
const SubscribeAttributes & subscribe_attributes )
virtual

Callback notification for new subscribe received that doesn't match an existing publish track.

When a new subscribe is received that doesn't match any existing publish track, this method will be called to signal the client application that there is a new subscribe full track name. The client app should PublishTrack() within this callback (or afterwards) and return true if the subscribe is accepted and publishing will commence. If the subscribe is rejected and a publish track will not begin, then false should be returned. The Transport will send the appropriate message to indicate the accept/reject.

Note
The caller MUST respond to this via ResolveSubscribe(). If the caller does not override this method, the default will call ResolveSubscribe() with the status of error as not exists.
Parameters
track_full_nameTrack full name
subscribe_attributesSubscribe attributes received

◆ UnpublishTrack() [1/2]

void quicr::Client::UnpublishTrack ( std::shared_ptr< PublishTrackHandler > track_handler)
inline

Unpublish track.

Unpublish a track that was previously published

Parameters
track_handlerTrack handler used when published track

◆ UnpublishTrack() [2/2]

void quicr::Transport::UnpublishTrack ( ConnectionHandle connection_handle,
const std::shared_ptr< PublishTrackHandler > & track_handler )
inherited

Unpublish track.

Parameters
connection_handleConnection ID from transport for the QUIC connection context
track_handlerTrack handler used when published track

◆ UnsubscribeAnnounces()

void quicr::Client::UnsubscribeAnnounces ( const TrackNamespace & prefix_namespace)
inline

Unsubscribe announces to prefix namespace.

Parameters
prefix_namespacePrefix namespace to unsubscribe announces

◆ UnsubscribeTrack() [1/2]

void quicr::Client::UnsubscribeTrack ( std::shared_ptr< SubscribeTrackHandler > track_handler)
inline

Unsubscribe track.

Parameters
track_handlerTrack handler to use for track related functions and callbacks

◆ UnsubscribeTrack() [2/2]

void quicr::Transport::UnsubscribeTrack ( ConnectionHandle connection_handle,
const std::shared_ptr< SubscribeTrackHandler > & track_handler )
inherited

Unsubscribe track.

Parameters
connection_handleConnection ID to send subscribe
track_handlerTrack handler to use for track related functions and callbacks
Examples
server.cpp.

◆ UpdateTrackSubscription()

void quicr::Transport::UpdateTrackSubscription ( ConnectionHandle connection_handle,
std::shared_ptr< SubscribeTrackHandler > track_handler )
inherited

Update Subscription to a track.

Parameters
connection_handleConnection ID to send subscribe
track_handlerTrack handler to use for track related functions and callbacks
Examples
server.cpp.

The documentation for this class was generated from the following file: