LibQuicR
quicr::PublishFetchHandler Class Reference

Publishes the ordered object stream that answers a FETCH. More...

#include <publish_fetch_handler.h>

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

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

PublishObjectStatus PublishObject (const ObjectHeaders &object_headers, BytesSpan data, std::optional< messages::StreamHeaderProperties > stream_mode=std::nullopt) override
 Queues one object on the FETCH response stream. More...
 
constexpr messages::GroupOrder GetGroupOrder () const noexcept
 
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...
 
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< PublishFetchHandler > Create (const FullTrackName &full_track_name, uint8_t priority, uint64_t subscribe_id, messages::GroupOrder group_order, uint32_t ttl)
 Creates a FETCH publisher with shared ownership. More...
 
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

 PublishFetchHandler (const FullTrackName &full_track_name, uint8_t priority, uint64_t subscribe_id, messages::GroupOrder group_order, uint32_t ttl)
 Constructs a server-side FETCH publisher. 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

Publishes the ordered object stream that answers a FETCH.

Unlike ordinary track publication, all objects are encoded onto one reliable FETCH stream using delta state and the requested group order. The session owns the active handler jointly and closes it through EndFetch() when it is unbound.

Member Enumeration Documentation

◆ PublishObjectStatus

enum quicr::PublishTrackHandler::PublishObjectStatus : uint8_t
stronginherited

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
stronginherited

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

◆ PublishFetchHandler()

quicr::PublishFetchHandler::PublishFetchHandler ( const FullTrackName &  full_track_name,
uint8_t  priority,
uint64_t  subscribe_id,
messages::GroupOrder  group_order,
uint32_t  ttl 
)
inlineprotected

Constructs a server-side FETCH publisher.

Parameters
full_track_nameTrack being fetched.
priorityPublisher and transport scheduling priority.
subscribe_idRequest identifier written in the FETCH header.
group_orderSerialization order promised for returned objects.
ttlDefault object queue lifetime used when an object has no TTL.

Member Function Documentation

◆ CanPublish()

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

Check if the state allows publishing or not.

Returns
true only for kOk, kNewGroupRequested, or kSubscriptionUpdated.

◆ Create() [1/2]

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 
)
inlinestaticinherited

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.

◆ Create() [2/2]

static std::shared_ptr<PublishFetchHandler> quicr::PublishFetchHandler::Create ( const FullTrackName &  full_track_name,
uint8_t  priority,
uint64_t  subscribe_id,
messages::GroupOrder  group_order,
uint32_t  ttl 
)
inlinestatic

Creates a FETCH publisher with shared ownership.

Parameters
full_track_nameTrack being fetched.
priorityPublisher and transport scheduling priority.
subscribe_idRequest identifier written in the FETCH header.
group_orderSerialization order promised for returned objects.
ttlDefault object queue lifetime used when an object has no TTL.
Returns
Shared ownership of the new handler.

◆ EndAllSubgroups()

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

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 
)
virtualinherited

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 
)
inherited

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
inlinenoexceptinherited

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.

◆ GetGroupOrder()

constexpr messages::GroupOrder quicr::PublishFetchHandler::GetGroupOrder ( ) const
inlineconstexprnoexcept
Returns
The object order encoded on this FETCH stream.

◆ GetLargestLocation()

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

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
inlineconstexprnoexceptinherited

Get the publisher priority.

Returns
Priority encoded as the publisher priority.

◆ GetPublishObjectPriority()

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

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
inlinenoexceptinherited

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
inlineconstexprnoexceptinherited

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
inlinenoexceptinherited

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)
virtualinherited

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()

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

Queues one object on the FETCH response stream.

Parameters
object_headersObject identity, status, extensions, and optional TTL.
dataBorrowed payload bytes; the method copies them before returning.
stream_modeIgnored for FETCH framing.
Returns
kOk when queued, kInternalError without an attached session, or kNoSubscribers without a request ID.
Exceptions
TransportExceptionif stream creation or enqueueing fails.

The first call creates the stream and emits its FETCH header. Serialization state advances only after the object is successfully queued. Calls must be externally serialized and objects must follow GetGroupOrder().

Reimplemented from quicr::PublishTrackHandler.

◆ 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)
overrideprotectedvirtualinherited

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)
overridevirtualinherited

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)
inlinenoexceptinherited

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)
inlinenoexceptinherited

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)
inlinenoexceptinherited

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)
inlinenoexceptinherited

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)
inlinenoexceptinherited

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)
inlineinherited

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)
virtualinherited

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 
)
virtualinherited

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_
protectedinherited

Framing mode used for the next object.

◆ default_ttl_

uint32_t quicr::PublishTrackHandler::default_ttl_
protectedinherited

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_
protectedinherited

Largest/current location reported for the track.

◆ object_msg_buffer_

Bytes quicr::PublishTrackHandler::object_msg_buffer_
protectedinherited

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_
protectedinherited

Pending requested group ID, when one has been recorded.

◆ publish_object_priority_

uint8_t quicr::PublishTrackHandler::publish_object_priority_
protectedinherited

Subscriber-derived transport scheduling priority.

◆ publish_status_

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

Atomic publication state; does not synchronize the remaining fields.

◆ publish_track_metrics_

PublishTrackMetrics quicr::PublishTrackHandler::publish_track_metrics_
inherited

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_
protectedinherited

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_
protectedinherited

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

◆ stream_mode_

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

Default subgroup framing properties; populated for stream mode.

◆ support_new_group_request_

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

Whether PUBLISH_OK may request dynamic groups.

◆ track_alias_

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

Connection-scoped track alias required by object framing.


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