Skip to content

Commit 759f529

Browse files
authored
Add subscribe hints (#289)
This is a initial PR to get some basic definition of subscription hints. I would like to get us to an agreement for the basic proposal and then discuss further on error codes, edge cases and impacts/interactions with other messages (Sub Fin, RST, UPD) Fixes #111 Fixes #245 Fixes #260
2 parents 407f68f + 474471b commit 759f529

File tree

1 file changed

+125
-10
lines changed

1 file changed

+125
-10
lines changed

draft-ietf-moq-transport.md

Lines changed: 125 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -922,14 +922,57 @@ NOT be processed by a relay.
922922

923923
A receiver issues a SUBSCRIBE to a publisher to request a track.
924924

925-
The format of SUBSCRIBE is as follows:
925+
### Susbscribe Locations {#susbscribe-locations}
926+
927+
The receiver specifies a start and optional end `Location` for the subscription.
928+
A location value may be an absolute group or object sequence, or it may be a
929+
delta relative to the largest group or the largest object in a group.
926930

927931
~~~
928-
SUBSCRIBE Message {
929-
Track Namespace (b),
930-
Track Name (b),
931-
Number of Parameters (i),
932-
Parameters (..) ...
932+
Location {
933+
Mode (i),
934+
[Value (i)]
935+
}
936+
~~~
937+
938+
There are 4 modes:
939+
940+
None (0x0): The Location is unspecified, Value is not present
941+
942+
Absolute (0x1): Value is an absolute sequence
943+
944+
RelativePrevious (0x2): Value is a delta from the largest sequence. 0 is the
945+
largest sequence, 1 is the largest sequence - 1, and so on.
946+
947+
RelativeNext (0x3): Value is a delta from the largest sequence. 0 is the largest
948+
sequence + 1, 1 is the largest sequence + 2, and so on.
949+
950+
The following table shows an example of how the RelativePrevious and RelativeNext
951+
values are used to determine the absolute sequence.
952+
953+
~~~
954+
Sequence: 0 1 2 3 4 [5] [6] ...
955+
^
956+
Largest Sequence
957+
RelativePrevious Value: 4 3 2 1 0
958+
RelativeNext Value: 0 1 ...
959+
~~~
960+
{: title="Relative Indexing"}
961+
962+
963+
### SUBSCRIBE REQUEST Format
964+
965+
The format of SUBSCRIBE REQUEST is as follows:
966+
967+
~~~
968+
SUBSCRIBE REQUEST Message {
969+
Full Track Name Length (i),
970+
Full Track Name (...),
971+
StartGroup (Location),
972+
StartObject (Location),
973+
EndGroup (Location),
974+
EndObject (Location),
975+
Track Request Parameters (..) ...
933976
}
934977
~~~
935978
{: #moq-transport-subscribe-format title="MOQT SUBSCRIBE Message"}
@@ -939,11 +982,83 @@ SUBSCRIBE Message {
939982

940983
* Track Name: Identifies the track name as defined in ({{track-name}}).
941984

942-
* Parameters: As defined in {{version-specific-params}}.
985+
* StartGroup: The Location of the requested group. StartGroup's Mode MUST NOT be
986+
None.
987+
988+
* StartObject: The Location of the requested object. StartObject's Mode MUST NOT
989+
be None.
990+
991+
* EndGroup: The last Group requested in the subscription, inclusive. EndGroup's
992+
Mode is None for an open-ended subscription.
993+
994+
* EndObject: The last Object requested in the subscription, exclusive.
995+
EndObject's Mode MUST be None if EndGroup's Mode is None. EndObject's Mode MUST
996+
NOT be None if EndGroup's Mode is not None.
997+
998+
* Track Request Parameters: The parameters are defined in
999+
{{version-specific-params}}
9431000

9441001
On successful subscription, the publisher SHOULD start delivering
945-
objects from the group sequence and object sequence as defined in the
946-
Parameters.
1002+
objects from the group sequence and object sequence described above.
1003+
1004+
If a publisher cannot satisfy the requested start or end for the subscription it
1005+
MAY send a SUBSCRIBE_ERROR with code TBD. A publisher MUST NOT send objects
1006+
from outside the requested start and end.
1007+
1008+
### Examples
1009+
1010+
~~~
1011+
1. Now
1012+
1013+
Start Group: Mode=RelativePrevious, Value=0
1014+
Start Object: Mode=RelateiveNext, Value=0
1015+
End Group: Mode=None
1016+
End Object: Mode=None
1017+
1018+
StartGroup=Largest Group
1019+
StartObject=Largest Object + 1
1020+
1021+
2. Current
1022+
1023+
Start Group: Mode=RelativePrevious, Value=0
1024+
Start Object: Mode=Absolute, Value=0
1025+
End Group: Mode=None
1026+
End Object: Mode=None
1027+
1028+
StartGroup=Largest Group
1029+
StartObject=0
1030+
1031+
3. Previous
1032+
1033+
Start Group: Mode=RelativePrevious, Value=1
1034+
Start Object: Mode=Absolute, Value=0
1035+
End Group: Mode=None
1036+
End Object: Mode=None
1037+
1038+
StartGroup=Largest Group - 1
1039+
StartObject=0
1040+
1041+
4. Next
1042+
1043+
Start Group: Mode=RelativeNext, Value=0
1044+
Start Object: Mode=Absolute, Value=0
1045+
End Group: Mode=None
1046+
End Object: Mode=None
1047+
1048+
StartGroup=Largest Group + 1
1049+
StartObject=0
1050+
1051+
5. Range, All of group 3
1052+
1053+
Start Group: Mode=Absolute, Value=3
1054+
Start Object: Mode=Absolute, Value=0
1055+
End Group: Mode=Absolute, Value=4
1056+
End Object: Mode=Absolute, Value=0
1057+
1058+
Start = Group 3, Object 0
1059+
End = Group 3, Object <last>
1060+
~~~
1061+
9471062

9481063
## SUBSCRIBE_OK {#message-subscribe-ok}
9491064

@@ -1194,7 +1309,7 @@ GOAWAY Message {
11941309

11951310
# Security Considerations {#security}
11961311

1197-
TODO: Expand this section.
1312+
TODO: Expand this section, including subscriptions.
11981313

11991314
## Resource Exhaustion
12001315

0 commit comments

Comments
 (0)