-
Notifications
You must be signed in to change notification settings - Fork 36
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
Changes from 7 commits
a5208af
0af94ca
8ccf41c
e9d83ce
7b150f7
8b5c167
358c5d7
ab407f7
3759564
e176497
6f31642
915ff95
ae71406
7488980
f2fba0c
a9be758
afe26ed
aa9e2fa
e79e7db
58b6233
10298c4
779e3d7
50e6be1
67befba
891a1eb
fde44e3
17dc994
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
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. | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
## GOAWAY {#message-goaway} | ||
The server sends a `GOAWAY` message to initiate session migration | ||
({{session-migration}}) with an optional URI. | ||
|
@@ -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 | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
{{object-extensions}} below. | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
ianswett marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
* 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). | ||
|
||
|
@@ -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 | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
headers are visible to relays. Extension headers MUST be forwarded and | ||
MUST NOT be modified by relays. The purpose of Extension Headers is to | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
allow the transmission of application-specific data as well as future | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
evolution of the transport protocol. Object Extensions are serialized as | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Maybe reword to "modification of transport protocol behavior" There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I went with
|
||
defined below: | ||
|
||
~~~ | ||
Object Extension { | ||
Extension Header (..) ... | ||
} | ||
|
||
Extension Header { | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Header Type (i), | ||
Header Length (i), | ||
Header Value (..) | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
~~~ | ||
{: #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}}. | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
##### Extension Header type 0 {#extension-header-zero} | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
This specification defines a utility extension header. The value of this header | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
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 | ||
|
||
|
@@ -1577,6 +1647,8 @@ OBJECT_STREAM Message { | |
Group ID (i), | ||
Object ID (i), | ||
Publisher Priority (8), | ||
Extension Count (i), | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
[Extension headers (...)], | ||
wilaw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Object Payload Length (i), | ||
[Object Status (i)], | ||
Object Payload (..), | ||
|
@@ -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 (..), | ||
|
@@ -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 | ||
ianswett marked this conversation as resolved.
Show resolved
Hide resolved
|
||
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} | ||
|
@@ -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 | ||
|
||
|
Uh oh!
There was an error while loading. Please reload this page.