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

MOQ track handler for subscribed track. More...

#include <subscribe_track_handler.h>

Inheritance diagram for quicr::SubscribeTrackHandler:
quicr::FetchTrackHandler

Classes

struct  JoiningFetch
 Attributes to use when subscribing with a Joining Fetch. More...

Public Types

enum class  Error : uint8_t { kOk = 0 , kNotAuthorized , kNotSubscribed , kNoData }
 Receive status codes. More...
enum class  Status : uint8_t {
  kOk = 0 , kNotConnected , kError , kNotAuthorized ,
  kNotSubscribed , kPendingResponse , kSendingUnsubscribe , kPaused ,
  kNewGroupRequested
}
 Status codes for the subscribe track. More...

Public Member Functions

constexpr Status GetStatus () const noexcept
 Get the status of the subscribe.
void SetPriority (uint8_t priority) noexcept
 Set the priority of received data.
constexpr messages::SubscriberPriority GetPriority () const noexcept
 Get subscription priority.
constexpr messages::GroupOrder GetGroupOrder () const noexcept
 Get subscription group order.
constexpr messages::FilterType GetFilterType () const noexcept
 Get subscription filter type.
constexpr std::optional< messages::Location > GetLatestLocation () const noexcept
constexpr void SetLatestLocation (messages::Location new_location) noexcept
std::optional< JoiningFetchGetJoiningFetch () const noexcept
 Get joining fetch info, if any.
void SetTrackAlias (uint64_t track_alias)
 Set the track alias.
std::optional< uint64_t > GetTrackAlias () const noexcept
 Get the track alias.
void SetReceivedTrackAlias (uint64_t track_alias)
 Set the received track alias.
std::optional< uint64_t > GetReceivedTrackAlias () const noexcept
 Get the received track alias.
void Pause () noexcept
 Pause receiving data.
void Resume () noexcept
 Resume receiving data.
void RequestNewGroup () noexcept
 Generate a new group request for this subscription.
std::chrono::milliseconds GetDeliveryTimeout () const noexcept
void SetDeliveryTimeout (std::chrono::milliseconds timeout) noexcept
bool IsPublisherInitiated () const noexcept
 Check if the subscribe is publisher initiated or not.
Callbacks
virtual void ObjectReceived (const ObjectHeaders &object_headers, BytesSpan data)
 Notification of received [full] data object.
virtual void StreamDataRecv (bool is_start, uint64_t stream_id, std::shared_ptr< const std::vector< uint8_t > > data)
 Notification of received stream data slice.
virtual void DgramDataRecv (std::shared_ptr< const std::vector< uint8_t > > data)
 Notification of received datagram data.
virtual void PartialObjectReceived (const ObjectHeaders &object_headers, BytesSpan data)
 Notification of a partial object received data object.
virtual void StatusChanged (Status status)
 Notification of subscribe status.
virtual void MetricsSampled (const SubscribeTrackMetrics &metrics)
 Notification callback to provide sampled metrics.

Static Public Member Functions

static std::shared_ptr< SubscribeTrackHandlerCreate (const FullTrackName &full_track_name, messages::SubscriberPriority priority, messages::GroupOrder group_order=messages::GroupOrder::kAscending, messages::FilterType filter_type=messages::FilterType::kLargestObject)
 Create shared Subscribe track handler.

Public Attributes

SubscribeTrackMetrics subscribe_track_metrics_
 Subscribe metrics for the track.

Protected Member Functions

 SubscribeTrackHandler (const FullTrackName &full_track_name, messages::SubscriberPriority priority, messages::GroupOrder group_order, messages::FilterType filter_type, const std::optional< JoiningFetch > &joining_fetch=std::nullopt, bool publisher_initiated=false)
 Subscribe track handler constructor.
void SetStatus (Status status) noexcept
 Set the subscribe status.

Protected Attributes

StreamBuffer< uint8_t > stream_buffer_
uint64_t next_object_id_ { 0 }
uint64_t current_group_id_ { 0 }
bool sent_first_object_ { false }

Detailed Description

MOQ track handler for subscribed track.

MOQ subscribe track handler defines all track related callbacks and functions for subscribe. Track handler operates on a single track (namespace + name).

This extends the base track handler to add subscribe handling

Examples
client.cpp, and server.cpp.

Member Enumeration Documentation

◆ Error

enum class quicr::SubscribeTrackHandler::Error : uint8_t
strong

Receive status codes.

Enumerator
kOk 
kNotAuthorized 
kNotSubscribed 
kNoData 

◆ Status

enum class quicr::SubscribeTrackHandler::Status : uint8_t
strong

Status codes for the subscribe track.

Enumerator
kOk 
kNotConnected 
kError 
kNotAuthorized 
kNotSubscribed 
kPendingResponse 
kSendingUnsubscribe 

In this state, callbacks will not be called,.

kPaused 
kNewGroupRequested 

Constructor & Destructor Documentation

◆ SubscribeTrackHandler()

quicr::SubscribeTrackHandler::SubscribeTrackHandler ( const FullTrackName & full_track_name,
messages::SubscriberPriority priority,
messages::GroupOrder group_order,
messages::FilterType filter_type,
const std::optional< JoiningFetch > & joining_fetch = std::nullopt,
bool publisher_initiated = false )
inlineprotected

Subscribe track handler constructor.

Parameters
full_track_nameFull track name struct
joining_fetchIf set, subscribe with a joining fetch using these attributes.
publisher_initiatedTrue if publisher initiated the subscribe, otherwise False

Member Function Documentation

◆ Create()

std::shared_ptr< SubscribeTrackHandler > quicr::SubscribeTrackHandler::Create ( const FullTrackName & full_track_name,
messages::SubscriberPriority priority,
messages::GroupOrder group_order = messages::GroupOrder::kAscending,
messages::FilterType filter_type = messages::FilterType::kLargestObject )
inlinestatic

Create shared Subscribe track handler.

Parameters
full_track_nameFull track name struct
prioritySubscription priority, if omitted, publisher priority is considered
group_orderOrder for group delivery

◆ DgramDataRecv()

virtual void quicr::SubscribeTrackHandler::DgramDataRecv ( std::shared_ptr< const std::vector< uint8_t > > data)
virtual

Notification of received datagram data.

Event notification to provide the caller the raw data received as a datagram

Parameters
dataShared pointer to the data received

◆ GetDeliveryTimeout()

std::chrono::milliseconds quicr::SubscribeTrackHandler::GetDeliveryTimeout ( ) const
inlinenoexcept

◆ GetFilterType()

messages::FilterType quicr::SubscribeTrackHandler::GetFilterType ( ) const
inlineconstexprnoexcept

Get subscription filter type.

Returns
FilterType value

◆ GetGroupOrder()

messages::GroupOrder quicr::SubscribeTrackHandler::GetGroupOrder ( ) const
inlineconstexprnoexcept

Get subscription group order.

Returns
GroupOrder value

◆ GetJoiningFetch()

std::optional< JoiningFetch > quicr::SubscribeTrackHandler::GetJoiningFetch ( ) const
inlinenoexcept

Get joining fetch info, if any.

◆ GetLatestLocation()

std::optional< messages::Location > quicr::SubscribeTrackHandler::GetLatestLocation ( ) const
inlineconstexprnoexcept

◆ GetPriority()

messages::SubscriberPriority quicr::SubscribeTrackHandler::GetPriority ( ) const
inlineconstexprnoexcept

Get subscription priority.

Returns
Priority value

◆ GetReceivedTrackAlias()

std::optional< uint64_t > quicr::SubscribeTrackHandler::GetReceivedTrackAlias ( ) const
inlinenoexcept

Get the received track alias.

If the track alias is set, it will be returned, otherwise std::nullopt.

Returns
Track alias if set, otherwise std::nullopt.

◆ GetStatus()

Status quicr::SubscribeTrackHandler::GetStatus ( ) const
inlineconstexprnoexcept

Get the status of the subscribe.

Returns
Status of the subscribe

◆ GetTrackAlias()

std::optional< uint64_t > quicr::SubscribeTrackHandler::GetTrackAlias ( ) const
inlinenoexcept

Get the track alias.

If the track alias is set, it will be returned, otherwise std::nullopt.

Returns
Track alias if set, otherwise std::nullopt.
Examples
client.cpp, and server.cpp.

◆ IsPublisherInitiated()

bool quicr::SubscribeTrackHandler::IsPublisherInitiated ( ) const
inlinenoexcept

Check if the subscribe is publisher initiated or not.

Returns
True if publisher initiated, false if initiated by the relay/server

◆ MetricsSampled()

virtual void quicr::SubscribeTrackHandler::MetricsSampled ( const SubscribeTrackMetrics & metrics)
inlinevirtual

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 subscribed metrics for the sample period

◆ ObjectReceived()

virtual void quicr::SubscribeTrackHandler::ObjectReceived ( const ObjectHeaders & object_headers,
BytesSpan data )
virtual

Notification of received [full] data object.

Event notification to provide the caller the received full data object

Warning
This data will be invalided after return of this method
Parameters
object_headersObject headers, must include group and object Ids
dataObject payload data received, MUST match ObjectHeaders::payload_length.
Examples
client.cpp, and server.cpp.

◆ PartialObjectReceived()

virtual void quicr::SubscribeTrackHandler::PartialObjectReceived ( const ObjectHeaders & object_headers,
BytesSpan data )
inlinevirtual

Notification of a partial object received data object.

Event notification to provide the caller the received data object

Warning
This data will be invalided after return of this method
Parameters
object_headersObject headers, must include group and object Ids
dataObject payload data received, can be <= ObjectHeaders::payload_length

◆ Pause()

void quicr::SubscribeTrackHandler::Pause ( )
noexcept

Pause receiving data.

Pause will send a MoQT SUBSCRIBE_UPDATE to change the forwarding state to be stopped *

◆ RequestNewGroup()

void quicr::SubscribeTrackHandler::RequestNewGroup ( )
noexcept

Generate a new group request for this subscription.

Examples
client.cpp, and server.cpp.

◆ Resume()

void quicr::SubscribeTrackHandler::Resume ( )
noexcept

Resume receiving data.

Rresume will send a MoQT SUBSCRIBE_UPDATE to change the forwarding state to send

◆ SetDeliveryTimeout()

void quicr::SubscribeTrackHandler::SetDeliveryTimeout ( std::chrono::milliseconds timeout)
inlinenoexcept

◆ SetLatestLocation()

void quicr::SubscribeTrackHandler::SetLatestLocation ( messages::Location new_location)
inlineconstexprnoexcept

◆ SetPriority()

void quicr::SubscribeTrackHandler::SetPriority ( uint8_t priority)
inlinenoexcept

Set the priority of received data.

Parameters
priorityPriority value of received data

◆ SetReceivedTrackAlias()

void quicr::SubscribeTrackHandler::SetReceivedTrackAlias ( uint64_t track_alias)
inline

Set the received track alias.

Parameters
track_aliasMoQ track alias for track namespace+name that is relative to the QUIC connection session

◆ SetStatus()

void quicr::SubscribeTrackHandler::SetStatus ( Status status)
inlineprotectednoexcept

Set the subscribe status.

Parameters
statusStatus of the subscribe

◆ SetTrackAlias()

void quicr::SubscribeTrackHandler::SetTrackAlias ( uint64_t track_alias)
inline

Set the track alias.

Parameters
track_aliasMoQ track alias for track namespace+name that is relative to the QUIC connection session

◆ StatusChanged()

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

Notification of subscribe status.

Notification of the subscribe status

Parameters
statusIndicates status of the subscribe
Examples
client.cpp, and server.cpp.

◆ StreamDataRecv()

virtual void quicr::SubscribeTrackHandler::StreamDataRecv ( bool is_start,
uint64_t stream_id,
std::shared_ptr< const std::vector< uint8_t > > data )
virtual

Notification of received stream data slice.

Event notification to provide the caller the raw data received on a stream

Parameters
is_startTrue to indicate if this data is the start of a new stream
stream_idStream ID data was received on
dataShared pointer to the data received

Reimplemented in quicr::FetchTrackHandler.

Member Data Documentation

◆ current_group_id_

uint64_t quicr::SubscribeTrackHandler::current_group_id_ { 0 }
protected

◆ next_object_id_

uint64_t quicr::SubscribeTrackHandler::next_object_id_ { 0 }
protected

◆ sent_first_object_

bool quicr::SubscribeTrackHandler::sent_first_object_ { false }
protected

◆ stream_buffer_

StreamBuffer<uint8_t> quicr::SubscribeTrackHandler::stream_buffer_
protected

◆ subscribe_track_metrics_

SubscribeTrackMetrics quicr::SubscribeTrackHandler::subscribe_track_metrics_

Subscribe metrics for the track.

Subscribe metrics are updated real-time and transport quic metrics on metrics_sample_ms period.


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