35 class TrackHandler :
public std::enable_shared_from_this<TrackHandler>
85 requires std::is_base_of_v<TrackHandler, T>
86 std::shared_ptr<T>
Get()
88 return std::dynamic_pointer_cast<T>(shared_from_this());
98 std::lock_guard lock(request_stream_mutex_);
99 request_id_ = request_id;
109 std::lock_guard lock(request_stream_mutex_);
133 std::lock_guard lock(request_stream_mutex_);
134 return connection_id_;
141 std::lock_guard lock(request_stream_mutex_);
142 return { connection_id_, request_id_, request_stream_ };
201 void SetConnectionId(uint64_t connection_id)
203 std::lock_guard lock(request_stream_mutex_);
204 connection_id_ = connection_id;
207 void SetBinding(Binding binding)
209 std::lock_guard lock(request_stream_mutex_);
210 connection_id_ = binding.connection_id;
211 request_id_ = binding.request_id;
212 request_stream_ = std::move(binding.request_stream);
219 void SetRequestStream(
const std::shared_ptr<Stream>& request_stream)
221 std::lock_guard lock(request_stream_mutex_);
222 request_stream_ = request_stream;
234 std::shared_ptr<Stream> GetRequestStream()
const
236 std::lock_guard lock(request_stream_mutex_);
237 return request_stream_;
243 std::uint64_t connection_id_{ 0 };
251 std::optional<uint64_t> request_id_;
264 std::shared_ptr<Stream> request_stream_
QUICR_GUARDED_BY(request_stream_mutex_);
266 mutable std::mutex request_stream_mutex_;
268 std::weak_ptr<Session> session_;
The reply to a callback, which may be answered immediately or deferred.
Definition: reply.h:31
MoQ Session endpoint supporting connection-explicit operations.
Definition: session.h:68
MOQ track handler for subscribed track.
Definition: subscribe_track_handler.h:25
Common request state for track-related handlers.
Definition: track_handler.h:36
void SetTransport(std::shared_ptr< Session > transport)
Sets the session used for control and data operations.
std::shared_ptr< Connection > GetConnection() const
Binding GetBinding() const
Definition: track_handler.h:139
const std::weak_ptr< Session > & GetSession() const noexcept
Gets the non-owning session handle.
std::optional< uint64_t > GetRequestStreamId() const
Get the stream ID of the request control stream.
std::optional< uint64_t > GetRequestId() const noexcept
Get the request ID.
Definition: track_handler.h:107
virtual void RequestOkReceived(const messages::Parameters ¶ms)=0
Handles REQUEST_OK for this handler's request.
virtual void RequestError(ErrorCode error_code, std::string reason)
Handles a REQUEST_ERROR for this handler.
std::mutex binding_operation_mutex_
Definition: track_handler.h:190
TrackHandler()=delete
A track identity is mandatory.
FullTrackName full_track_name_
Full track identity retained for the handler's lifetime.
Definition: track_handler.h:72
virtual Reply< messages::Parameters, ErrorCode > RequestUpdateReceived(const messages::Parameters ¶ms)=0
Received an update for this handler's request.
FullTrackName GetFullTrackName() const noexcept
Get the full track name.
Definition: track_handler.h:125
requires std::is_base_of_v< TrackHandler, T > std::shared_ptr< T > Get()
Get the derived type of the track handler.
Definition: track_handler.h:86
void SetRequestId(std::optional< uint64_t > request_id)
Sets or clears the connection-scoped request ID.
Definition: track_handler.h:96
virtual ~TrackHandler()=default
Releases this handler; shared stream/session handles are released automatically.
uint64_t GetConnectionId() const noexcept
Gets the transport connection identifier assigned by the session.
Definition: track_handler.h:131
TrackHandler(const FullTrackName &full_track_name)
Constructs a handler for one full track name.
Definition: track_handler.h:66
Definition: parameters.h:185
Definition: attributes.h:13
ErrorCode
MOQT error code, as carried by REQUEST_ERROR.
Definition: errors.h:33
Full track name struct.
Definition: track_name.h:436
Definition: track_handler.h:39
std::uint64_t connection_id
Definition: track_handler.h:40
std::shared_ptr< Stream > request_stream
Definition: track_handler.h:42
std::optional< std::uint64_t > request_id
Definition: track_handler.h:41
Portable wrappers for Clang thread-safety analysis attributes.
#define QUICR_GUARDED_BY(...)
No-op guarded-field annotation when thread-safety annotations are disabled.
Definition: thread_safety.h:64