Skip to content

Commit 17e0d0a

Browse files
authored
Merge branch 'main' into ianswett-streamy-namespaces
2 parents 35695e0 + af6e9dc commit 17e0d0a

File tree

1 file changed

+66
-64
lines changed

1 file changed

+66
-64
lines changed

draft-ietf-moq-transport.md

Lines changed: 66 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,7 @@ initiates a subscription to a track by sending the SUBSCRIBE message.
918918
The publisher either accepts or rejects the subscription using
919919
SUBSCRIBE_OK or REQUEST_ERROR. Once either of these sequences is
920920
successful, the subscription moves to the `Established` state and can
921-
be updated by the subscriber using SUBSCRIBE_UPDATE. Either endpoint
921+
be updated by the subscriber using REQUEST_UPDATE. Either endpoint
922922
can terminate an `Established` subscription, moving it to the
923923
`Terminated` state. The subscriber terminates a subscription in the
924924
`Pending (Subscriber)` or `Established` states using
@@ -945,7 +945,7 @@ REQUEST_ERROR | SUBSCRIBE_OK | | PUBLISH_OK | REQUEST_ERROR
945945
| V V |
946946
| +-------------+ |
947947
| | Established | ------+
948-
| | | | SUBSCRIBE_UPDATE
948+
| | | | REQUEST_UPDATE
949949
| +-------------+ <-----+
950950
| | | |
951951
+---- UNSUBSCRIBE | | PUBLISH_DONE ----+
@@ -970,7 +970,7 @@ All `Established` subscriptions have a Forward State which is either 0 or 1.
970970
The publisher does not send Objects if the Forward State is 0, and does send them
971971
if the Forward State is 1. The initiator of the subscription sets the initial
972972
Forward State in either PUBLISH or SUBSCRIBE. The subscriber can send PUBLISH_OK
973-
or SUBSCRIBE_UPDATE to update the Forward State. Control messages, such as
973+
or REQUEST_UPDATE to update the Forward State. Control messages, such as
974974
PUBLISH_DONE ({{message-publish-done}}) are sent regardless of the forward state.
975975

976976
Either endpoint can initiate a subscription to a track without exchanging any
@@ -1111,7 +1111,7 @@ One possible subscriber pattern is to SUBSCRIBE to a Track using Filter Type
11111111
`Largest Object` and observe the `Largest Location` in the response. If the
11121112
Object ID is below the application's threshold, the subscriber sends a FETCH for
11131113
the beginning of the Group. If the Object ID is above the threshold and the
1114-
Track supports dynamic groups, the subscriber sends a SUBSCRIBE_UPDATE message with the
1114+
Track supports dynamic groups, the subscriber sends a REQUEST_UPDATE message with the
11151115
NEW_GROUP_REQUEST parameter equal to the Largest Location's Group, plus one (see
11161116
{{new-group-request}}).
11171117

@@ -1256,7 +1256,7 @@ A lower priority number indicates higher priority; the highest priority is 0.
12561256

12571257
`Subscriber Priority` is a priority number associated with an individual
12581258
request. It is specified in the SUBSCRIBE or FETCH message, and can be
1259-
updated via SUBSCRIBE_UPDATE message. The subscriber priority of an individual
1259+
updated via REQUEST_UPDATE message. The subscriber priority of an individual
12601260
schedulable object is the subscriber priority of the request that caused that
12611261
object to be sent. When subscriber priority is changed, a best effort SHOULD be
12621262
made to apply the change to all objects that have not been scheduled, but it is
@@ -1436,7 +1436,7 @@ multiple subscribers request the same Track. Subscription aggregation
14361436
allows relays to make only a single upstream subscription for the
14371437
Track. The published content received from the upstream subscription
14381438
request is cached and shared among the pending subscribers.
1439-
Because SUBSCRIBE_UPDATE only allows narrowing a subscription, relays that
1439+
Because MOQT restricts widening a subscription, relays that
14401440
aggregate upstream subscriptions can subscribe using the Largest Object
14411441
filter to avoid churn as downstream subscribers with disparate filters
14421442
subscribe and unsubscribe from a Track.
@@ -1511,7 +1511,7 @@ one publisher is available, the Relay MAY send the FETCH to any of them.
15111511
When a Relay receives an authorized SUBSCRIBE for a Track with one or more
15121512
`Established` upstream subscriptions, it MUST reply with SUBSCRIBE_OK. If the
15131513
SUBSCRIBE has Forward State=1 and the upstream subscriptions are in Forward
1514-
State=0, the Relay MUST send SUBSCRIBE_UPDATE with Forward=1 to all publishers.
1514+
State=0, the Relay MUST send REQUEST_UPDATE with Forward=1 to all publishers.
15151515
If there are no `Established` upstream subscriptions for the requested Track, the Relay
15161516
MUST send a SUBSCRIBE request to each publisher that has published the
15171517
subscription's namespace or prefix thereof. If the SUBSCRIBE has Forward=1,
@@ -1625,7 +1625,7 @@ The following Message Types are defined:
16251625
|-------|-----------------------------------------------------|
16261626
| 0x4 | SUBSCRIBE_OK ({{message-subscribe-ok}}) |
16271627
|-------|-----------------------------------------------------|
1628-
| 0x2 | SUBSCRIBE_UPDATE ({{message-subscribe-update}}) |
1628+
| 0x2 | REQUEST_UPDATE ({{message-request-update}}) |
16291629
|-------|-----------------------------------------------------|
16301630
| 0xA | UNSUBSCRIBE ({{message-unsubscribe}}) |
16311631
|-------|-----------------------------------------------------|
@@ -1671,7 +1671,7 @@ ongoing requests, and supports the endpoint's ability to limit the concurrency
16711671
and frequency of requests. Request IDs for one endpoint increment independently
16721672
from those sent by the peer endpoint. The client's Request ID starts at 0 and
16731673
are even and the server's Request ID starts at 1 and are odd. The Request ID
1674-
increments by 2 with each FETCH, SUBSCRIBE, SUBSCRIBE_UPDATE,
1674+
increments by 2 with each FETCH, SUBSCRIBE, REQUEST_UPDATE,
16751675
SUBSCRIBE_NAMESPACE, PUBLISH, PUBLISH_NAMESPACE or TRACK_STATUS request.
16761676
Other messages with a Request ID field reference the Request ID of another
16771677
message for correlation. If an endpoint receives a Request ID that is not valid
@@ -1719,7 +1719,7 @@ these parameters to appear in Setup messages.
17191719
#### AUTHORIZATION TOKEN Parameter {#authorization-token}
17201720

17211721
The AUTHORIZATION TOKEN parameter (Parameter Type 0x03) MAY appear in a
1722-
CLIENT_SETUP, SERVER_SETUP, PUBLISH, SUBSCRIBE, SUBSCRIBE_UPDATE,
1722+
CLIENT_SETUP, SERVER_SETUP, PUBLISH, SUBSCRIBE, REQUEST_UPDATE,
17231723
SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, TRACK_STATUS or FETCH message. This
17241724
parameter conveys information to authorize the sender to perform the operation
17251725
carrying the parameter.
@@ -1902,7 +1902,8 @@ The subscription has Publisher Priorty 128 if this parameter is omitted.
19021902
#### SUBSCRIBER PRIORITY Parameter {#subscriber-priority}
19031903

19041904
The SUBSCRIBER_PRIORITY parameter (Parameter Type 0x20) MAY appear in a
1905-
SUBSCRIBE, SUBSCRIBE_UPDATE, PUBLISH_OK or FETCH message. It is an
1905+
SUBSCRIBE, FETCH, REQUEST_UPDATE (for a subscription or FETCH),
1906+
PUBLISH_OK message. It is an
19061907
integer expressing the priority of a subscription relative to other
19071908
subscriptions and fetch responses in the same session. Lower numbers get higher
19081909
priority. See {{priorities}}. The range is restricted to 0-255. If a
@@ -1933,7 +1934,7 @@ REQUEST_OK, PUBLISH or FETCH, the receiver uses Ascending (0x1).
19331934
#### SUBSCRIPTION FILTER Parameter {#subscription-filter}
19341935

19351936
The SUBSCRIPTION_FILTER parameter (Parameter Type 0x21) MAY appear in a
1936-
SUBSCRIBE, PUBLISH_OK or SUBSCRIBE_UPDATE message. It is a
1937+
SUBSCRIBE, PUBLISH_OK or REQUEST_UPDATE (for a subscription) message. It is a
19371938
length-prefixed Subscription Filter (see {{subscription-filters}}). If the
19381939
length of the Subscription Filter does not match the parameter length, the
19391940
publisher MUST close the session with `PROTOCOL_VIOLATION`.
@@ -1951,9 +1952,9 @@ or UNSUBSCRIBE, depending on its role. This value is advisory and the sender
19511952
can terminate the subscription prior to or after the expiry time.
19521953

19531954
The receiver of the parameter can extend the subscription by sending a
1954-
SUBSCRIBE_UPDATE (TODO: SUBSCRIPTION_UPDATE). If the receiver of the parameter
1955+
REQUEST_UPDATE. If the receiver of the parameter
19551956
has one or more updated AUTHORIZATION_TOKENs, it SHOULD include those in the
1956-
SUBSCRIBE_UPDATE. Relays that send this parameter and applications that receive
1957+
REQUEST_UPDATE. Relays that send this parameter and applications that receive
19571958
it MAY introduce jitter to prevent many endpoints from updating
19581959
simultaneously.
19591960

@@ -1963,7 +1964,7 @@ does not expire or expires at an unknown time.
19631964
#### LARGEST OBJECT Parameter {#largest-param}
19641965

19651966
The LARGEST_OBJECT parameter (Parameter Type 0x9) MAY appear in SUBSCRIBE_OK,
1966-
PUBLISH or in REQUEST_OK (in response to SUBSCRIBE_UPDATE or TRACK_STATUS). It is a
1967+
PUBLISH or in REQUEST_OK (in response to REQUEST_UPDATE or TRACK_STATUS). It is a
19671968
length-prefixed Location structure (see {{location-structure}}) containing the
19681969
largest Location in the Track observed by the sending endpoint (see
19691970
{{subscription-filters}}. If Objects have been published on this Track the
@@ -1975,13 +1976,13 @@ any Objects in the Track.
19751976
#### FORWARD Parameter
19761977

19771978
The FORWARD parameter (Parameter Type 0x10) MAY appear in SUBSCRIBE,
1978-
SUBSCRIBE_UPDATE, PUBLISH, PUBLISH_OK and
1979+
REQUEST_UPDATE (for a subscription), PUBLISH, PUBLISH_OK and
19791980
SUBSCRIBE_NAMESPACE. It is a variable length integer specifying the
19801981
Forwarding State on affected subscriptions (see {{subscriptions}}). The
19811982
allowed values are 0 (don't forward) or 1 (forward). If an endpoint receives a
19821983
value outside this range, it MUST close the session with `PROTOCOL_VIOLATION`.
19831984

1984-
If the parameter is omitted from SUBSCRIBE_UPDATE, the value for the
1985+
If the parameter is omitted from REQUEST_UPDATE, the value for the
19851986
subscription remains unchanged. If the parameter is omitted from any other
19861987
message, the default value is 1.
19871988

@@ -1990,7 +1991,7 @@ message, the default value is 1.
19901991
The DYNAMIC_GROUPS parameter (parameter type 0x30) MAY appear in PUBLISH or
19911992
SUBSCRIBE_OK. The allowed values are 0 or 1. When the value is 1, it indicates
19921993
that the subscriber can request the Original Publisher to start a new Group
1993-
by including the NEW_GROUP_REQUEST parameter in PUBLISH_OK or SUBSCRIBE_UPDATE
1994+
by including the NEW_GROUP_REQUEST parameter in PUBLISH_OK or REQUEST_UPDATE
19941995
for this Track. If an endpoint receives a value larger than 1, it MUST close
19951996
the session with `PROTOCOL_VIOLATION`.
19961997

@@ -2001,10 +2002,10 @@ subscribers.
20012002
#### NEW GROUP REQUEST Parameter {#new-group-request}
20022003

20032004
The NEW_GROUP_REQUEST parameter (parameter type 0x32) MAY appear in PUBLISH_OK,
2004-
SUBSCRIBE or SUBSCRIBE_UPDATE. It is an integer representing the largest Group
2005+
SUBSCRIBE or REQUEST_UPDATE for a subscription. It is an integer representing the largest Group
20052006
ID in the Track known by the subscriber, plus 1. A value of 0 indicates that the
20062007
subscriber has no Group information for the Track. A subscriber MUST NOT send
2007-
this parameter in PUBLISH_OK or SUBSCRIBE_UPDATE if the publisher did not
2008+
this parameter in PUBLISH_OK or REQUEST_UPDATE if the publisher did not
20082009
include DYNAMIC_GROUPS=1 when establishing the subscription. A subscriber MAY
20092010
include this parameter in SUBSCRIBE without foreknowledge of support. If the
20102011
original publisher does not support dynamic Groups, it ignores the parameter in that
@@ -2024,7 +2025,7 @@ A relay that receives a NEW_GROUP_REQUEST for a Track without an `Established`
20242025
subscription MUST include the NEW_GROUP_REQUEST when subscribing upstream.
20252026

20262027
A relay that receives a NEW_GROUP_REQUEST for an `Established` subscription with a
2027-
value of 0 or a value larger than the Largest Group MUST send a SUBSCRIBE_UPDATE
2028+
value of 0 or a value larger than the Largest Group MUST send a REQUEST_UPDATE
20282029
including the NEW_GROUP_REQUEST to the publisher unless:
20292030

20302031
1. The Track does not support dynamic Groups
@@ -2237,7 +2238,7 @@ REQUESTS_BLOCKED Message {
22372238

22382239
## REQUEST_OK {#message-request-ok}
22392240

2240-
The REQUEST_OK message is sent to a response to SUBSCRIBE_UPDATE, TRACK_STATUS,
2241+
The REQUEST_OK message is sent to a response to REQUEST_UPDATE, TRACK_STATUS,
22412242
SUBSCRIBE_NAMESPACE and PUBLISH_NAMESPACE requests. The unique request ID in the
22422243
REQUEST_OK is used to associate it with the correct type of request.
22432244

@@ -2421,64 +2422,65 @@ SUBSCRIBE_OK Message {
24212422

24222423
* Track Extensions : A sequence of Extension Headers. See {{extension-headers}}.
24232424

2424-
## SUBSCRIBE_UPDATE {#message-subscribe-update}
2425+
## REQUEST_UPDATE {#message-request-update}
24252426

2426-
A subscriber sends a SUBSCRIBE_UPDATE to a publisher to modify an existing
2427-
subscription.
2428-
2429-
When a subscriber decreases the Start Location of the Subscription Filter
2430-
(see {{subscription-filters}}), the Start Location can be smaller than the Track's
2431-
Largest Location, similar to a new Subscription. FETCH can be used to retrieve
2432-
any necessary Objects smaller than the current Largest Location.
2433-
2434-
When a subscriber increases the End Location, the Largest Object at
2435-
the publisher might already be larger than the previous End Location. This will
2436-
create a gap in the subscription. The REQUEST_OK in response to the
2437-
SUBSCRIBE_UPDATE will include the LARGEST_OBJECT parameter, and the subscriber
2438-
can issue a FETCH to retrieve the omitted Objects, if any.
2439-
2440-
When a subscriber narrows their subscription (increase the Start Location and/or
2441-
decrease the End Group), it might still receive Objects outside the
2442-
new range if the publisher sent them before the update was processed.
2443-
2444-
The receiver of a SUBSCRIBE_UPDATE MUST respond with exactly one REQUEST_OK
2445-
or REQUEST_ERROR message indicating if the update was successful. When an
2446-
update is unsuccessful, the publisher MUST also terminate the subscription with
2447-
PUBLISH_DONE with error code `UPDATE_FAILED`.
2427+
The sender of a request (SUBSCRIBE, PUBLISH, FETCH, TRACK_STATUS,
2428+
PUBLISH_NAMESPACE, SUBSCRIBE_NAMESPACE) can later send a REQUEST_UPDATE to
2429+
modify it. A subscriber can also send REQUEST_UPDATE to modify parameters of a
2430+
subscription established with PUBLISH.
24482431

2449-
Like SUBSCRIBE, End Group MUST be greater than or equal to the Group specified
2450-
in `Start`.
2432+
The receiver of a REQUEST_UPDATE MUST respond with exactly one REQUEST_OK
2433+
or REQUEST_ERROR message indicating if the update was successful.
24512434

2452-
If a parameter previously set on the subscription in `SUBSCRIBE`, `PUBLISH_OK`
2453-
or `SUBSCRIBE_UPDATE` is not present in `SUBSCRIBE_UPDATE`, its value remains
2454-
unchanged.
2435+
If a parameter previously set on the request is not present in
2436+
`REQUEST_UPDATE`, its value remains unchanged.
24552437

2456-
There is no mechanism to remove a parameter from a subscription.
2438+
There is no mechanism to remove a parameter from a request.
24572439

2458-
The format of SUBSCRIBE_UPDATE is as follows:
2440+
The format of REQUEST_UPDATE is as follows:
24592441

24602442
~~~
2461-
SUBSCRIBE_UPDATE Message {
2443+
REQUEST_UPDATE Message {
24622444
Type (i) = 0x2,
24632445
Length (16),
24642446
Request ID (i),
2465-
Subscription Request ID (i),
2447+
Existing Request ID (i),
24662448
Number of Parameters (i),
24672449
Parameters (..) ...
24682450
}
24692451
~~~
2470-
{: #moq-transport-subscribe-update-format title="MOQT SUBSCRIBE_UPDATE Message"}
2452+
{: #moq-transport-request-update-format title="MOQT REQUEST_UPDATE Message"}
24712453

24722454
* Request ID: See {{request-id}}.
24732455

2474-
* Subscription Request ID: The Request ID of the SUBSCRIBE
2475-
({{message-subscribe-req}}) this message is updating. This MUST match an
2476-
existing Request ID. The publisher MUST close the session with `
2477-
`PROTOCOL_VIOLATION` if the subscriber specifies an invalid Subscription
2478-
Request ID.
2456+
* Existing Request ID: The Request ID of the request this message is
2457+
updating. This MUST match the Request ID of an existing request. The
2458+
receiver MUST close the session with `PROTOCOL_VIOLATION` if the sender
2459+
specifies an invalid Existing Request ID, or if the parameters included
2460+
in the REQUEST_UPDATE are invalid for the type of request being modified.
24792461

24802462
* Parameters: The parameters are defined in {{version-specific-params}}.
24812463

2464+
### Updating Subscriptions
2465+
2466+
When a subscriber decreases the Start Location of the Subscription Filter
2467+
(see {{subscription-filters}}), the Start Location can be smaller than the Track's
2468+
Largest Location, similar to a new Subscription. FETCH can be used to retrieve
2469+
any necessary Objects smaller than the current Largest Location.
2470+
2471+
When a subscriber increases the End Location, the Largest Object at
2472+
the publisher might already be larger than the previous End Location. This will
2473+
create a gap in the subscription. The REQUEST_OK in response to the
2474+
REQUEST_UPDATE will include the LARGEST_OBJECT parameter, and the subscriber
2475+
can issue a FETCH to retrieve the omitted Objects, if any.
2476+
2477+
When a subscriber narrows their subscription (increase the Start Location and/or
2478+
decrease the End Group), it might still receive Objects outside the
2479+
new range if the publisher sent them before the update was processed.
2480+
2481+
When a subscription
2482+
update is unsuccessful, the publisher MUST also terminate the subscription with
2483+
PUBLISH_DONE with error code `UPDATE_FAILED`.
24822484

24832485
## UNSUBSCRIBE {#message-unsubscribe}
24842486

@@ -2673,8 +2675,8 @@ MALFORMED_TRACK (0x12):
26732675
{{malformed-tracks}}).
26742676

26752677
UPDATE_FAILED (0x8):
2676-
: SUBSCRIBE_UPDATE failed on this subscription (see
2677-
{{message-subscribe-update}}).
2678+
: REQUEST_UPDATE failed on this subscription (see
2679+
{{message-request-update}}).
26782680

26792681
## FETCH {#message-fetch}
26802682

@@ -2946,7 +2948,7 @@ Relays without an `Established` subscription MAY forward TRACK_STATUS to one or
29462948
publishers, or MAY initiate a subscription (subject to authorization) as
29472949
described in {{publisher-interactions}} to determine the response. The publisher
29482950
does not send PUBLISH_DONE for this request, and the subscriber cannot send
2949-
SUBSCRIBE_UPDATE or UNSUBSCRIBE.
2951+
REQUEST_UPDATE or UNSUBSCRIBE.
29502952

29512953
## PUBLISH_NAMESPACE {#message-pub-ns}
29522954

@@ -3525,7 +3527,7 @@ not limited to:
35253527
* An Object in an open Subgroup exceeding its Delivery Timeout
35263528
* Early termination of subscription due to an UNSUBSCRIBE message
35273529
* A publisher's decision to end the subscription early
3528-
* A SUBSCRIBE_UPDATE moving the subscription's End Group to a smaller Group or
3530+
* A REQUEST_UPDATE moving the subscription's End Group to a smaller Group or
35293531
the Start Location to a larger Location
35303532
* Omitting a Subgroup Object due to the subcriber's Forward State
35313533

0 commit comments

Comments
 (0)