Skip to content

Commit e3fe1a2

Browse files
authored
Merge branch 'main' into me/joining-fetch
2 parents 5945077 + f35309b commit e3fe1a2

File tree

1 file changed

+91
-3
lines changed

1 file changed

+91
-3
lines changed

draft-ietf-moq-transport.md

Lines changed: 91 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,8 +1236,8 @@ the `query` portion of the URI to the parameter.
12361236
#### MAX_SUBSCRIBE_ID {#max-subscribe-id}
12371237

12381238
The MAX_SUBSCRIBE_ID parameter (Parameter Type 0x02) communicates an initial
1239-
value for the Maximum Subscribe ID to the receiving subscriber. The default value
1240-
is 0, so if not specified, the peer MUST NOT create subscriptions.
1239+
value for the Maximum Subscribe ID to the receiving subscriber. The default
1240+
value is 0, so if not specified, the peer MUST NOT create subscriptions.
12411241

12421242
## GOAWAY {#message-goaway}
12431243

@@ -2345,6 +2345,12 @@ Track or Datagram.
23452345
* Object Status: As enumeration used to indicate missing
23462346
objects or mark the end of a group or track. See {{object-status}} below.
23472347

2348+
* Object Extension Count: The number of Object Extensions present. A value of 0
2349+
indicates that no Object Extension Headers are present.
2350+
2351+
* Object Extensions : A sequence of Object Extension Headers. See
2352+
{{object-extensions}} below.
2353+
23482354
* Object Payload: An opaque payload intended for an End Subscriber and SHOULD
23492355
NOT be processed by a relay. Only present when 'Object Status' is Normal (0x0).
23502356

@@ -2389,6 +2395,44 @@ Any object with a status code other than zero MUST have an empty payload.
23892395
Though some status information could be inferred from QUIC stream state,
23902396
that information is not reliable and cacheable.
23912397

2398+
#### Object Extension Header {#object-extensions}
2399+
Object Extension Headers are visible to relays and allow the transmission of
2400+
future metadata relevant to MOQT Object distribution. Any Object metadata never
2401+
accessed by the transport or relays SHOULD be serialized as part of the Object
2402+
payload and not as an extension header.
2403+
2404+
Extension Headers are defined in external specifications and registered in an
2405+
IANA table {{iana}}. These specifications define the type and value of the
2406+
header, along with any rules concerning processing, modification, caching and
2407+
forwarding. A relay which is coded to implement these rules is said to
2408+
"support" the extension.
2409+
2410+
If unsupported by the relay, Extension Headers MUST NOT be modified, MUST be
2411+
cached as part of the Object and MUST be forwarded by relays.
2412+
2413+
If supported by the relay and subject to the processing rules specified in the
2414+
definition of the extension, Extension Headers MAY be modified, added, removed,
2415+
and/or cached by relays.
2416+
2417+
Object Extension Headers are serialized as defined below:
2418+
2419+
~~~
2420+
Extension Header {
2421+
Header Type (i),
2422+
[Header Value (i)]
2423+
[Header Length (i),
2424+
Header Value (..)]
2425+
}
2426+
~~~
2427+
{: #object-extension-format title="Object Extension Header Format"}
2428+
2429+
* Header type: an unsigned integer, encoded as a varint, identifying the type
2430+
of the extension and also the subsequent serialization.
2431+
* Header values: even types are followed by a single varint encoded value. Odd
2432+
types are followed by a varint encoded length and then the header value.
2433+
Header types are registered in the IANA table 'MOQ Extension Headers'.
2434+
See {{iana}}.
2435+
23922436
## Object Datagram {#object-datagram}
23932437

23942438
An `OBJECT_DATAGRAM` carries a single object in a datagram.
@@ -2406,6 +2450,10 @@ OBJECT_DATAGRAM {
24062450
Group ID (i),
24072451
Object ID (i),
24082452
Publisher Priority (8),
2453+
Extension Count (i),
2454+
[Extension headers (...)],
2455+
Object Payload Length (i),
2456+
[Object Status (i)],
24092457
Object Payload (..),
24102458
}
24112459
~~~
@@ -2470,6 +2518,8 @@ The Object Status field is only sent if the Object Payload Length is zero.
24702518
~~~
24712519
{
24722520
Object ID (i),
2521+
Extension Count (i),
2522+
[Extension headers (...)],
24732523
Object Payload Length (i),
24742524
[Object Status (i)],
24752525
Object Payload (..),
@@ -2572,6 +2622,8 @@ Each object sent on a fetch stream after the FETCH_HEADER has the following form
25722622
Subgroup ID (i),
25732623
Object ID (i),
25742624
Publisher Priority (8),
2625+
Extension Count (i),
2626+
[Extension headers (...)],
25752627
Object Payload Length (i),
25762628
[Object Status (i)],
25772629
Object Payload (..),
@@ -2609,6 +2661,38 @@ SUBGROUP_HEADER {
26092661
}
26102662
~~~
26112663

2664+
Sending a group on one stream, with the first object containing two
2665+
Extension Headers.
2666+
2667+
~~~
2668+
Stream = 2
2669+
2670+
STREAM_HEADER_GROUP {
2671+
Subscribe ID = 2
2672+
Track Alias = 2
2673+
Group ID = 0
2674+
Publisher Priority = 0
2675+
}
2676+
{
2677+
Object ID = 0
2678+
Extension Count = 2
2679+
{ Type = 4
2680+
Value = 2186796243
2681+
},
2682+
{ Type = 77
2683+
Length = 21
2684+
Value = "traceID:123456"
2685+
}
2686+
Object Payload Length = 4
2687+
Payload = "abcd"
2688+
}
2689+
{
2690+
Object ID = 1
2691+
Object Payload Length = 4
2692+
Payload = "efgh"
2693+
}
2694+
2695+
~~~
26122696

26132697

26142698
# Security Considerations {#security}
@@ -2652,8 +2736,12 @@ TODO: fill out currently missing registries:
26522736
* Announce Error codes
26532737
* Announce Cancel Reason codes
26542738
* Message types
2739+
* MOQ Extension headers - we wish to reserve extension types 0-63 for
2740+
standards utilization where space is a premium, 64 - 16383 for
2741+
standards utilization where space is less of a concern, and 16384 and
2742+
above for first-come-first-served non-standardization usage.
26552743

2656-
TODO: register the URI scheme and the ALPN
2744+
TODO: register the URI scheme and the ALPN and grease the Extension types
26572745

26582746
# Contributors
26592747
{:numbered="false"}

0 commit comments

Comments
 (0)