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

MOQ Implementation supporting both client and server modes. More...

#include <transport.h>

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

Classes

struct  ConnectionRemoteInfo
 Connection remote information. More...

Public Types

enum class  Status : uint8_t {
  kReady = 0 , kNotReady , kInternalError , kInvalidParams ,
  kConnecting , kDisconnecting , kNotConnected , kFailedToConnect ,
  kPendingServerSetup
}
 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

 Transport ()=delete
 Transport (const ClientConfig &cfg, std::shared_ptr< TickService > tick_service)
 Client mode Constructor to create the MOQ instance.
 Transport (const ServerConfig &cfg, std::shared_ptr< TickService > tick_service)
 Server mode Constructor to create the MOQ instance.
 ~Transport ()
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, bool new_group_request=false)
 Update Subscription to a track.
void PublishTrack (ConnectionHandle connection_handle, std::shared_ptr< PublishTrackHandler > track_handler)
 Publish to a track.
void PublishTrackSub (ConnectionHandle connection_handle, std::shared_ptr< PublishTrackHandler > track_handler)
 Publish to a track and force subscribe.
void UnpublishTrack (ConnectionHandle connection_handle, const std::shared_ptr< PublishTrackHandler > &track_handler)
 Unpublish track.
virtual bool FetchReceived (ConnectionHandle connection_handle, uint64_t request_id, const FullTrackName &track_full_name, const quicr::messages::FetchAttributes &attributes)
 Event to run on receiving Fetch request.
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.
uint64_t RequestTrackStatus (ConnectionHandle connection_handle, const FullTrackName &track_full_name, const messages::SubscribeAttributes &subscribe_attributes)
 Request track status.
virtual void ResolveTrackStatus (ConnectionHandle connection_handle, uint64_t request_id, uint64_t track_alias, const SubscribeResponse &subscribe_response)
 Accept or reject track status that was received.
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.
virtual void TrackStatusReceived (ConnectionHandle connection_handle, uint64_t request_id, const FullTrackName &track_full_name, const messages::SubscribeAttributes &subscribe_attributes)
 Callback notification for track status message received.
virtual void TrackStatusResponseReceived (ConnectionHandle connection_handle, uint64_t request_id, const SubscribeResponse &response)
 Callback notification for track status OK received.

Protected Member Functions

std::shared_ptr< TransportGetSharedPtr ()
ConnectionContext & GetConnectionContext (ConnectionHandle conn)

Detailed Description

MOQ Implementation supporting both client and server modes.

MoQ implementation is the handler for either a client or server. It can run in only one mode, client or server.

Member Enumeration Documentation

◆ ConnectionStatus

enum class quicr::Transport::ConnectionStatus : uint8_t
strong

Connection status codes.

Enumerator
kNotConnected 
kConnecting 
kConnected 
kIdleTimeout 
kClosedByRemote 

◆ ControlMessageStatus

enum class quicr::Transport::ControlMessageStatus : uint8_t
strong

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
strong

Status of the transport.

Enumerator
kReady 
kNotReady 
kInternalError 
kInvalidParams 
kConnecting 
kDisconnecting 
kNotConnected 
kFailedToConnect 
kPendingServerSetup 

◆ StreamDataMessageStatus

enum class quicr::Transport::StreamDataMessageStatus : uint8_t
strong

Constructor & Destructor Documentation

◆ Transport() [1/3]

quicr::Transport::Transport ( )
delete

◆ Transport() [2/3]

quicr::Transport::Transport ( const ClientConfig & cfg,
std::shared_ptr< TickService > tick_service )

Client mode Constructor to create the MOQ instance.

Parameters
cfgMoQ Instance Client Configuration
tick_serviceShared pointer to the tick service to use

◆ Transport() [3/3]

quicr::Transport::Transport ( const ServerConfig & cfg,
std::shared_ptr< TickService > tick_service )

Server mode Constructor to create the MOQ instance.

Parameters
cfgMoQ Server Configuration
tick_serviceShared pointer to the tick service to use

◆ ~Transport()

quicr::Transport::~Transport ( )

Member Function Documentation

◆ CancelFetchTrack()

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

Cancel Fetch track.

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

◆ FetchReceived()

virtual bool quicr::Transport::FetchReceived ( ConnectionHandle connection_handle,
uint64_t request_id,
const FullTrackName & track_full_name,
const quicr::messages::FetchAttributes & attributes )
virtual

Event to run on receiving Fetch request.

Parameters
connection_handleSource connection ID.
request_idRequest ID received.
track_full_nameTrack full name
attributesFetch attributes received.
Returns
True to indicate fetch will send data, False if no data is within the requested range

Reimplemented in quicr::Client, and quicr::Server.

◆ FetchTrack()

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

Fetch track.

Parameters
connection_handleConnection ID to send fetch
track_handlerTrack handler used for fetching
Examples
server.cpp.

◆ GetConnectionContext()

ConnectionContext & quicr::Transport::GetConnectionContext ( ConnectionHandle conn)
protected

◆ GetSharedPtr()

std::shared_ptr< Transport > quicr::Transport::GetSharedPtr ( )
protected

◆ GetStatus()

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

Get the status of the Client.

Returns
Status of the Client

◆ GetTickService()

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

◆ PublishTrack()

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

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

◆ PublishTrackSub()

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

Publish to a track and force subscribe.

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

◆ RequestTrackStatus()

uint64_t quicr::Transport::RequestTrackStatus ( ConnectionHandle connection_handle,
const FullTrackName & track_full_name,
const messages::SubscribeAttributes & subscribe_attributes )

Request track status.

Parameters
connection_handleSource connection ID.
track_full_nameTrack full name
subscribe_attributesSubscribe attributes for track status
  • Returns
    Request ID that is used for the track status request

◆ ResolveTrackStatus()

virtual void quicr::Transport::ResolveTrackStatus ( ConnectionHandle connection_handle,
uint64_t request_id,
uint64_t track_alias,
const SubscribeResponse & subscribe_response )
virtual

Accept or reject track status that was received.

Accept or reject track status received via TrackStatusReceived(). The MoQ Transport will send the protocol message based on the SubscribeResponse. Per MOQT draft-14, track status request, ok, and error are the same as subscribe

Parameters
connection_handlesource connection ID
request_idRequest ID that was provided by TrackStatusReceived
track_aliasTrack alias for the track
subscribe_responseResponse to the track status request, either Ok or Error. Largest loation should be set if kOk and there is content
Examples
server.cpp.

◆ StatusChanged()

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

Callback notification for status/state change.

Callback notification indicates state change of connection, such as disconnected

Parameters
statusChanged Status value
Examples
client.cpp.

◆ SubscribeTrack()

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

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.

◆ TrackStatusReceived()

virtual void quicr::Transport::TrackStatusReceived ( ConnectionHandle connection_handle,
uint64_t request_id,
const FullTrackName & track_full_name,
const messages::SubscribeAttributes & subscribe_attributes )
virtual

Callback notification for track status message received.

Note
The caller MUST respond to this via ResolveTrackStatus(). If the caller does not override this method, the default will call ResolveTrackStatus() with the status of OK
Parameters
connection_handleSource connection ID
request_idRequest ID received
track_full_nameTrack full name
subscribe_attributesSubscribe attributes received
Examples
server.cpp.

◆ TrackStatusResponseReceived()

virtual void quicr::Transport::TrackStatusResponseReceived ( ConnectionHandle connection_handle,
uint64_t request_id,
const SubscribeResponse & response )
virtual

Callback notification for track status OK received.

Note
The caller is able to state track the OK based on the request Id returned from RequestTrackStatus method call
Parameters
connection_handleSource connection ID
request_idRequest ID received
responseTrack status (track_status = Subscribe) response
Examples
client.cpp.

◆ UnpublishTrack()

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

Unpublish track.

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

◆ UnsubscribeTrack()

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

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,
bool new_group_request = false )

Update Subscription to a track.

Parameters
connection_handleConnection ID to send subscribe
track_handlerTrack handler to use for track related functions and callbacks
new_group_requestTrue to add new group request parameter
Examples
server.cpp.

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