Skip to content
Open
Changes from 2 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
25a2c7e
Put PUBLISH_NAMESPACE on its own bidi stream and allow only subscribi…
ianswett Oct 31, 2025
89e380b
Update draft-ietf-moq-transport.md
ianswett Nov 1, 2025
abafb02
Update draft-ietf-moq-transport.md
ianswett Nov 1, 2025
1a6fe39
Change to Track Namespace Suffix
ianswett Nov 1, 2025
7e16420
Fix whitespace and a trailing sentence.
ianswett Nov 1, 2025
a30cd61
Remove UNSUBSCRIBE_NAMESPACE
ianswett Nov 1, 2025
4b21ba2
Ref conflict
ianswett Nov 1, 2025
9c8cc68
Update draft-ietf-moq-transport.md
ianswett Nov 1, 2025
9ae1039
Alan's suggestion
ianswett Nov 1, 2025
c71ae77
Update draft-ietf-moq-transport.md
ianswett Nov 3, 2025
a31e5b3
Update draft-ietf-moq-transport.md
ianswett Nov 3, 2025
b5e6711
Change the codepoint of NAMESPACE to 0x8
ianswett Nov 3, 2025
0132f29
Fix table formatting
ianswett Nov 3, 2025
2465b19
Describe the case when a SUBSCRIBE_NAMESPACE arrives first
ianswett Nov 3, 2025
bd3ebc8
Add NAMESPACE_DONE
ianswett Nov 3, 2025
d58eff5
Merge branch 'main' into ianswett-streamy-namespaces
ianswett Nov 4, 2025
9e37747
Update draft-ietf-moq-transport.md
ianswett Nov 4, 2025
13a3a6f
Merge branch 'main' into ianswett-streamy-namespaces
ianswett Nov 13, 2025
2e23347
Fix subscribe-ns references
ianswett Nov 13, 2025
c5e7fbf
Update draft-ietf-moq-transport.md
ianswett Nov 18, 2025
49d3c32
Update draft-ietf-moq-transport.md
ianswett Nov 20, 2025
4a76892
Update draft-ietf-moq-transport.md
ianswett Nov 20, 2025
9949625
Update draft-ietf-moq-transport.md
afrind Nov 21, 2025
b969d51
Update draft-ietf-moq-transport.md
afrind Nov 21, 2025
24b2efe
Merge branch 'main' into ianswett-streamy-namespaces
ianswett Nov 22, 2025
6aba921
Merge branch 'main' into ianswett-streamy-namespaces
ianswett Nov 26, 2025
e6a6368
Merge branch 'main' into ianswett-streamy-namespaces
ianswett Dec 1, 2025
fe00420
Update draft-ietf-moq-transport.md
ianswett Dec 1, 2025
a0e6b3b
Update draft-ietf-moq-transport.md
ianswett Dec 2, 2025
8d39c86
Reflow
ianswett Dec 2, 2025
35695e0
Update draft-ietf-moq-transport.md
ianswett Dec 2, 2025
17e0d0a
Merge branch 'main' into ianswett-streamy-namespaces
ianswett Dec 2, 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
44 changes: 34 additions & 10 deletions draft-ietf-moq-transport.md
Original file line number Diff line number Diff line change
Expand Up @@ -2885,6 +2885,24 @@ PUBLISH_NAMESPACE Message {

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

## NAMESPACE {#message-pub-ns}
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
## NAMESPACE {#message-pub-ns}
## NAMESPACE_NOTIFY {#message-pub-ns}

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I don't have a strong opinion, but NAMESPACE is shorter


The NAMESPACE message is similar to the PUBLISH_NAMESPACE message, except
it is in response to a SUBSCRIBE_NAMESPACE request. Because it is never
sent on the control stream, it can use the same type.

~~~
NAMESPACE Message {
Type (i) = 0x6,
Length (16),
Copy link
Collaborator

Choose a reason for hiding this comment

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

Aren't these 3 bytes completely redundant?

Copy link
Collaborator

Choose a reason for hiding this comment

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

Ah the response stream can have both NAMESPACE and PUBLISH_NAMESPACE_DONE so you need type (and also REQUEST_OK/ERROR, maybe?). Length feels useless here, but I can live with it.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yes, I think I need a type. The Length is a bit more obviously redundant, but that goes back to the TLV vs TV conversation. I think there's a good argument that this isn't on the control stream and one could use TV even if we're using TLV elsewhere.

Copy link
Collaborator

Choose a reason for hiding this comment

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

This stream is currently a mini control stream that supports:

REQUEST_OK
REQUEST_ERROR
NAMESPACE
PUBLISH_NAMESPACE_DONE

There's some nice code reusability there, enough that I can live with the length redundancy. The alternative is quite a bit more spec text, but I can live with that too if folks are concerned.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I think it's worth considering, but we can make it separable.

Track Namespace (..),
}
~~~
{: #moq-transport-pub-ns-format title="MOQT NAMESPACE Message"}

* Track Namespace: Identifies a track's namespace as defined in
{{track-name}}.

## PUBLISH_NAMESPACE_DONE {#message-pub-ns-done}

The publisher sends the `PUBLISH_NAMESPACE_DONE` control message to indicate its
Expand Down Expand Up @@ -2932,16 +2950,18 @@ PUBLISH_NAMESPACE_CANCEL Message {

## SUBSCRIBE_NAMESPACE {#message-subscribe-ns}

The subscriber sends the SUBSCRIBE_NAMESPACE control message to a publisher to
request the current set of matching published namespaces and `Established`
subscriptions, as well as future updates to the set.
The subscriber sends a SUBSCRIBE_NAMESPACE control message on a new
bidirectional stream to a publisher to request the current set of matching
Copy link
Collaborator

Choose a reason for hiding this comment

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

How do you distinguish the control stream from this stream?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

It's a new bidi stream and it starts with the SUBSCRIBE_NAMESPACE message.

Copy link
Collaborator

Choose a reason for hiding this comment

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

So if the first stream I receive starts with SUBSCRIBE_NAMESPACE, I hold it pending one that starts with CLIENT_SETUP?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Without 0RTT clearly described, which it isn't today, I'm unsure how that could happen?

Copy link
Collaborator

Choose a reason for hiding this comment

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

Yeah @afrind if right.

It depends on if the QUIC library returns streams in stream_id order, but any bidirectional stream should be buffered until the CLIENT_SETUP is processed. In fact, the same is true for any unidirectional streams if pipelining a PUBLISH is valid (debatable with max_request_id), but that's a lot easier to implement.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Thanks, I understand the issue now. Yes, I can call out this potential issue.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

PTAL at 2465b19

published namespaces and/or `Established` subscriptions, as well as future
updates to the set.

~~~
SUBSCRIBE_NAMESPACE Message {
Type (i) = 0x11,
Length (16),
Request ID (i),
Track Namespace Prefix (..),
Subscribe Options (i),
Copy link
Collaborator

Choose a reason for hiding this comment

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

Can one send 2 subscribe_namespace with 2 different options

Copy link
Collaborator

Choose a reason for hiding this comment

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

No, this falls under duplicate prefix text elsewhere.

Number of Parameters (i),
Parameters (..) ...
}
Expand All @@ -2960,15 +2980,19 @@ SUBSCRIBE_NAMESPACE Message {
Track Namespace Prefix consisting of 0 or greater than than 32 Track Namespace
Fields, it MUST close the session with a `PROTOCOL_VIOLATION`.


* Subscribe Options: Allows subscribers to request PUBLISH (0x00),
NAMESPACE (0x01), or both (0x02) for a given SUBSCRIBE_NAMESPACE request.

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

The publisher will respond with REQUEST_OK or
REQUEST_ERROR. If the SUBSCRIBE_NAMESPACE is successful, the publisher will
immediately forward existing PUBLISH_NAMESPACE and PUBLISH messages that match
the Track Namespace Prefix that have not already been sent to this subscriber.
If the set of matching PUBLISH_NAMESPACE messages changes, the publisher sends
the corresponding PUBLISH_NAMESPACE or PUBLISH_NAMESPACE_DONE message.
The publisher will respond with REQUEST_OK or REQUEST_ERROR. If the
Copy link
Collaborator

Choose a reason for hiding this comment

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

I think you mean to say these will come on the response half of the bidi stream.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

True, I updated the text above. This text is fairly duplicative I think, but I guess we can move it in another PR?

SUBSCRIBE_NAMESPACE is successful, the publisher will send matching
NAMESPACE messages on the response stream if they are requested.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Do we need or want a mechanism to get only the track names in the same format as namespaces, or we think only PUBLISH is sufficient?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I think we do want that, but I was trying to keep this small. Happy to add it into this PR if we're all sure we want it.

Also, any matching PUBLISH messages without an active Subscription will be
sent on the control stream. When there are changes to the namespaces or
subscriptions being published and the subscriber is subscribed to them,
the publisher sends the corresponding NAMESPACE, PUBLISH_NAMESPACE_DONE,
or PUBLISH messages.

A subscriber cannot make overlapping namespace subscriptions on a single
session. Within a session, if a publisher receives a SUBSCRIBE_NAMESPACE with a
Expand Down