LibQuicR
Loading...
Searching...
No Matches
quicr::Server Class Referenceabstract

MoQ Server. More...

#include <server.h>

Inheritance diagram for quicr::Server:
quicr::Transport

Classes

struct  AnnounceResponse
 Response to received MOQT Announce message. More...
 
struct  ClientSetupResponse
 Response to received MOQT ClientSetup message. More...
 

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

 Server (const ServerConfig &cfg)
 MoQ Server constructor to create the MOQ server mode instance.
 
 Server (const ServerConfig &cfg, std::shared_ptr< ThreadedTickService > tick_service)
 
 ~Server ()=default
 
Status Start ()
 Starts server transport thread to listen for new connections.
 
void Stop ()
 
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 UnbindPublisherTrack (ConnectionHandle connection_handle, const std::shared_ptr< PublishTrackHandler > &track_handler)
 Unbind a server publish track handler.
 
virtual void ResolveSubscribe (ConnectionHandle connection_handle, uint64_t subscribe_id, const SubscribeResponse &subscribe_response)
 Accept or reject an subscribe that was received.
 
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.
 
Base Calbacks

Both client and server implement the same transport base callbacks

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

Server Calbacks

slient transport specific callbacks

using SubscribeAnnouncesResponse
 Callback notification for new subscribe announces received.
 
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.
 
void MetricsSampled (ConnectionHandle connection_handle, const ConnectionMetrics &metrics) override
 Notification callback to provide sampled metrics.
 
virtual ClientSetupResponse ClientSetupReceived (ConnectionHandle connection_handle, const ClientSetupAttributes &client_setup_attributes)=0
 Callback on client setup message.
 
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.
 
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.
 
virtual std::vector< ConnectionHandleUnannounceReceived (ConnectionHandle connection_handle, const TrackNamespace &track_namespace)=0
 Callback notification for unannounce received.
 
virtual void UnsubscribeAnnouncesReceived (ConnectionHandle connection_handle, const TrackNamespace &prefix_namespace)=0
 Callback notification for Unsubscribe announces received.
 
virtual SubscribeAnnouncesResponse SubscribeAnnouncesReceived (ConnectionHandle connection_handle, const TrackNamespace &prefix_namespace, const PublishAnnounceAttributes &announce_attributes)
 
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.
 
virtual bool FetchReceived (ConnectionHandle connection_handle, uint64_t subscribe_id, const FullTrackName &track_full_name, const FetchAttributes &attributes)
 Callback notification on Fetch message received.
 
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 void FetchCancelReceived (ConnectionHandle connection_handle, uint64_t subscribe_id)=0
 Callback notification on receiving a FetchCancel message.
 
virtual void NewGroupRequested (ConnectionHandle connection_handle, uint64_t subscribe_id, uint64_t track_alias)
 

Detailed Description

MoQ Server.

MoQ Server is the handler of the MoQ QUIC listening socket

Examples
server.cpp.

Member Typedef Documentation

◆ SubscribeAnnouncesResponse

Initial value:
std::pair<std::optional<messages::SubscribeAnnouncesErrorCode>, std::vector<TrackNamespace>>

Callback notification for new subscribe announces received.

Note
The caller must return the appropriate SubscribeAnnouncesErrorCode on error. If no error, nullopt is returned for error code and the vector should contain all the matching track namespaces to the prefix. Each of the returned namespaces will be announced to the subscriber.
Parameters
connection_handleSource connection ID
prefix_namespaceTrack namespace
announce_attributesAnnounces attributes received

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

◆ Server() [1/2]

quicr::Server::Server ( const ServerConfig & cfg)
inline

MoQ Server constructor to create the MOQ server mode instance.

Parameters
cfgMoQ Server Configuration

◆ Server() [2/2]

quicr::Server::Server ( const ServerConfig & cfg,
std::shared_ptr< ThreadedTickService > tick_service )
inline

◆ ~Server()

quicr::Server::~Server ( )
default

Member Function Documentation

◆ AnnounceReceived()

virtual void quicr::Server::AnnounceReceived ( ConnectionHandle connection_handle,
const TrackNamespace & track_namespace,
const PublishAnnounceAttributes & publish_announce_attributes )
virtual

Callback notification for new announce received that needs to be authorized.

Note
The caller MUST respond to this via ResolveAnnounce(). If the caller does not override this method, the default will call ResolveAnnounce() with the status of OK
Parameters
connection_handleSource connection ID
track_namespaceTrack namespace
publish_announce_attributesPublish announce attributes received
Examples
server.cpp.

◆ BindPublisherTrack()

void quicr::Server::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.

The server will create a server publish track handler based on a received subscribe. It will use this handler to send objects to subscriber.

Parameters
connection_handleConnection ID of the client/subscriber
subscribe_idSubscribe ID from the received subscribe
track_handlerServer publish track handler
ephemeralBool value to indicate if the state tracking is needed
Examples
server.cpp.

◆ CancelFetchTrack()

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.

◆ ClientSetupReceived()

virtual ClientSetupResponse quicr::Server::ClientSetupReceived ( ConnectionHandle connection_handle,
const ClientSetupAttributes & client_setup_attributes )
pure virtual

Callback on client setup message.

In server mode, client will send a setup message on new connection. Server responds with server setup.

Parameters
connection_handleTransport connection ID
client_setup_attributesDecoded client setup message
Returns
ClientSetupResponse indicating the status of processing the setup message.
Examples
server.cpp.

◆ ConnectionStatusChanged()

void quicr::Server::ConnectionStatusChanged ( ConnectionHandle connection_handle,
ConnectionStatus status )
overridevirtual

Callback notification for connection status/state change.

Callback notification indicates state change of connection, such as disconnected

Parameters
connection_handleTransport connection ID
statusConnectionStatus of connection id

Reimplemented from quicr::Transport.

Examples
server.cpp.

◆ FetchCancelReceived()

virtual void quicr::Server::FetchCancelReceived ( ConnectionHandle connection_handle,
uint64_t subscribe_id )
pure virtual

Callback notification on receiving a FetchCancel message.

Parameters
connection_handleSource connection ID.
subscribe_idSubscribe ID received.

◆ FetchReceived()

virtual bool quicr::Server::FetchReceived ( ConnectionHandle connection_handle,
uint64_t subscribe_id,
const FullTrackName & track_full_name,
const FetchAttributes & attributes )
virtual

Callback notification on Fetch message received.

Parameters
connection_handleSource connection ID.
subscribe_idSubscribe ID received.
track_full_nameTrack full name
attributesFetch attributes received.
Returns
true if user defined conditions of Fetch are satisfied, false otherwise.
Examples
server.cpp.

◆ FetchTrack()

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

◆ 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::Server::MetricsSampled ( ConnectionHandle connection_handle,
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
connection_handleSource connection ID
metricsCopy of the connection metrics for the sample period

Reimplemented from quicr::Transport.

Examples
server.cpp.

◆ NewConnectionAccepted()

void quicr::Server::NewConnectionAccepted ( ConnectionHandle connection_handle,
const ConnectionRemoteInfo & remote )
overridevirtual

Callback notification on new connection.

Callback notification that a new connection has been accepted

Parameters
connection_handleTransport connection ID
remoteTransport remote connection information

Reimplemented from quicr::Transport.

Examples
server.cpp.

◆ NewGroupRequested()

virtual void quicr::Server::NewGroupRequested ( ConnectionHandle connection_handle,
uint64_t subscribe_id,
uint64_t track_alias )
virtual

◆ OnFetchOk()

virtual void quicr::Server::OnFetchOk ( ConnectionHandle connection_handle,
uint64_t subscribe_id,
const FullTrackName & track_full_name,
const FetchAttributes & attributes )
virtual

Event to run on sending FetchOk.

Parameters
connection_handleSource connection ID.
subscribe_idSubscribe ID received.
track_full_nameTrack full name
attributesFetch attributes received.
Examples
server.cpp.

◆ PublishTrack()

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

◆ ResolveAnnounce()

void quicr::Server::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.

Accept or reject an announce received via AnnounceReceived(). The MoQ Transport will send the protocol message based on the AnnounceResponse. Subscribers defined will be sent a copy of the announcement

Parameters
connection_handlesource connection ID
track_namespacetrack namespace
subscribersVector/list of subscriber connection handles that should be sent the announce
announce_responseresponse to for the announcement
Examples
server.cpp.

◆ ResolveSubscribe()

virtual void quicr::Server::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
Examples
server.cpp.

◆ Start()

Status quicr::Server::Start ( )

Starts server transport thread to listen for new connections.

Creates a new transport thread to listen for new connections. All control and track callbacks will be run based on events.

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

◆ 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.

◆ Stop()

void quicr::Server::Stop ( )

Stop the server transport

◆ SubscribeAnnouncesReceived()

virtual SubscribeAnnouncesResponse quicr::Server::SubscribeAnnouncesReceived ( ConnectionHandle connection_handle,
const TrackNamespace & prefix_namespace,
const PublishAnnounceAttributes & announce_attributes )
virtual
Examples
server.cpp.

◆ SubscribeReceived()

virtual void quicr::Server::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 )
virtual

Callback notification for new subscribe received.

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 OK
Parameters
connection_handleSource connection ID
subscribe_idSubscribe ID received
proposed_track_aliasThe proposed track alias the subscriber would like to use
track_full_nameTrack full name
subscribe_attributesSubscribe attributes received
Examples
server.cpp.

◆ SubscribeTrack()

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 std::vector< ConnectionHandle > quicr::Server::UnannounceReceived ( ConnectionHandle connection_handle,
const TrackNamespace & track_namespace )
pure virtual

Callback notification for unannounce received.

The callback will indicate that a new unannounce has been received. The app should return a vector of connection handler ids that should receive a copy of the unannounce. The returned list is based on subscribe announces prefix matching.

Parameters
connection_handleSource connection ID
track_namespaceTrack namespace
Returns
vector of subscribe announces connection handler ids matching prefix to the namespace being unannounced.
Examples
server.cpp.

◆ UnbindPublisherTrack()

void quicr::Server::UnbindPublisherTrack ( ConnectionHandle connection_handle,
const std::shared_ptr< PublishTrackHandler > & track_handler )

Unbind a server publish track handler.

Removes a server publish track handler state.

Parameters
connection_handleConnection ID of the client/subscriber
track_handlerServer publish track handler

◆ UnpublishTrack()

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

◆ UnsubscribeAnnouncesReceived()

virtual void quicr::Server::UnsubscribeAnnouncesReceived ( ConnectionHandle connection_handle,
const TrackNamespace & prefix_namespace )
pure virtual

Callback notification for Unsubscribe announces received.

Parameters
connection_handleSource connection ID
prefix_namespacePrefix namespace
Examples
server.cpp.

◆ UnsubscribeReceived()

virtual void quicr::Server::UnsubscribeReceived ( ConnectionHandle connection_handle,
uint64_t subscribe_id )
pure virtual

Callback notification on unsubscribe received.

Parameters
connection_handleSource connection ID
subscribe_idSubscribe ID received
Examples
server.cpp.

◆ UnsubscribeTrack()

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: