7#include <quicr/detail/base_track_handler.h>
8#include <quicr/detail/messages.h>
92 uint8_t default_priority,
94 std::optional<messages::StreamHeaderType> stream_mode = std::nullopt)
95 : BaseTrackHandler(full_track_name)
100 switch (track_mode) {
101 case TrackMode::kDatagram:
102 if (stream_mode.has_value()) {
103 throw std::invalid_argument(
"Datagram track mode should not specify a stream mode");
106 case TrackMode::kStream:
109 ? stream_mode.value()
110 : messages::StreamHeaderType::kSubgroup0NotEndOfGroupWithExtensions;
125 TrackMode track_mode,
126 uint8_t default_priority,
127 uint32_t default_ttl)
129 return std::shared_ptr<PublishTrackHandler>(
constexpr Status GetStatus() const noexcept
Get the publish status.
Definition publish_track_handler.h:199
void SetDefaultTrackMode(const TrackMode track_mode) noexcept
set/update the default track mode for objects
Definition publish_track_handler.h:186
constexpr uint8_t GetDefaultPriority() const noexcept
Get the default priority for published objects.
Definition publish_track_handler.h:176
virtual PublishObjectStatus PublishObject(const ObjectHeaders &object_headers, BytesSpan data)
Publish [full] object.
constexpr bool CanPublish() const noexcept
Check if the state allows publishing or not.
Definition publish_track_handler.h:222
friend class Transport
Definition publish_track_handler.h:386
PublishTrackHandler(const FullTrackName &full_track_name, TrackMode track_mode, uint8_t default_priority, uint32_t default_ttl, std::optional< messages::StreamHeaderType > stream_mode=std::nullopt)
Publish track handler constructor.
Definition publish_track_handler.h:90
static std::shared_ptr< PublishTrackHandler > Create(const FullTrackName &full_track_name, TrackMode track_mode, uint8_t default_priority, uint32_t default_ttl)
Create a shared Publish track handler.
Definition publish_track_handler.h:124
PublishObjectStatus PublishPartialObject(const ObjectHeaders &object_headers, BytesSpan data)
Publish object to the announced track.
PublishObjectStatus ForwardPublishedData(bool is_new_stream, std::shared_ptr< const std::vector< uint8_t > > data)
Forward received object data to subscriber/relay/remote client.
void SetDefaultPriority(const uint8_t priority) noexcept
set/update the default priority for published objects
Definition publish_track_handler.h:170
Status publish_status_
Definition publish_track_handler.h:365
friend class Client
Definition publish_track_handler.h:387
messages::StreamHeaderType stream_mode_
Definition publish_track_handler.h:367
void SetDefaultTTL(const uint32_t ttl) noexcept
set/update the default TTL expiry for published objects
Definition publish_track_handler.h:181
uint64_t publish_data_ctx_id_
Definition publish_track_handler.h:371
uint64_t latest_group_id_
Definition publish_track_handler.h:373
virtual void StatusChanged(Status status)
Notification of publish track status change.
constexpr messages::StreamHeaderType GetStreamMode() const noexcept
Get the current stream mode.
Definition publish_track_handler.h:192
uint32_t default_ttl_
Definition publish_track_handler.h:369
constexpr void SetUseAnnounce(bool use) noexcept
Set use announce.
Definition publish_track_handler.h:211
uint64_t object_payload_remaining_length_
Definition publish_track_handler.h:376
virtual void MetricsSampled(const PublishTrackMetrics &metrics)
Notification callback to provide sampled metrics.
constexpr bool UsingAnnounce() const noexcept
Get use announce setting.
Definition publish_track_handler.h:205
bool seen_first_object_
Definition publish_track_handler.h:380
void SetStatus(Status status) noexcept
Set the publish status.
Definition publish_track_handler.h:356
void SetTrackAlias(uint64_t track_alias)
Set the track alias.
Definition publish_track_handler.h:239
constexpr uint64_t GetDataContextId() const noexcept
Get the Data context ID.
Definition publish_track_handler.h:350
TrackMode default_track_mode_
Definition publish_track_handler.h:366
friend class Server
Definition publish_track_handler.h:388
Bytes object_msg_buffer_
Definition publish_track_handler.h:382
uint64_t latest_sub_group_id_
Definition publish_track_handler.h:374
std::optional< uint64_t > GetTrackAlias() const noexcept
Get the track alias.
Definition publish_track_handler.h:248
uint8_t default_priority_
Definition publish_track_handler.h:368
uint64_t latest_object_id_
Definition publish_track_handler.h:375
void SetDataContextId(uint64_t data_ctx_id) noexcept
Set the Data context ID.
Definition publish_track_handler.h:345
PublishObjectStatus
Publish status codes.
Definition publish_track_handler.h:29
@ kNoSubscribers
Definition publish_track_handler.h:34
@ kNoPreviousObject
Definition publish_track_handler.h:38
@ kNotAnnounced
Definition publish_track_handler.h:33
@ kObjectContinuationDataNeeded
Definition publish_track_handler.h:40
@ kObjectDataIncomplete
PublishObject() was called when continuation data remains.
Definition publish_track_handler.h:41
@ kPaused
Definition publish_track_handler.h:55
@ kObjectPayloadLengthExceeded
Definition publish_track_handler.h:35
@ kPreviousObjectTruncated
Definition publish_track_handler.h:36
@ kNotAuthorized
Definition publish_track_handler.h:32
@ kObjectDataComplete
Definition publish_track_handler.h:39
@ kPreviousObjectNotCompleteMustStartNewTrack
Definition publish_track_handler.h:53
@ kObjectDataTooLarge
Definition publish_track_handler.h:45
@ kPreviousObjectNotCompleteMustStartNewGroup
Definition publish_track_handler.h:49
@ kOk
Definition publish_track_handler.h:30
@ kInternalError
Definition publish_track_handler.h:31
Status
Status codes for the publish track.
Definition publish_track_handler.h:66
@ kNewGroupRequested
Definition publish_track_handler.h:75
@ kNotAnnounced
Definition publish_track_handler.h:69
@ kPendingPublishOk
Definition publish_track_handler.h:76
@ kNotConnected
Definition publish_track_handler.h:68
@ kSendingUnannounce
In this state, callbacks will not be called.
Definition publish_track_handler.h:73
@ kSubscriptionUpdated
Definition publish_track_handler.h:74
@ kAnnounceNotAuthorized
Definition publish_track_handler.h:71
@ kPendingAnnounceResponse
Definition publish_track_handler.h:70
@ kOk
Definition publish_track_handler.h:67
PublishTrackMetrics publish_track_metrics_
Publish metrics for the track.
Definition publish_track_handler.h:334
bool use_announce
Definition publish_track_handler.h:384
std::optional< uint64_t > track_alias_
Definition publish_track_handler.h:377
Definition transport.h:28
std::vector< Byte > Bytes
Definition common.h:20
std::span< const Byte > BytesSpan
Definition common.h:21
Full track name struct.
Definition track_name.h:260