LibQuicR
quicr::PublishTrackHandler Class Reference

MOQ track handler for published track. More...

#include <publish_track_handler.h>

Inheritance diagram for quicr::PublishTrackHandler:
quicr::TrackHandler quicr::PublishFetchHandler

Classes

struct  StreamInfo
 State retained for one open subgroup stream. More...
 

Public Types

enum class  PublishObjectStatus : uint8_t {
  kOk = 0 , kInternalError , kNotAuthorized , kNotAnnounced ,
  kNoSubscribers , kObjectPayloadLengthExceeded , kPreviousObjectTruncated , kNoPreviousObject ,
  kObjectDataComplete , kObjectContinuationDataNeeded , kObjectDataIncomplete , kObjectDataTooLarge ,
  kPreviousObjectNotCompleteMustStartNewGroup , kPreviousObjectNotCompleteMustStartNewTrack , kPaused , kPendingPublishOk ,
  kSubgroupClosed , kFetchClosed
}
 Publish status codes. More...
 
enum class  Status : uint8_t {
  kOk = 0 , kNotConnected , kNotAnnounced , kPendingAnnounceResponse ,
  kAnnounceNotAuthorized , kNoSubscribers , kUnsubscribed , kDoneByFin ,
  kSendingUnannounce , kSubscriptionUpdated , kNewGroupRequested , kPendingPublishOk ,
  kPaused
}
 Status codes for the publish track. More...
 

Public Member Functions

void SetPublisherPriority (const uint8_t priority) noexcept
 Sets the publisher priority used in future datagram and subgroup headers. More...
 
void SetPublishObjectPriority (const uint8_t priority) noexcept
 set/update the publish object priority More...
 
constexpr uint8_t GetPublisherPriority () const noexcept
 Get the publisher priority. More...
 
constexpr uint8_t GetPublishObjectPriority () const noexcept
 Get the publish object priority. More...
 
void SetDefaultTTL (const uint32_t ttl) noexcept
 Sets the default transport queue lifetime for future objects. More...
 
uint32_t GetDefaultTTL () const noexcept
 Gets the default transport queue lifetime. More...
 
void SetDefaultTrackMode (const TrackMode track_mode) noexcept
 Changes framing mode for subsequent objects. More...
 
constexpr std::optional< messages::StreamHeaderProperties > GetStreamMode () const noexcept
 Get the current stream mode. More...
 
Status GetStatus () const noexcept
 Get the publish status. More...
 
constexpr messages::Location GetLargestLocation () const noexcept
 Gets the largest/current location observed by publication. More...
 
virtual void StreamClosed (std::uint64_t stream_id, bool reset=false)
 Notification that a stream has been closed. More...
 
bool CanPublish () const noexcept
 Check if the state allows publishing or not. More...
 
void SetTrackAlias (uint64_t track_alias)
 Set the track alias. More...
 
std::optional< uint64_t > GetTrackAlias () const noexcept
 Get the track alias. More...
 
virtual PublishObjectStatus PublishObject (const ObjectHeaders &object_headers, BytesSpan data, std::optional< messages::StreamHeaderProperties > stream_mode=std::nullopt)
 Publish [full] object. More...
 
PublishObjectStatus ForwardPublishedData (bool is_new_stream, uint64_t group_id, uint64_t subgroup_id, std::shared_ptr< const std::vector< uint8_t >> data)
 Forward received object data to subscriber/relay/remote client. More...
 
virtual void EndSubgroup (uint64_t group_id, uint64_t subgroup_id, bool completed=true)
 Ends the subgroup as completed or not. More...
 
void EndAllSubgroups (bool completed)
 End every subgroup still open on this track. More...
 
void SetStatus (Status status) noexcept
 Set the publish status. More...
 
template<typename T >
requires std::is_base_of_v< TrackHandler, T > std::shared_ptr< T > Get ()
 Get the derived type of the track handler. More...
 
void SetRequestId (std::optional< uint64_t > request_id)
 Sets or clears the connection-scoped request ID. More...
 
std::optional< uint64_t > GetRequestId () const noexcept
 Get the request ID. More...
 
std::optional< uint64_t > GetRequestStreamId () const
 Get the stream ID of the request control stream. More...
 
FullTrackName GetFullTrackName () const noexcept
 Get the full track name. More...
 
uint64_t GetConnectionId () const noexcept
 Gets the transport connection identifier assigned by the session. More...
 
std::shared_ptr< Connection > GetConnection () const
 
Binding GetBinding () const
 
virtual void RequestError (ErrorCode error_code, std::string reason)
 Handles a REQUEST_ERROR for this handler. More...
 
Callbacks
virtual void StatusChanged (Status status)
 Notification of publish track status change. More...
 
virtual void MetricsSampled (const PublishTrackMetrics &metrics)
 Notification callback to provide sampled metrics. More...
 
Reply< messages::Parameters, ErrorCode > RequestUpdateReceived (const messages::Parameters &params) override
 Applies subscriber forwarding and new-group update parameters. More...
 

Static Public Member Functions

static std::shared_ptr< PublishTrackHandler > Create (const FullTrackName &full_track_name, TrackMode track_mode, uint8_t publisher_priority, uint8_t publish_object_priority, uint32_t default_ttl, messages::Location largest_location)
 Create a shared Publish track handler. More...
 

Public Attributes

PublishTrackMetrics publish_track_metrics_
 Publish metrics for the track. More...
 

Protected Member Functions

 PublishTrackHandler (const FullTrackName &full_track_name, TrackMode track_mode, uint8_t publisher_priority, uint8_t publish_object_priority, uint32_t default_ttl, std::optional< messages::StreamHeaderProperties > stream_mode=std::nullopt, messages::Location largest_location={ 0, 0 })
 Publish track handler constructor. More...
 
void RequestOkReceived (const messages::Parameters &params) override
 Handles PUBLISH_OK or REQUEST_UPDATE_OK parameters. More...
 
void SetTransport (std::shared_ptr< Session > transport)
 Sets the session used for control and data operations. More...
 
const std::weak_ptr< Session > & GetSession () const noexcept
 Gets the non-owning session handle. More...
 

Protected Attributes

std::atomic< Status > publish_status_ { Status::kNotAnnounced }
 Atomic publication state; does not synchronize the remaining fields. More...
 
TrackMode default_track_mode_
 Framing mode used for the next object. More...
 
std::optional< messages::StreamHeaderProperties > stream_mode_
 Default subgroup framing properties; populated for stream mode. More...
 
uint8_t publisher_priority_
 Publisher priority encoded in object headers. More...
 
uint8_t publish_object_priority_
 Subscriber-derived transport scheduling priority. More...
 
uint32_t default_ttl_
 Queue lifetime used when object TTL is absent. More...
 
std::map< std::uint64_t, std::map< std::uint64_t, StreamInfo > > stream_info_by_group_
 Open streams keyed first by group ID and then subgroup ID. More...
 
std::optional< uint64_t > track_alias_
 Connection-scoped track alias required by object framing. More...
 
messages::Location largest_location_
 Largest/current location reported for the track. More...
 
Bytes object_msg_buffer_
 Reusable serialization scratch buffer; invalidated by the next publish/end operation. More...
 
bool support_new_group_request_ { true }
 Whether PUBLISH_OK may request dynamic groups. More...
 
std::optional< uint64_t > pending_new_group_request_id_
 Pending requested group ID, when one has been recorded. More...
 
FullTrackName full_track_name_
 Full track identity retained for the handler's lifetime. More...
 
std::mutex binding_operation_mutex_
 

Detailed Description

MOQ track handler for published track.

Publishes one track using unreliable object datagrams (TrackMode::kDatagram) or reliable streams with one stream per subgroup (TrackMode::kStream). Despite older terminology, there are no stream-per-group or stream-per-track modes. Publishing methods and mutable configuration are not internally serialized; callers must not invoke them concurrently.

Member Enumeration Documentation

◆ PublishObjectStatus

Publish status codes.

Enumerator
kOk 

Object or bytes were queued successfully.

kInternalError 

Required session/stream state was unavailable or invalid.

kNotAuthorized 

Peer denied publication.

kNotAnnounced 

Track is not ready/connected/announced.

kNoSubscribers 

No active subscriber/request ID exists.

kObjectPayloadLengthExceeded 

Legacy continuation status; not returned by current implementation.

kPreviousObjectTruncated 

Legacy continuation status; not returned by current implementation.

kNoPreviousObject 

Legacy continuation status; not returned by current implementation.

kObjectDataComplete 

Legacy continuation status; not returned by current implementation.

kObjectContinuationDataNeeded 

Legacy continuation status; not returned by current implementation.

kObjectDataIncomplete 

PublishObject() was called when continuation data remains.

kObjectDataTooLarge 

Indicates that the published object data is too large based on the object header payload size plus any/all data that was sent already. Legacy continuation status; not returned by current implementation.

kPreviousObjectNotCompleteMustStartNewGroup 

Previous object payload has not been completed and new object cannot start in per-group track mode unless new group is used. Legacy status; current subgroup streams are independent.

kPreviousObjectNotCompleteMustStartNewTrack 

Previous object payload has not been completed and new object cannot start in per-track track mode without creating a new track. This requires to unpublish and to publish track again. Legacy status; not returned by current implementation.

kPaused 

Forwarding is paused by subscription state.

kPendingPublishOk 

A publisher-initiated PUBLISH awaits acknowledgement.

kSubgroupClosed 

This subgroup is closed and cannot be published to.

kFetchClosed 

This fetch request is over and cannot accept more objects.

◆ Status

enum quicr::PublishTrackHandler::Status : uint8_t
strong

Status codes for the publish track.

Note
kOk is not the only status that means it is okay to publish. CanPublish() method should be used to determine if the status is okay to still publish or not.
Enumerator
kOk 

Publication is ready to queue objects.

kNotConnected 

Transport is disconnected.

kNotAnnounced 

Track is not announced/active.

kPendingAnnounceResponse 

Waiting for announce acceptance.

kAnnounceNotAuthorized 

Peer denied the announcement.

kNoSubscribers 

No subscriber is currently bound.

kUnsubscribed 

Subscriber ended the subscription.

kDoneByFin 

Request stream ended normally.

kSendingUnannounce 

In this state, callbacks will not be called.

kSubscriptionUpdated 

Subscription parameters changed; next publish normalizes to kOk.

kNewGroupRequested 

Subscriber requested a new group; next publish normalizes to kOk.

kPendingPublishOk 

Waiting for acknowledgement of publisher-initiated publish.

kPaused 

Subscriber disabled forwarding.

Constructor & Destructor Documentation

◆ PublishTrackHandler()

quicr::PublishTrackHandler::PublishTrackHandler ( const FullTrackName &  full_track_name,
TrackMode  track_mode,
uint8_t  publisher_priority,
uint8_t  publish_object_priority,
uint32_t  default_ttl,
std::optional< messages::StreamHeaderProperties >  stream_mode = std::nullopt,
messages::Location  largest_location = { 0, 0 } 
)
protected

Publish track handler constructor.

Parameters
full_track_nameFull track name
track_modeThe track mode to operate using
publisher_priorityPublisher priority of origin publisher
publish_object_priorityPublish object priority for objects being sent (set by Subscriber priority)
default_ttlDefault transport queue lifetime when object headers omit TTL.
stream_modeStream to use when track mode is kStream.
largest_locationLargest location to start the handler
Exceptions
std::invalid_argumentif datagram mode is combined with stream properties.

Stream mode defaults to explicit subgroup IDs with the library's standard subgroup framing properties when stream_mode is omitted.

Member Function Documentation

◆ CanPublish()

bool quicr::PublishTrackHandler::CanPublish ( ) const
inlinenoexcept

Check if the state allows publishing or not.

Returns
true only for kOk, kNewGroupRequested, or kSubscriptionUpdated.

◆ Create()

static std::shared_ptr<PublishTrackHandler> quicr::PublishTrackHandler::Create ( const FullTrackName &  full_track_name,
TrackMode  track_mode,
uint8_t  publisher_priority,
uint8_t  publish_object_priority,
uint32_t  default_ttl,
messages::Location  largest_location 
)
inlinestatic

Create a shared Publish track handler.

Parameters
full_track_nameFull track name
track_modeThe track mode to operate using
publisher_priorityPublisher priority of origin publisher
publish_object_priorityPublish object priority for objects being sent
default_ttlDefault TTL for objects if not specified in ObjectHeaderss
largest_locationLargest location to start handler at
Returns
Shared ownership of the new handler.
Examples
simple_publish/main.cpp.

◆ EndAllSubgroups()

void quicr::PublishTrackHandler::EndAllSubgroups ( bool  completed)

End every subgroup still open on this track.

Called by the session when the track is unbound, so that subgroups the application never ended do not keep their streams open for the life of the connection.

Parameters
completedIf all have finished, drain and close with FIN. If false, end abruptly with RESET.
Note
Silently leaves bookkeeping unchanged if no live session exists.

◆ EndSubgroup()

virtual void quicr::PublishTrackHandler::EndSubgroup ( uint64_t  group_id,
uint64_t  subgroup_id,
bool  completed = true 
)
virtual

Ends the subgroup as completed or not.

Applications must call this to release an open stream-mode subgroup. With completed == true, an empty close marker is queued after existing data; otherwise the stream is reset immediately. The subgroup is then removed from local bookkeeping. Silently does nothing without a live session or matching open subgroup.

Parameters
group_idGroup containing the subgroup.
subgroup_idSubgroup stream to end.
completedtrue for orderly drain-and-close, false to reset.

◆ ForwardPublishedData()

PublishObjectStatus quicr::PublishTrackHandler::ForwardPublishedData ( bool  is_new_stream,
uint64_t  group_id,
uint64_t  subgroup_id,
std::shared_ptr< const std::vector< uint8_t >>  data 
)

Forward received object data to subscriber/relay/remote client.

This method is similar to PublishObject except that the data forwarded is byte array level data, which should have already been encoded upon receive from the origin publisher. Relays implement this method to forward bytes received to subscriber connection.

Parameters
is_new_streamIndicates if this data starts a new stream
group_idGroup ID for stream
subgroup_idSubgroup ID for stream
dataMoQ data to send
Returns
Publication result. In stream mode, is_new_stream == true currently returns kObjectDataIncomplete; the caller must first establish stream bookkeeping through PublishObject. Missing subgroup bookkeeping returns kInternalError.
Exceptions
TransportExceptionif enqueueing fails.

Shared ownership of data is passed to the transport without copying. In datagram mode bytes are sent unreliably as already encoded; in stream mode they are appended to the existing subgroup stream.

◆ Get()

template<typename T >
requires std::is_base_of_v<TrackHandler, T> std::shared_ptr<T> quicr::TrackHandler::Get ( )
inlineinherited

Get the derived type of the track handler.

Template Parameters
TDerived type of the track handler.
Returns
Shared ownership cast to T, or null when the dynamic type is incompatible.
Exceptions
std::bad_weak_ptrif this object is not currently owned by a shared_ptr.

◆ GetBinding()

Binding quicr::TrackHandler::GetBinding ( ) const
inlineinherited

◆ GetConnection()

std::shared_ptr<Connection> quicr::TrackHandler::GetConnection ( ) const
inherited

◆ GetConnectionId()

uint64_t quicr::TrackHandler::GetConnectionId ( ) const
inlinenoexceptinherited

Gets the transport connection identifier assigned by the session.

Returns
Connection ID, or the initial value zero before assignment.

◆ GetDefaultTTL()

uint32_t quicr::PublishTrackHandler::GetDefaultTTL ( ) const
inlinenoexcept

Gets the default transport queue lifetime.

Returns
Configured default TTL.

◆ GetFullTrackName()

FullTrackName quicr::TrackHandler::GetFullTrackName ( ) const
inlinenoexceptinherited

Get the full track name.

Returns
A copy of the full track name.

◆ GetLargestLocation()

constexpr messages::Location quicr::PublishTrackHandler::GetLargestLocation ( ) const
inlineconstexprnoexcept

Gets the largest/current location observed by publication.

Returns
Stored location. The group advances monotonically; within the current group the object component is the most recently published object ID.

◆ GetPublisherPriority()

constexpr uint8_t quicr::PublishTrackHandler::GetPublisherPriority ( ) const
inlineconstexprnoexcept

Get the publisher priority.

Returns
Priority encoded as the publisher priority.

◆ GetPublishObjectPriority()

constexpr uint8_t quicr::PublishTrackHandler::GetPublishObjectPriority ( ) const
inlineconstexprnoexcept

Get the publish object priority.

Returns
Priority used to schedule newly enqueued object data.

◆ GetRequestId()

std::optional<uint64_t> quicr::TrackHandler::GetRequestId ( ) const
inlinenoexceptinherited

Get the request ID.

Returns
Current connection-scoped request ID, or std::nullopt when none is assigned.

◆ GetRequestStreamId()

std::optional<uint64_t> quicr::TrackHandler::GetRequestStreamId ( ) const
inherited

Get the stream ID of the request control stream.

Returns
Request stream's ID, or std::nullopt if no stream is attached.
Note
Thread-safe with request-stream installation/removal.

◆ GetSession()

const std::weak_ptr<Session>& quicr::TrackHandler::GetSession ( ) const
protectednoexceptinherited

Gets the non-owning session handle.

Returns
Borrowed reference to the stored weak pointer, valid for this handler's lifetime. Callers must lock it before use.

◆ GetStatus()

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

Get the publish status.

Returns
Atomically loaded publication status. Other mutable handler state is not made safe by this atomic accessor.

◆ GetStreamMode()

constexpr std::optional<messages::StreamHeaderProperties> quicr::PublishTrackHandler::GetStreamMode ( ) const
inlineconstexprnoexcept

Get the current stream mode.

Returns
Default subgroup framing properties in stream mode, or std::nullopt in datagram mode.

◆ GetTrackAlias()

std::optional<uint64_t> quicr::PublishTrackHandler::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.

◆ MetricsSampled()

virtual void quicr::PublishTrackHandler::MetricsSampled ( const PublishTrackMetrics &  metrics)
virtual

Notification callback to provide sampled metrics.

Called at the connection metrics cadence, including idle periods. Object, byte, drop, and most QUIC counters are cumulative snapshots; only QUIC min/max/average aggregates are cleared after the callback for the next period.

Parameters
metricsCopy of the published metrics for the sample period
Note
The reference is borrowed for the callback. Copy it to retain a stable snapshot.

◆ PublishObject()

virtual PublishObjectStatus quicr::PublishTrackHandler::PublishObject ( const ObjectHeaders &  object_headers,
BytesSpan  data,
std::optional< messages::StreamHeaderProperties >  stream_mode = std::nullopt 
)
virtual

Publish [full] object.

Encodes and queues one complete object. Datagram mode emits one object datagram. Stream mode creates/reuses the stream identified by (group_id, subgroup_id), emits a subgroup header on first use, and delta-encodes subsequent object IDs. The implementation does not compare data.size() with payload_length; data is the payload that is encoded. A per-object track_mode changes the default mode before encoding subsequent framing, but mode changes while streams are open require application coordination.

Parameters
object_headersObject headers, must include group and object Ids
dataFull complete payload data for the object
stream_modeSubgroup header properties
Returns
Publication result; unsuccessful state checks increment publish_track_metrics_.objects_dropped_not_ok, except a missing request ID.
Exceptions
TransportExceptionif enqueueing fails.
std::bad_optional_accessif required track alias or stream properties were not set.
Note
data is borrowed and copied into an owned queue buffer before return. Calls must be externally serialized.

Reimplemented in quicr::PublishFetchHandler.

◆ RequestError()

virtual void quicr::TrackHandler::RequestError ( ErrorCode  error_code,
std::string  reason 
)
virtualinherited

Handles a REQUEST_ERROR for this handler.

Parameters
error_codePeer-provided request error code.
reasonPeer-provided reason, passed by value for optional retention.
Note
The base implementation intentionally does nothing.

Reimplemented in quicr::TrackStatusHandler, quicr::SubscribeNamespaceHandler, and quicr::PublishNamespaceHandler.

◆ RequestOkReceived()

void quicr::PublishTrackHandler::RequestOkReceived ( const messages::Parameters &  params)
overrideprotectedvirtual

Handles PUBLISH_OK or REQUEST_UPDATE_OK parameters.

Parameters
paramsBorrowed acknowledgement parameters.
Exceptions
messages::ProtocolViolationExceptionfor unsupported PUBLISH_OK parameters or a new-group request when dynamic groups are disabled.

During kPendingPublishOk, validates parameters and resolves forwarding to kOk/kPaused; a new-group status may be transiently set before forwarding is applied. For later update acknowledgements parameters are currently ignored.

Implements quicr::TrackHandler.

◆ RequestUpdateReceived()

Reply<messages::Parameters, ErrorCode> quicr::PublishTrackHandler::RequestUpdateReceived ( const messages::Parameters &  params)
overridevirtual

Applies subscriber forwarding and new-group update parameters.

Parameters
paramsBorrowed update parameters.
Returns
Immediate success with empty acknowledgement parameters.

A present forwarding value changes status to kOk or kPaused; a present new-group request then changes it to kNewGroupRequested. Other parameters are currently ignored.

Implements quicr::TrackHandler.

◆ SetDefaultTrackMode()

void quicr::PublishTrackHandler::SetDefaultTrackMode ( const TrackMode  track_mode)
inlinenoexcept

Changes framing mode for subsequent objects.

Parameters
track_modeDatagram or subgroup-stream framing.
Warning
Changing modes while subgroup streams are open does not close or migrate them; callers must coordinate mode transitions.

◆ SetDefaultTTL()

void quicr::PublishTrackHandler::SetDefaultTTL ( const uint32_t  ttl)
inlinenoexcept

Sets the default transport queue lifetime for future objects.

Parameters
ttlTTL used when ObjectHeaders::ttl is absent.

◆ SetPublisherPriority()

void quicr::PublishTrackHandler::SetPublisherPriority ( const uint8_t  priority)
inlinenoexcept

Sets the publisher priority used in future datagram and subgroup headers.

Parameters
priorityNew protocol priority; already-open subgroup headers are unchanged.

◆ SetPublishObjectPriority()

void quicr::PublishTrackHandler::SetPublishObjectPriority ( const uint8_t  priority)
inlinenoexcept

set/update the publish object priority

Publish object priority is set by subscriber priority, but the client app can update this as needed at any time. The setting will take effect on next datagram object and on next start of group/subgroup

Parameters
priorityNew transport scheduling priority.

◆ SetRequestId()

void quicr::TrackHandler::SetRequestId ( std::optional< uint64_t >  request_id)
inlineinherited

Sets or clears the connection-scoped request ID.

Parameters
request_idRequest ID assigned by the session, or std::nullopt when unbound.
Note
Thread-safe with request-stream installation and removal.

◆ SetStatus()

void quicr::PublishTrackHandler::SetStatus ( Status  status)
inlinenoexcept

Set the publish status.

Parameters
statusStatus of publishing (aka publish objects)

Atomically changes status and invokes StatusChanged only when the value differs. The callback executes synchronously on the caller's thread.

◆ SetTrackAlias()

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

Set the track alias.

Parameters
track_aliasMoQ track alias for this connection.
Note
Must be set before successful publication; publication dereferences the alias.

◆ SetTransport()

void quicr::TrackHandler::SetTransport ( std::shared_ptr< Session >  transport)
protectedinherited

Sets the session used for control and data operations.

Parameters
transportSession retained weakly; passing null clears effective access.
Note
The caller must keep the session alive independently.

◆ StatusChanged()

virtual void quicr::PublishTrackHandler::StatusChanged ( Status  status)
virtual

Notification of publish track status change.

Notification of a change to publish track status, such as when it's ready to publish or not ready to publish

Parameters
statusIndicates the status of being able to publish
Note
Default implementation does nothing. SetStatus() suppresses this callback when the atomic status value is unchanged.

◆ StreamClosed()

virtual void quicr::PublishTrackHandler::StreamClosed ( std::uint64_t  stream_id,
bool  reset = false 
)
virtual

Notification that a stream has been closed.

Parameters
stream_idThe ID of the stream being closed.
resetTrue if stream closed by reset

Removes matching subgroup bookkeeping. The default implementation does not change publication status and currently ignores reset.

Member Data Documentation

◆ binding_operation_mutex_

std::mutex quicr::TrackHandler::binding_operation_mutex_
protectedinherited

◆ default_track_mode_

TrackMode quicr::PublishTrackHandler::default_track_mode_
protected

Framing mode used for the next object.

◆ default_ttl_

uint32_t quicr::PublishTrackHandler::default_ttl_
protected

Queue lifetime used when object TTL is absent.

◆ full_track_name_

FullTrackName quicr::TrackHandler::full_track_name_
protectedinherited

Full track identity retained for the handler's lifetime.

◆ largest_location_

messages::Location quicr::PublishTrackHandler::largest_location_
protected

Largest/current location reported for the track.

◆ object_msg_buffer_

Bytes quicr::PublishTrackHandler::object_msg_buffer_
protected

Reusable serialization scratch buffer; invalidated by the next publish/end operation.

◆ pending_new_group_request_id_

std::optional<uint64_t> quicr::PublishTrackHandler::pending_new_group_request_id_
protected

Pending requested group ID, when one has been recorded.

◆ publish_object_priority_

uint8_t quicr::PublishTrackHandler::publish_object_priority_
protected

Subscriber-derived transport scheduling priority.

◆ publish_status_

std::atomic<Status> quicr::PublishTrackHandler::publish_status_ { Status::kNotAnnounced }
protected

Atomic publication state; does not synchronize the remaining fields.

◆ publish_track_metrics_

PublishTrackMetrics quicr::PublishTrackHandler::publish_track_metrics_

Publish metrics for the track.

Public live counters updated by publication and session metrics processing. Byte/object counters increase when an object passes state checks, before enqueue success; forwarded bytes increase before the request-ID check. Rejected states increment objects_dropped_not_ok; missing request IDs and later encoding/enqueue failures do not. Counters are cumulative except the QUIC min/max/average aggregates cleared after sampling. Unsynchronized application writes race with library updates.

◆ publisher_priority_

uint8_t quicr::PublishTrackHandler::publisher_priority_
protected

Publisher priority encoded in object headers.

◆ stream_info_by_group_

std::map<std::uint64_t, std::map<std::uint64_t, StreamInfo> > quicr::PublishTrackHandler::stream_info_by_group_
protected

Open streams keyed first by group ID and then subgroup ID.

◆ stream_mode_

std::optional<messages::StreamHeaderProperties> quicr::PublishTrackHandler::stream_mode_
protected

Default subgroup framing properties; populated for stream mode.

◆ support_new_group_request_

bool quicr::PublishTrackHandler::support_new_group_request_ { true }
protected

Whether PUBLISH_OK may request dynamic groups.

◆ track_alias_

std::optional<uint64_t> quicr::PublishTrackHandler::track_alias_
protected

Connection-scoped track alias required by object framing.


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