wired
libc-free QUIC/HTTP3 SDK in C for x86_64-linux
Loading...
Searching...
No Matches
wired_moqtrun_sub Struct Reference

One subscriber recorded against the hub's track: which session, and the Track Alias its SUBSCRIBE_OK named – the alias every SUBGROUP_HEADER and OBJECT_DATAGRAM relayed to that session carries (draft-22 3.1.3: unique per Track within the session; moqtrun_session_alias). More...

#include <moqtrun.h>

Data Fields

usz session_idx
 Subscriber's index in wired_moqt_hub.peers.
u64 track_alias
 Track Alias relayed Objects carry on the subscriber's session.
int active
 1 while the subscription is Established; 0 marks the slot free.
u64 request_id
 SUBSCRIBE's Request ID (draft-ietf-moq-transport-19 10.6).
u64 delivery_timeout
 OBJECT_DELIVERY_TIMEOUT (10.2.4) in ms, 0 when absent or none: an Object reaching the hub longer ago is not sent (draft 8).
u64 subgroup_timeout
 Effective SUBGROUP_DELIVERY_TIMEOUT (10.2.6) in ms: min of the publisher's Track Property and the subscriber's parameter over their non-zero values, 0 when neither set.
moqctl_loc start
 Location Filter Start (9.3.1), resolved at SUBSCRIBE time; {0, 0} when unfiltered.
u64 end_group
 Last Group to deliver (AbsoluteRange), valid when has_end_group.
u64 end_object
 Last Object of end_group to deliver (draft-22 Absolute Range, 0x04), valid when has_end_object; otherwise the whole end Group passes.
u8 priority
 SUBSCRIBER_PRIORITY (10.2.7), valid when has_priority.
u8 has_priority
 1 when SUBSCRIBER_PRIORITY was present (priority valid).
u8 group_order
 GROUP_ORDER (10.2.8); 0 = absent (the publisher's preference).
u8 forward_off
 1 when FORWARD was 0 (10.2.17): no Objects go to this subscription.
u8 has_delivery_timeout
 1 when OBJECT_DELIVERY_TIMEOUT was present (delivery_timeout valid).
u8 has_end_group
 1 when the filter names a last Group (end_group valid).
u8 has_end_object
 1 when the filter names a last Object (end_object valid).
moqctl_loc jl
 Joining Location (draft-ietf-moq-transport-19 5.1): the Largest Object SUBSCRIBE_OK carried, valid when has_jl – where a Joining Fetch ends (10.12.2.1).
u8 has_jl
 1 when jl holds a Joining Location.
moqctl_rangeloc filter
 The LOCATION_FILTER as sent (version-neutral), valid when has_filter: what a re-attach re-resolves start/end from.
u8 has_filter
 1 when filter holds the subscription's LOCATION_FILTER.
wired_moqtrun_rngrow rngf [WIRED_MOQTRUN_MAX_FILTER_RANGES]
 Range Filter rows (10.2.10-10.2.14), one Range per row; capacity is the advertised MAX_FILTER_RANGES.
u8 rngf_n
 Rows of rngf in use; 0 = no Range Filter.
u8 blob_sent
 Hub blob track only: 1 once the blob went out to this subscription, so a FORWARD 1 -> 0 -> 1 update never sends it twice.
u8 no_props
 1 when the SUBSCRIBE sent INCLUDE_PROPERTIES=0: its SUBSCRIBE_OK carries empty Track Properties (draft-22 9.20.21).
u64 stream_count
 Streams the hub opened for this subscription (relay, blob, live and fetch streams alike): PUBLISH_DONE's Stream Count (draft 10.10).
u64 newest_group
 The newest Group a lossy relay stream was opened in for this subscription, valid while newest_sid is not 0.
u64 newest_sid
 That stream (0: none yet – a server-initiated uni stream id is never 0).
u64 ssts_base
 Group of verdict bit 0: bit k of ssts_known / ssts_fwd is the recorded verdict for Group ssts_base + k (moqtss_sub_pass).
u16 ssts_known
 Bit k: a final SSTS decision for Group ssts_base + k was stamped.
u16 ssts_fwd
 Bit k: that decision picked this subscription's track.
u8 ssts_on
 1 while the subscription is a member of a switching set: only Groups decided for it are forwarded.
u8 sw_role
 MOQTSW_ROLE_*: NONE, OLD (switched away from, its end pending) or NEW (activated by a switch, starts at sw_g).
u8 sw_mode
 OLD only: 0 Hard, 1 Soft.
u8 sw_done
 OLD only: 1 when the switch asked for Publish Done (flag 0x80).
u64 sw_g
 The switch boundary G: OLD ends at G-1, NEW starts at {G, 0}.
u64 sw_peer_rid
 OLD only: the activating subscription's Request ID.
u64 sw_deadline
 OLD Soft only: clock (wired_moqt_tick) past which OLD gives up on its track reaching G-1 – WIRED_MOQTSW_SOFT_WAIT_MS of wall clock from the switch; the give-up happens only while nothing of OLD is open.

Detailed Description

One subscriber recorded against the hub's track: which session, and the Track Alias its SUBSCRIBE_OK named – the alias every SUBGROUP_HEADER and OBJECT_DATAGRAM relayed to that session carries (draft-22 3.1.3: unique per Track within the session; moqtrun_session_alias).

Field Documentation

◆ newest_sid

u64 wired_moqtrun_sub::newest_sid

That stream (0: none yet – a server-initiated uni stream id is never 0).

A stream opened in a newer Group resets it: the older Group's unsent backlog is stale for a live subscriber.

◆ rngf

Range Filter rows (10.2.10-10.2.14), one Range per row; capacity is the advertised MAX_FILTER_RANGES.

OBJECTID_FILTER rows gate each Object at the per-Object (datagram) gate. ponytail: subgroup/priority/property filter rows are validated and stored but pass at delivery – the group-granular stream gates never see those fields (the Location Filter's granularity note); evaluate them if the hub ever reads subgroup ids or properties at delivery.

◆ subgroup_timeout

u64 wired_moqtrun_sub::subgroup_timeout

Effective SUBGROUP_DELIVERY_TIMEOUT (10.2.6) in ms: min of the publisher's Track Property and the subscriber's parameter over their non-zero values, 0 when neither set.

Applied as a second age bound beside delivery_timeout (draft 8; the hub's io cannot see "all data committed", so the age model stands in for the post-FIN timer).


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