Skip to content

Adding an Extensible Object Header #502

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 27 commits into from
Feb 11, 2025
Merged
Changes from 7 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
a5208af
Update draft-ietf-moq-transport.md
wilaw Aug 6, 2024
0af94ca
Update draft-ietf-moq-transport.md
wilaw Aug 6, 2024
8ccf41c
Merge branch 'main' into patch-1
wilaw Aug 6, 2024
e9d83ce
Update draft-ietf-moq-transport.md
wilaw Aug 22, 2024
7b150f7
Update draft-ietf-moq-transport.md
wilaw Aug 22, 2024
8b5c167
Merge branch 'main' into patch-1
ianswett Aug 23, 2024
358c5d7
Remove trailing whitespace
ianswett Aug 23, 2024
ab407f7
Update draft-ietf-moq-transport.md
wilaw Sep 10, 2024
3759564
Update draft-ietf-moq-transport.md
wilaw Sep 10, 2024
e176497
Removing Extension Header type 0 definition.
wilaw Nov 29, 2024
6f31642
Changing Extension Header serialization
wilaw Nov 29, 2024
915ff95
Removing unneeded serialization of Object Extension
wilaw Dec 3, 2024
ae71406
Adding Object Extension Headers to Multi-Object Groups
wilaw Dec 3, 2024
7488980
Merge branch 'main' into patch-1
wilaw Dec 4, 2024
f2fba0c
Relaxing constraints on forwarding and modifying headers
wilaw Dec 5, 2024
a9be758
Update draft-ietf-moq-transport.md
wilaw Feb 3, 2025
afe26ed
Correcting extension example to match new serialization
wilaw Feb 3, 2025
aa9e2fa
Removing Extension negotiation during setup
wilaw Feb 6, 2025
e79e7db
Updating processing rules and serialization
wilaw Feb 6, 2025
58b6233
Merge branch 'main' into patch-1
wilaw Feb 6, 2025
10298c4
Remove greasing, change definition
wilaw Feb 8, 2025
779e3d7
Update draft-ietf-moq-transport.md
ianswett Feb 10, 2025
50e6be1
Restore the Extension Negotiation text
ianswett Feb 11, 2025
67befba
Update draft-ietf-moq-transport.md
ianswett Feb 11, 2025
891a1eb
Varints only encode 0-63 in 1 byte
ianswett Feb 11, 2025
fde44e3
Update draft-ietf-moq-transport.md
ianswett Feb 11, 2025
17dc994
Merge branch 'main' into patch-1
ianswett Feb 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions draft-ietf-moq-transport.md
Original file line number Diff line number Diff line change
Expand Up @@ -984,6 +984,14 @@ client MUST set the PATH parameter to the `path-abempty` portion of the
URI; if `query` is present, the client MUST concatenate `?`, followed by
the `query` portion of the URI to the parameter.

#### REQUIRED-EXTENSION parameter {#required-extensions}

The REQUIRED-EXTENSION parameter (key 0x02) allows the client to specify
multiple Extension Header types {{object-extensions}} which are required for
operation. The value is a concatenation of varints, each describing a
32-bit extension header type. This parameter is optional. If the server does
not support a requested REQUIRED-EXTENSION, then it MUST close the connection.

## GOAWAY {#message-goaway}
The server sends a `GOAWAY` message to initiate session migration
({{session-migration}}) with an optional URI.
Expand Down Expand Up @@ -1511,6 +1519,12 @@ MUST be sent according to its `Object Forwarding Preference`, described below.
* Object Status: As enumeration used to indicate missing
objects or mark the end of a group or track. See {{object-status}} below.

* Object Extension Count: The number of Object Extensions present. A value of 0
indicates that no Object Extension Headers are present.

* Object Extensions : an optional concatenation of Object Extension Headers. See
{{object-extensions}} below.

* Object Payload: An opaque payload intended for an End Subscriber and SHOULD
NOT be processed by a relay. Only present when 'Object Status' is Normal (0x0).

Expand Down Expand Up @@ -1557,6 +1571,62 @@ are sent on a new stream. This is to avoid the status message being lost
in cases such as a relay dropping a group and reseting the stream the
group is being sent on.

#### Object Extension {#object-extensions}
An Object Extension is a concatenation of optional Extension Headers. These
headers are visible to relays. Extension headers MUST be forwarded and
MUST NOT be modified by relays. The purpose of Extension Headers is to
allow the transmission of application-specific data as well as future
evolution of the transport protocol. Object Extensions are serialized as
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

future evolution of the transport protocol

Maybe reword to "modification of transport protocol behavior"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I went with

Object Extension Headers are visible to relays and allow the transmission of future metadata relevant to MOQT Object distribution.

defined below:

~~~
Object Extension {
Extension Header (..) ...
}

Extension Header {
Header Type (i),
Header Length (i),
Header Value (..)
}
~~~
{: #object-extension-format title="Object Extension Header Format"}

* Header type: an unsigned 32-bit integer, registered in the IANA table
'MOQ Extension Headers'. See {{iana}}.

##### Extension Header type 0 {#extension-header-zero}

This specification defines a utility extension header. The value of this header
is itself a name-value pair.


| Type | Value |
| ---- | ---------------------------------------------------- |
| 0x0 | Header Value - see {{extension-header-zero-format}} |


~~~
Header Value {
Name Length (i),
Name Value (..)
Payload (..)
}
~~~
{: #extension-header-zero-format title="Extension header 0 value format"}

* Name Length: the size of the name value in bytes.
* Name Value: a string encoded using ISO-8859-1. This name is application-defined
and is not IANA registered.
* Payload: the contents of the header. The combined size of the name and payload
contents MUST NOT exceed 10240 bytes.

### Object Message Formats

Every Track has a single 'Object Forwarding Preference' and the Original
Publisher MUST NOT mix different forwarding preferences within a single track.
If a subscriber receives different forwarding preferences for a track, it
SHOULD close the session with an error of 'Protocol Violation'.

## Object Stream

Expand All @@ -1577,6 +1647,8 @@ OBJECT_STREAM Message {
Group ID (i),
Object ID (i),
Publisher Priority (8),
Extension Count (i),
[Extension headers (...)],
Object Payload Length (i),
[Object Status (i)],
Object Payload (..),
Expand Down Expand Up @@ -1613,6 +1685,8 @@ OBJECT_DATAGRAM Message {
Group ID (i),
Object ID (i),
Publisher Priority (8),
Extension Count (i),
[Extension headers (...)],
Object Payload Length (i),
[Object Status (i)],
Object Payload (..),
Expand Down Expand Up @@ -1771,6 +1845,38 @@ OBJECT_STREAM {
}
~~~

Sending a group on one stream, with the first object containing an
Extension Header.

~~~
Stream = 2

STREAM_HEADER_GROUP {
Subscribe ID = 2
Track Alias = 2
Group ID = 0
Publisher Priority = 0
}
{
Object ID = 0
Extension Count = 1
{ Type = 0
Length = 21
{ Name length = 15
Name value = "example-traceID"
Payload = "123456"
}
}
Object Payload Length = 4
Payload = "abcd"
}
{
Object ID = 1
Object Payload Length = 4
Payload = "efgh"
}

~~~


# Security Considerations {#security}
Expand Down Expand Up @@ -1806,6 +1912,7 @@ TODO: fill out currently missing registries:
* Subscribe Error codes
* Announce Error codes
* Message types
* MOQ Extension headers

TODO: register the URI scheme and the ALPN

Expand Down
Loading