<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-23" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-23"/>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <author initials="A." surname="Frindell" fullname="Alan Frindell" role="editor">
      <organization>Meta</organization>
      <address>
        <email>afrind@meta.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <abstract>
      <?line 62?>

<t>This document defines Media over QUIC Transport (MOQT), a publish/subscribe
protocol that runs over QUIC and WebTransport. MOQT leverages the features of
these transports, such as streams, datagrams, priorities, and partial
reliability. MOQT operates both point-to-point and through intermediate relays,
enabling scalable low-latency delivery. Despite its name, MOQT is media
agnostic and can be used for a wide range of use cases.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/moq-transport/draft-ietf-moq-transport.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-transport/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/moq-transport"/>.</t>
    </note>
  </front>
  <middle>
    <?line 71?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media Over QUIC Transport (MOQT) is a publish/subscribe protocol that runs over
QUIC <xref target="QUIC"/> or WebTransport <xref target="WebTransport"/>. Publishers produce data that is
delivered to subscribers either point-to-point or through intermediate relays.
MOQT leverages transport features such as streams, datagrams, priorities, and
partial reliability to support a wide range of use cases with different
resiliency and latency needs, from live to interactive, without compromising
scalability.</t>
      <t>Despite its name, MOQT is content agnostic. MoQ Streaming Formats define how
specific content types are encoded, packaged, and mapped to MOQT objects, along
with policies for discovery and subscription.</t>
      <section anchor="document-structure">
        <name>Document Structure</name>
        <t>This document describes the MOQT protocol and is structured as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The core concepts and functionality are described first
            </t>
            <ul spacing="normal">
              <li>
                <t>Section 2 <xref target="model"/> Object Data Model describes how Objects, Tracks and Namespaces relate</t>
              </li>
              <li>
                <t>Section 3 <xref target="publishing-and-receiving-tracks"/> Describes how Objects in Tracks are Published and Retrieved.</t>
              </li>
              <li>
                <t>Section 4 <xref target="track-discovery"/> Describes mechanisms for discovering Publishers and Namespaces</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Next, the document describes how Objects are transmitted and MOQT Sessions
            </t>
            <ul spacing="normal">
              <li>
                <t>Section 5 <xref target="object-transmission"/> Describes ways MOTQ allows a subscriber to influence Object transmission order</t>
              </li>
              <li>
                <t>Section 6 <xref target="session-init"/> Describes how to initiate a session and key properties of a session, such as extensibility.</t>
              </li>
              <li>
                <t>Section 7 <xref target="relays-moq"/> Describes key properties and requirements of MOQT relays</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Then the document describes how Control Messages and Objects are serialized and sent
            </t>
            <ul spacing="normal">
              <li>
                <t>Section 8 <xref target="notational-conventions-and-common-structures"/> Notational Conventions and Common Structures details structures used by subsequent sections</t>
              </li>
              <li>
                <t>Section 9 <xref target="message"/> Control Messages details how Control Messages are sent, including their wire encoding</t>
              </li>
              <li>
                <t>Section 10 <xref target="moqt-properties"/> MOQT Properties describes Track and Object properties defined in the core protocol</t>
              </li>
              <li>
                <t>Section 11 <xref target="data-streams"/> Data streams describes the mapping and serialization of Objects onto streams and datagrams</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Finally, the document discusses deployment related considerations
            </t>
            <ul spacing="normal">
              <li>
                <t>Section 12 <xref target="error-handling"/> Discusses MOQT errors and how to best handle them</t>
              </li>
              <li>
                <t>Section 13 <xref target="grease"/> Describes how to utilize unspecified codepoints to prevent protocol ossification.</t>
              </li>
              <li>
                <t>Section 14 <xref target="transport-considerations"/> Discusses transport related considerations, including congestion control</t>
              </li>
              <li>
                <t>Section 15 <xref target="security"/> Discusses security considerations, including denial-of-service and authentication</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>The development of MOQT is driven by goals in a number of areas -
specifically latency, the robust feature set of QUIC and relay
support.</t>
        <section anchor="latency">
          <name>Latency</name>
          <t>Latency is necessary to correct for variable network throughput. Ideally live
content is consumed at the same bitrate it is produced. End-to-end latency would
be fixed and only subject to encoding and transmission delays. Unfortunately,
networks have variable throughput, primarily due to congestion. Attempting to
deliver content encoded at a higher bitrate than the network can cause
queuing along the path from producer to consumer. The speed at which a protocol
can detect and respond to congestion determines the overall latency. TCP-based
protocols are simple but are slow to detect congestion and suffer from
head-of-line blocking. Protocols utilizing UDP directly can avoid queuing, but
the application is then responsible for the complexity of fragmentation,
congestion control, retransmissions, receiver feedback, reassembly, and
more. One goal of MOQT is to achieve the best of both these worlds: leverage the
features of QUIC to create a simple yet flexible low latency protocol that can
rapidly detect and respond to congestion.</t>
        </section>
        <section anchor="leveraging-quic">
          <name>Leveraging QUIC</name>
          <t>The parallel nature of QUIC streams can provide improvements in the face
of loss. A goal of MOQT is to design a streaming protocol to leverage
the transmission benefits afforded by parallel QUIC streams as well as
exercising options for flexible loss recovery.</t>
        </section>
        <section anchor="convergence">
          <name>Convergence</name>
          <t>Some live media architectures today have separate protocols for ingest and
distribution, for example RTMP and HTTP based HLS or DASH. Switching protocols
necessitates intermediary origins which re-package the
media content. While specialization can have its benefits, there are efficiency
gains to be had in not having to re-package content. A goal of MOQT is to
develop a single protocol which can be used for transmission from contribution
to distribution. A related goal is the ability to support existing encoding and
packaging schemas, both for backwards compatibility and for interoperability
with the established content preparation ecosystem.</t>
        </section>
        <section anchor="relays">
          <name>Relays</name>
          <t>An integral feature of a protocol being successful is its ability to
deliver media at scale. Greatest scale is achieved when third-party
networks, independent of both the publisher and subscriber, can be
leveraged to relay the content. These relays must cache content for
distribution efficiency while simultaneously routing content and
deterministically responding to congestion in a multi-tenant network. A
goal of MOQT is to treat relays as first-class citizens of the protocol
and ensure that objects are structured such that information necessary
for distribution is available to relays while the media content itself
remains opaque and private.</t>
        </section>
      </section>
      <section anchor="terms-and-definitions">
        <name>Terms and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>The following terms are used with the first letter capitalized.</t>
        <dl>
          <dt>Application:</dt>
          <dd>
            <t>The entity using MOQT to transmit and receive data.</t>
          </dd>
          <dt>Client:</dt>
          <dd>
            <t>The party initiating a Transport Session.  A Client can be a Publisher, a
Subscriber, or both.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>The party accepting an incoming Transport Session.  A Server can be a
Publisher, a Subscriber, or both.</t>
          </dd>
          <dt>Endpoint:</dt>
          <dd>
            <t>A Client or Server.</t>
          </dd>
          <dt>Peer:</dt>
          <dd>
            <t>The other endpoint than the one being described.</t>
          </dd>
          <dt>Publisher:</dt>
          <dd>
            <t>An endpoint that handles subscriptions by sending requested Objects from the requested track.</t>
          </dd>
          <dt>Subscriber:</dt>
          <dd>
            <t>An endpoint that subscribes to and receives tracks.</t>
          </dd>
          <dt>Original Publisher:</dt>
          <dd>
            <t>The initial publisher of a given track.</t>
          </dd>
          <dt>End Subscriber:</dt>
          <dd>
            <t>A subscriber that initiates a subscription and does not send the data on to other subscribers.</t>
          </dd>
          <dt>Relay:</dt>
          <dd>
            <t>An entity that is both a Publisher and a Subscriber, is not the Original
Publisher or End Subscriber, and conforms to all requirements in <xref target="relays-moq"/>.</t>
          </dd>
          <dt>Upstream:</dt>
          <dd>
            <t>In the direction of the Original Publisher.</t>
          </dd>
          <dt>Downstream:</dt>
          <dd>
            <t>In the direction of the End Subscriber(s).</t>
          </dd>
          <dt>Transport Session:</dt>
          <dd>
            <t>A raw QUIC connection or a WebTransport session.</t>
          </dd>
          <dt>Stream:</dt>
          <dd>
            <t>A bidirectional or unidirectional bytestream provided by the
QUIC transport or WebTransport.</t>
          </dd>
          <dt>Congestion:</dt>
          <dd>
            <t>Packet loss and queuing caused by degraded or overloaded networks.</t>
          </dd>
          <dt>Group:</dt>
          <dd>
            <t>A collection of objects within a track. A group represents a join point
in a track. See (<xref target="model-group"/>).</t>
          </dd>
          <dt>Subgroup:</dt>
          <dd>
            <t>A sequence of one or more objects from the same group, sent on a single
transport stream whenever possible. See (<xref target="model-subgroup"/>).</t>
          </dd>
          <dt>Object:</dt>
          <dd>
            <t>An object is an addressable unit whose payload is a sequence of
bytes. Objects form the base element in the MOQT data model. See
(<xref target="model-object"/>).</t>
          </dd>
          <dt>Track:</dt>
          <dd>
            <t>A track is a collection of groups. See (<xref target="model-track"/>).</t>
          </dd>
          <dt>Subscription:</dt>
          <dd>
            <t>An ongoing relationship in which a publisher delivers newly published
objects from a track to a subscriber. See (<xref target="subscriptions"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="stream-management-terms">
        <name>Stream Management Terms</name>
        <t>This document uses stream management terms described in <xref section="1.3" sectionFormat="comma" target="RFC9000"/> including STOP_SENDING, RESET_STREAM, and FIN. It also uses
RESET_STREAM_AT from <xref target="I-D.draft-ietf-quic-reliable-stream-reset"/>.
RESET_STREAM_AT can be used by MOQT, but the protocol is also designed to work
correctly when the extension is not used or not supported.</t>
        <t>When this document says an endpoint "resets" a stream, it means the endpoint
sends a RESET_STREAM or RESET_STREAM_AT frame on that stream (see
<xref target="closing-subgroup-streams"/> for considerations on choosing between them).</t>
      </section>
      <section anchor="response-message-naming">
        <name>Response Message Naming</name>
        <t>Most requests in MOQT are answered with a common REQUEST_OK
(<xref target="message-request-ok"/>) or REQUEST_ERROR (<xref target="message-request-error"/>) message.
This document uses the shorthand PUBLISH_OK, FETCH_OK, REQUEST_UPDATE_OK,
TRACK_STATUS_OK, SUBSCRIBE_NAMESPACE_OK, SUBSCRIBE_TRACKS_OK and
PUBLISH_NAMESPACE_OK to refer to a REQUEST_OK sent in response to the
corresponding request type.  Likewise, it uses the shorthand SUBSCRIBE_ERROR,
FETCH_ERROR, PUBLISH_ERROR, SUBSCRIBE_NAMESPACE_ERROR, SUBSCRIBE_TRACKS_ERROR,
PUBLISH_NAMESPACE_ERROR, TRACK_STATUS_ERROR and REQUEST_UPDATE_ERROR to refer
to a REQUEST_ERROR sent in response to the corresponding request type.</t>
      </section>
      <section anchor="modularity">
        <name>Modularity</name>
        <t>MOQT defines all messages necessary to implement both simple publishing or
subscribing endpoints as well as fully capable Relays.  Non-Relay endpoints
<bcp14>MAY</bcp14> implement only the subset of functionality required to perform necessary
tasks.  For example, a limited media player could operate using only SUBSCRIBE
related messages.  Limited endpoints <bcp14>SHOULD</bcp14> respond to any unsupported messages
with the appropriate <tt>NOT_SUPPORTED</tt> error code, rather than ignoring them.</t>
        <t>Relays <bcp14>MUST</bcp14> implement all MOQT messages defined in this document, as well as
processing rules described in <xref target="relays-moq"/>.</t>
      </section>
    </section>
    <section anchor="model">
      <name>Object Data Model</name>
      <t>MOQT has a hierarchical data model, comprised of tracks which contain
groups, and groups that contain objects. Inside of a group, the objects
can be organized into subgroups.</t>
      <t>To give an example of how an application might use this data model,
consider an application sending high and low resolution video using a
codec with temporal scalability. Each resolution is sent as a separate
track to allow the subscriber to pick the appropriate resolution given
the display environment and available bandwidth. Each independently
coded sequence of pictures in a resolution is sent as a group as the
first picture in the sequence can be used as a random access point.
This allows the client to join at the logical points where decoding
of the media can start without needing information before the join
points. The temporal layers are sent as separate subgroups to allow
the priority mechanism to favor lower temporal layers when there is
not enough bandwidth to send all temporal layers. Each frame of video
is sent as a single object.</t>
      <section anchor="model-object">
        <name>Objects</name>
        <t>The basic data element of MOQT is an object.  An object is an
addressable unit whose payload is a sequence of bytes.  All objects
belong to a group, indicating ordering and potential
dependencies (see <xref target="model-group"/>).  An object is uniquely identified by
its track namespace, track name, group ID, and object ID, and must be an
identical sequence of bytes regardless of how or where it is retrieved.
An Object can become unavailable, but its contents <bcp14>MUST NOT</bcp14> change over
time.</t>
        <t>Every Object within a Group belongs to exactly one Subgroup or Datagram. An
Original Publisher <bcp14>MAY</bcp14> use both Subgroups and Datagrams within a Group or
Track.</t>
        <t>Objects are comprised of two parts: metadata and a payload.  The metadata is
never encrypted and is always visible to relays (see <xref target="relays-moq"/>). The
payload portion may be encrypted, in which case it is only visible to the
Original Publisher and End Subscribers. The Original Publisher is solely
responsible for the content of the object payload. This includes the
underlying encoding, compression, any end-to-end encryption, or
authentication.</t>
        <section anchor="object-header">
          <name>Object Fields</name>
          <t>A MOQT Object has the following fields:</t>
          <t>Track Namespace and Track Name: The track this object belongs to.</t>
          <t>Group ID: The identifier of the Object's Group (see <xref target="model-group"/>) within the Track.</t>
          <t>Object ID: The order of the object within the group.</t>
          <t>Publisher Priority: An integer indicating the publisher's priority for the Object (<xref target="priorities"/>).</t>
          <t>Delivery Mode: An enumeration indicating whether an Object is sent in a Subgroup or Datagram. The Original Publisher establishes an Object's Delivery Mode by how it first transmits the Object. In a subscription, an Object <bcp14>MUST</bcp14> be sent according to its Delivery Mode.</t>
          <t>Subgroup ID: The identifier of the Object's Subgroup (see <xref target="model-subgroup"/>) within the Group. Objects sent in Datagrams do not have a Subgroup ID.</t>
          <t>Object Properties : A sequence of key-value pairs associated with the object. See <xref target="object-properties"/>.</t>
          <t>Object Payload: A possibly empty sequence of bytes.</t>
        </section>
        <section anchor="object-states">
          <name>Object States</name>
          <t>From the perspective of a subscriber or a cache, an Object can be in four
possible states:</t>
          <ol spacing="normal" type="1"><li>
              <t>The Object is known to not exist. This state is permanent.  All signals
that an Object does not exist are authoritative.</t>
            </li>
            <li>
              <t>The Object is known to exist.</t>
            </li>
            <li>
              <t>The Object is Gone.  The original publisher cannot deliver the Object and
will not be able to, but does not know whether it exists.</t>
            </li>
            <li>
              <t>The state of the Object is Unknown, either because it has not yet been
received, or it has not yet been produced.</t>
            </li>
          </ol>
          <t>An Object moves to a state when the endpoint receives the Object or a signal of
that state.  When a cached Object or state expires (see <xref target="max-cache-duration"/>),
the Object returns to Unknown.</t>
          <figure anchor="object-state-diagram">
            <name>Object States as observed by the receiver</name>
            <artwork><![CDATA[
                   +---------+
                   | Unknown |
                   +---------+
                    |   |   |
        +-----------+   |   +-----------+
        |               v               |
        |           +-------+           |
        |           | Gone  |           |
        |           +-------+           |
        |            |     |            |
        |      +-----+     +-----+      |
        v      v                 v      v
    +----------------+     +----------------+
    |     Exists     |     | Does Not Exist |
    +----------------+     +----------------+

Transitions to Unknown after cache expiry are not shown
]]></artwork>
          </figure>
          <t>A gap in the observed Object IDs does not by itself convey any information about
the skipped Objects. Skipped Objects remain in the Unknown state until they are
received or their non-existence is signalled, for example in a FETCH stream (see
<xref target="fetch-header"/>) or via a Prior Object ID Gap (see <xref target="prior-object-id-gap"/>).</t>
          <t>A publisher <bcp14>MUST NOT</bcp14> signal that an Object does not exist unless it knows the
Object has never existed and never will; otherwise it signals that the Object is
Gone or Unknown.  For example, a publisher that restarts without state and
resumes a Track at a new Group, or that retains only recent history, signals
earlier Objects as Gone in FETCH responses.  Only the original publisher
originates Gone (see <xref target="relay-fetch-handling"/>).  Because another source can
still hold a Gone Object, receiving an Object that was recorded as Gone or
Unknown is not an error.</t>
          <t>Whenever the publisher communicates that certain objects do not exist, this
fact is expressed as a contiguous range of non-existent objects and
by including Properties indicating the group/object gaps; MOQT
implementers should take that into account when selecting appropriate data
structures.</t>
        </section>
      </section>
      <section anchor="model-subgroup">
        <name>Subgroups</name>
        <t>A subgroup is a sequence of one or more objects from the same group
(<xref target="model-group"/>) in ascending order by Object ID. Objects in a subgroup
have a dependency and priority relationship consistent with sharing a
stream and are sent on a single stream whenever possible. A Group is delivered
using at least as many streams as there are Subgroups in the Group,
typically with a one-to-one mapping between Subgroups and streams.</t>
        <t>When an Object's Delivery Mode (see <xref target="object-properties"/>) is
"Datagram", it is not sent in Subgroups, does not belong to a Subgroup in any
way, and the description in the remainder of this section does not apply.</t>
        <t>Streams offer in-order reliable delivery and the ability to cancel sending and
retransmission of data. Furthermore, many QUIC and WebTransport implementations
offer the ability to control the relative scheduling priority of pending stream
data.</t>
        <t>When Objects are sent in a subscription (see <xref target="subscriptions"/>),  Objects
from two subgroups <bcp14>MUST NOT</bcp14> be sent on the same stream, and Objects from the
same Subgroup <bcp14>MUST NOT</bcp14> be sent on different streams, unless one of the streams
was reset prematurely, or upstream conditions have forced objects from a Subgroup
to be sent out of Object ID order.</t>
        <t>Original publishers assign each Subgroup a Subgroup ID, and do so as they see fit.  The
scope of a Subgroup ID is a Group, so Subgroups from different Groups <bcp14>MAY</bcp14> share a Subgroup
ID without implying any relationship between them. In general, publishers assign
objects to subgroups in order to leverage the features of streams as described
above.</t>
        <t>In general, if Object B is dependent on Object A, then delivery of B can follow
A, i.e. A and B can be usefully delivered over a single stream.  If an Object is
dependent on all previous Objects in a Subgroup, it likely fits best in that
Subgroup.  If an Object is not dependent on any of the Objects in a Subgroup, it
likely belongs in a different Subgroup.</t>
        <t>When assigning Objects to different Subgroups, the Original Publisher makes a
reasonable tradeoff between having an optimal mapping of Object relationships in
a Group and minimizing the number of streams used.</t>
        <t>When the Original Publisher opens a new subgroup, it <bcp14>MUST</bcp14> set the FIRST_OBJECT
bit (<xref target="subgroup-header"/>) to indicate that the first object in the subgroup
stream is the first object ever published in that subgroup. A relay forwarding a
subgroup that begins with the first object ever published in that subgroup <bcp14>MUST</bcp14>
set the FIRST_OBJECT bit.</t>
      </section>
      <section anchor="model-group">
        <name>Groups</name>
        <t>A group is a collection of Objects and is a sub-unit of a Track
(<xref target="model-track"/>).  Groups <bcp14>SHOULD</bcp14> be independently useful, so Objects within a
Group <bcp14>SHOULD NOT</bcp14> depend on Objects in other Groups. A Group provides a join
point for subscriptions, so a subscriber that does not want to receive the
entire Track can opt to receive only Groups starting from a given Group ID.
Groups can contain any number of Objects.</t>
        <section anchor="group-ids">
          <name>Group IDs</name>
          <t>Within a track, the original publisher <bcp14>SHOULD</bcp14> publish Group IDs which increase
with time (where "time" is defined according to the internal clock of the media
being sent). In some cases, Groups will be produced in increasing order, but sent
to subscribers in a different order, for example when the subscription's Group
Order is Descending.  Due to network reordering and the partial reliability
features of MOQT, Objects from different Groups can always be received out of order.</t>
          <t>As a result, subscribers cannot infer the existence of a Group until an object in
the Group is received. This can create gaps in a cache that can be filled
by doing a Fetch upstream, if necessary.</t>
          <t>Applications that do not produce Group IDs that increase with time are limited
to the subset of MOQT that does not compare group IDs. Subscribers to these
Tracks <bcp14>SHOULD NOT</bcp14> use Location filters which span multiple Groups in FETCH or
SUBSCRIBE.  SUBSCRIBE and FETCH delivery use Group Order, so they could have
an unexpected delivery order if Group IDs do not increase with time.</t>
          <t>The amount of time elapsed between publishing an Object in Group ID N and in a
Group ID &gt; N, or even which will be published first, is not defined by this
specification and is defined by the applications using MOQT.</t>
        </section>
      </section>
      <section anchor="model-track">
        <name>Track</name>
        <t>A track is a sequence of groups (<xref target="model-group"/>). It is the entity
against which a subscriber issues a subscription request.  A subscriber
can request to receive individual tracks starting at a group boundary,
including any new objects pushed by the publisher while the track is
active.</t>
        <section anchor="track-name">
          <name>Track Naming</name>
          <t>In MOQT, every track is identified by a Full Track Name, consisting of a Track
Namespace and a Track Name.</t>
          <t>Track Namespace is an ordered set of between 0 and 32 Track Namespace Fields,
encoded as described in <xref target="track-namespace-structure"/>.</t>
          <t>The structured nature of Track Namespace allows relays and applications to
manipulate prefixes of a namespace.</t>
          <t>Track Name is a sequence of bytes that identifies an individual track within
the namespace. Each Track Name <bcp14>MUST</bcp14> contain at least one byte. If an
endpoint receives a Track Name with a length of 0, it <bcp14>MUST</bcp14> close the
session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>In this specification, both the Track Namespace Fields and the Track Name
are not constrained to a specific encoding. They carry a sequence of bytes and
comparison between two Track Namespace Fields or Track Names is done by
exact comparison of the bytes. Specifications that use MOQT may constrain the
information in these fields, for example by restricting them to UTF-8. Any such
specification needs to specify the canonicalization into the bytes in the Track
Namespace Fields or Track Name such that exact comparison works.</t>
        </section>
        <section anchor="namespace-prefix-matching">
          <name>Namespace Prefix Matching</name>
          <t>To perform a namespace prefix match, the fields of the prefix are compared
sequentially against the leading fields of the Track Namespace being
matched, requiring an exact match for each field.  The prefix matches if all
fields in the prefix match the leading fields of the Namespace.</t>
          <t>The examples below use the serialized name format from
<xref target="namespace-name-format"/>.</t>
          <t>The Full Track Name <tt>foo-bar--x</tt> has the namespace <tt>foo-bar</tt>, so it matches
the prefixes <tt>foo</tt> and <tt>foo-bar</tt>.  It does not match <tt>foobar</tt>.</t>
          <t>The prefix <tt>example.2ecom-123</tt> matches the namespaces <tt>example.2ecom-123-100</tt>
and <tt>example.2ecom-123-200</tt>.</t>
        </section>
        <section anchor="reserved-namespaces">
          <name>Reserved Namespaces</name>
          <t>MOQT reserves all Track Namespace values whose first tuple field begins with
a period (0x2e, <tt>.</tt>). These namespaces <bcp14>MUST NOT</bcp14> be used unless their meaning
is defined through IANA registration. Unless otherwise specified, an
endpoint that receives a request for an unrecognized reserved namespace <bcp14>MUST</bcp14>
pass it to the Application, so that future extensions can define new reserved
namespaces without breaking older implementations.</t>
          <t>A Track Namespace whose first field is exactly <tt>.</tt> (a single period, 0x2e)
is reserved and <bcp14>MUST NOT</bcp14> be used for any purpose; endpoints <bcp14>MUST NOT</bcp14> publish
tracks or namespaces under it and <bcp14>MUST</bcp14> reject requests referencing it with
DOES_NOT_EXIST.</t>
        </section>
      </section>
      <section anchor="track-scope">
        <name>Scope</name>
        <t>An MOQT scope is a set of servers (as identified by their connection
URIs) for which a Full Track Name is guaranteed to be unique and identify a
specific track. It is up to the application using MOQT to define how broad or
narrow the scope is. An application that deals with connections between devices
on a local network may limit the scope to a single connection; by
contrast, an application that uses multiple CDNs to serve media may
require the scope to include all of those CDNs.</t>
        <t>A single MOQT transport session is tied to the scope that is negotiated in the
beginning of the session. Unless the application has additional information,
two tracks are assumed to belong to the same scope if and only if the
<tt>authority</tt> and <tt>path-abempty</tt> components (<xref target="moqt-uri-scheme"/>) of their
connection URIs are equal. These values are communicated through the SETUP
message in case of raw QUIC, and through HTTP request header fields in case of
WebTransport.</t>
        <t>The <tt>query</tt> component of the connection URI is not part of the scope; two
connection URIs that differ only in their <tt>query</tt> components identify the same
scope.</t>
        <t>Because each Full Track Name is unique within an MOQT scope, they can be used as
a cache key for the track. If, at a given moment in time, two tracks within the
same scope contain different data, they <bcp14>MUST</bcp14> have different names and/or
namespaces. MOQT provides subscribers with the ability to alter the specific
manner in which tracks are delivered via Parameters, but the actual content of
the tracks does not depend on those parameters; this is in contrast to protocols
like HTTP, where request headers can alter the server response.</t>
        <t>A publisher that loses state (e.g. crashes) and intends to resume publishing on
the same Track risks colliding with previously published Objects and violating
the above requirements.  A publisher can handle this in application specific
ways, for example:</t>
        <ol spacing="normal" type="1"><li>
            <t>Select a unique Track Name or Track Namespace whenever it resumes
publishing. For example, it can base one of the Namespace Fields on the
current time, or select a sufficiently large random value.</t>
          </li>
          <li>
            <t>Resume publishing under a previous Track Name and Namespace and set the
initial Group ID to a unique value guaranteed to be larger than all
previously used groups.  This can be done by choosing a Group ID based on the
current time.</t>
          </li>
          <li>
            <t>Use TRACK_STATUS or similar mechanism to query the previous state to
determine the largest published Group ID.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="publishing-and-receiving-tracks">
      <name>Publishing and Receiving Tracks</name>
      <t>A subscription is a stateful ongoing relationship in which the Publisher
delivers newly-published Objects from a single Track to the Subscriber. It can
be established by either endpoint, via either SUBSCRIBE or PUBLISH.  A
subscription is active until either endpoint terminates it, and its parameters
can be updated via REQUEST_UPDATE.</t>
      <t>A fetch is a request for a bounded set of pre-existing Objects from a
single Track.  It is delivered on a single stream, and ends automatically when
all of the objects are delivered.</t>
      <section anchor="subscriptions">
        <name>Subscriptions</name>
        <t>All subscriptions begin in the <tt>Idle</tt> state. A subscription can be
initiated and moved to the <tt>Pending</tt> state by either a publisher or a
subscriber.  A publisher initiates a subscription to a track by
sending the PUBLISH message.  The subscriber either accepts or rejects
the subscription using PUBLISH_OK (<xref target="message-request-ok"/>) or
PUBLISH_ERROR.  A subscriber
initiates a subscription to a track by sending the SUBSCRIBE message.
The publisher either accepts or rejects the subscription using
SUBSCRIBE_OK or SUBSCRIBE_ERROR.  Once either of these sequences is
successful, the subscription moves to the <tt>Established</tt> state and can
be updated by the subscriber using REQUEST_UPDATE.  Either endpoint
can terminate an <tt>Established</tt> subscription, moving it to the
<tt>Terminated</tt> state.  The subscriber terminates a subscription in the
<tt>Pending (Subscriber)</tt> or <tt>Established</tt> states by sending STOP_SENDING.
The publisher terminates a subscription in the
<tt>Pending (Publisher)</tt> or <tt>Established</tt> states by sending PUBLISH_DONE
and closing the stream.</t>
        <t>This diagram shows the subscription state machine:</t>
        <artwork><![CDATA[
                                +--------+
                                |  Idle  |
                                +--------+
                                  |    |
                        SUBSCRIBE |    | PUBLISH
                      (subscriber)|    | (publisher)
                                  V    V
                     +--------------+ +--------------+
                     | Pending      | | Pending      |
                +----| (Subscriber) | | (Publisher)  |----+
                |    +--------------+ +--------------+    |
                |                 |    |                  |
SUBSCRIBE_ERROR |    SUBSCRIBE_OK |    | PUBLISH_OK       | PUBLISH_ERROR
(publisher)     |      (publisher)|    | (subscriber)     | (subscriber)
                |                 V    V                  |
                |            +-------------+              |
                |            | Established | ------+
                |            |             |       | REQUEST_UPDATE
                |            +-------------+ <-----+
                |                 |    |                  |
                +--- STOP_SENDING |    | PUBLISH_DONE ----+
                |     (subscriber)|    | (publisher)      |
                |                 V    V                  |
                |            +-------------+              |
                +----------->| Terminated  | <------------+
                             +-------------+
]]></artwork>
        <t>A publisher <bcp14>MUST</bcp14> send exactly one SUBSCRIBE_OK or SUBSCRIBE_ERROR in response
to a SUBSCRIBE. A subscriber <bcp14>MUST</bcp14> send exactly one PUBLISH_OK
(<xref target="message-request-ok"/>) or PUBLISH_ERROR in response to a PUBLISH. The peer
<bcp14>SHOULD</bcp14> close the session with <tt>UNEXPECTED_MESSAGE</tt> if it receives more than one.</t>
        <t>Either endpoint can initiate a subscription to a track without exchanging any
prior messages other than SETUP.  Relays <bcp14>MUST NOT</bcp14> send any PUBLISH messages
without knowing the client is interested in and authorized to receive the
content. The communication of intent and authorization can be accomplished by
the client sending SUBSCRIBE_NAMESPACE, or conveyed in other mechanisms out of
band.</t>
        <t>An endpoint <bcp14>MAY</bcp14> SUBSCRIBE to a Track it is publishing, though only Relays are
required to handle such a SUBSCRIBE.  Such self-subscriptions are identical to
subscriptions initiated by other endpoints, and all published Objects will be
forwarded back to the endpoint, subject to priority and congestion response
rules.</t>
        <t>An endpoint <bcp14>MAY</bcp14> have multiple concurrent subscriptions to the same Track,
each identified by a unique Request ID. A publisher <bcp14>MAY</bcp14> assign the same or
different Track Aliases to these subscriptions.</t>
        <t>When an Object matches the filters of multiple subscriptions to the same Track,
the publisher <bcp14>MUST</bcp14> send the Object once for each matching subscription, even
when those subscriptions share the same Track Alias. Because subscriptions can
share a Track Alias, the subscriber re-applies each subscription's filter to
determine which subscription a received Object belongs to. Subscribers <bcp14>SHOULD</bcp14>
avoid overlapping filters across subscriptions to the same Track, as they are
responsible for deduplicating any resulting duplicate Objects.</t>
        <t>A publisher <bcp14>SHOULD</bcp14> begin sending incomplete objects when available to avoid
incurring additional latency.</t>
        <t>Publishers <bcp14>MAY</bcp14> start sending Objects on PUBLISH-initiated subscriptions before
receiving a PUBLISH_OK response to reduce latency.  Doing so can consume
unnecessary resources in cases where the Subscriber rejects the subscription
with PUBLISH_ERROR or pauses the subscription (see below). It can also result in
the Subscriber dropping Objects if its buffering limits are exceeded (see
<xref target="datagrams"/> and <xref target="subgroup-header"/>).</t>
        <t>An object published or received in a subgroup or datagram is
<strong>subscription-delivered</strong>.</t>
        <section anchor="pausing-subscriptions">
          <name>Pausing Subscriptions</name>
          <t>An <tt>Established</tt> subscription is either paused or not paused. The publisher does
not send Objects on a paused subscription, and does send them when it is not
paused.  Control messages, such as PUBLISH_DONE (<xref target="message-publish-done"/>), are
sent regardless of whether the subscription is paused.</t>
          <t>The initiator of the subscription sets the initial state by including the
PAUSED parameter (<xref target="paused-parameter"/>) in PUBLISH or SUBSCRIBE. The
subscriber can pause an <tt>Established</tt> subscription by sending REQUEST_UPDATE
with PAUSED set to 1, or resume it by sending REQUEST_UPDATE with PAUSED set
to 0.</t>
        </section>
        <section anchor="subscription-state-management">
          <name>Subscription State Management</name>
          <t>A subscriber keeps subscription state until it cancels the request
(see <xref target="request-cancellation"/>), or until receipt of a PUBLISH_DONE or
REQUEST_ERROR. Note that PUBLISH_DONE does not usually indicate that state
can immediately be removed, see <xref target="message-publish-done"/>.</t>
          <t>The Publisher can remove subscription state as soon as it has received
STOP_SENDING. It <bcp14>MUST</bcp14> reset any open streams associated with the SUBSCRIBE.</t>
          <t>The Publisher can also immediately delete subscription state after sending
PUBLISH_DONE, but <bcp14>MUST NOT</bcp14> send it until it has closed all related streams.</t>
          <t>A REQUEST_ERROR indicates no objects will be delivered, and both endpoints can
immediately remove relevant state. Objects <bcp14>MUST NOT</bcp14> be sent for requests that
end with an error.</t>
        </section>
        <section anchor="track-alias">
          <name>Track Alias</name>
          <t>To optimize wire efficiency, Subgroups and Datagrams refer to a track by a
numeric identifier, rather than the Full Track Name.  Track Alias is chosen by
the publisher and included in SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>) or PUBLISH
(<xref target="message-publish"/>).</t>
          <t>The same Track Alias <bcp14>MUST NOT</bcp14> be used by a publisher to refer to two different
Tracks simultaneously in the same session. If a subscriber receives a
PUBLISH or SUBSCRIBE_OK that uses the same Track Alias as a different Track
with an <tt>Established</tt> subscription, it <bcp14>MUST</bcp14> close the session with error
<tt>DUPLICATE_TRACK_ALIAS</tt>.</t>
          <t>Objects can be sent before the Subscriber knows the Track Alias, requiring
buffering Objects with an unknown Track Alias. If a Track Alias
is used for two concurrent subscriptions to the same Track, an
Object that arrives with the Track Alias could be for either
Subscription. Reusing the same Track Alias for concurrent
subscriptions to the same Track can lead to missed delivery
if objects for the new subscription arrive
before the control message establishing the shared Alias.
The Subscriber can assume the Track Alias is reused until
told otherwise, in order to avoid missing Objects.</t>
          <t>To avoid a protocol violation and to ensure the Subscriber knows which Track
Objects are from, Publishers <bcp14>SHOULD NOT</bcp14> reuse a Track Alias for different Tracks
within a session, unless it is certain the prior Subscription has been
completely closed and no Objects are scheduled to be sent or in flight.</t>
          <t>Objects can arrive after a subscription has been cancelled.  Subscribers <bcp14>SHOULD</bcp14>
retain sufficient state to quickly discard these unwanted Objects, rather than
treating them as belonging to an unknown Track Alias.</t>
          <section anchor="unknown-track-alias">
            <name>Unknown Track Alias</name>
            <t>When an endpoint receives a datagram or a new stream with a Track Alias that
is not yet associated with an <tt>Established</tt> subscription, it <bcp14>MAY</bcp14> drop the
data or buffer it briefly to handle reordering with the control message that
establishes the Track Alias. For streams, the endpoint <bcp14>MAY</bcp14> withhold stream
flow control beyond the stream header until the Track Alias has been
established. To prevent deadlocks, endpoints <bcp14>MUST</bcp14> allocate connection flow
control to control streams before allocating it to any data streams;
otherwise a receiver might wait for a control message containing a Track
Alias to release flow control, while the sender waits for flow control to
send the message.</t>
          </section>
        </section>
        <section anchor="largest-object">
          <name>Largest Object</name>
          <t>The <tt>Largest Object</tt> is the Object with the largest Location
(<xref target="location-structure"/>) in the Track from the perspective of the publisher
processing the message. Largest Object updates when the first byte of an Object
with a Location larger than the previous value is published or received through
a subscription.  <tt>Largest Object</tt> therefore identifies an Object that can still
be arriving.</t>
          <t>The <tt>Next Object</tt> is the Location immediately following <tt>Largest Object</tt>, which
is <tt>{Largest Object.Group, Largest Object.Object + 1}</tt>, or {0, 0} if no content
has been delivered yet. The <tt>Next Group</tt> is the first Location of the Group
following <tt>Largest Object</tt>, which is <tt>{Largest Object.Group + 1, 0}</tt>.
<tt>Next Object</tt> and <tt>Next Group</tt> are Locations that do not necessarily
refer to an Object that exists.</t>
        </section>
      </section>
      <section anchor="fetch">
        <name>Fetch</name>
        <t>A FETCH requests pre-existing Objects from a Track between a Start Location and
an End Location, inclusive.  This range is specified by a Location Filter (see
<xref target="location-filters"/>) when present, or defaults to {0, 0} and <tt>Largest Object</tt>
(<xref target="largest-object"/>) respectively.</t>
        <t>Objects with Locations larger than the <tt>Largest Object</tt> at the time the request
is processed will not be retrieved by a FETCH.  If <tt>Largest Object</tt> is within
the requested range, the FETCH response ends at <tt>Largest Object</tt> and the
publisher <bcp14>MUST</bcp14> include the LARGEST_OBJECT parameter (<xref target="largest-param"/>) in
FETCH_OK.  Otherwise, the response ends at the requested End Location.  Because
<tt>Largest Object</tt> can identify an Object that is still arriving
(<xref target="largest-object"/>), a FETCH whose range includes <tt>Largest Object</tt> includes
that Object in full; the publisher delivers the remainder as it becomes
available.</t>
        <t>The publisher <bcp14>MUST</bcp14> send exactly one FETCH_OK or FETCH_ERROR in response to a
FETCH.  The FETCH_OK or FETCH_ERROR can come at any time relative to object
delivery.  The publisher <bcp14>MAY</bcp14> send Objects in response to a FETCH before the
FETCH_OK message is sent, but the FETCH_OK <bcp14>MUST NOT</bcp14> be sent until the publisher
knows whether <tt>Largest Object</tt> is within the requested range.</t>
        <t>If no Objects have been published for the track or Start Location is greater
than the <tt>Largest Object</tt> (<xref target="largest-object"/>) the publisher <bcp14>MUST</bcp14> return
FETCH_ERROR with error code <tt>INVALID_RANGE</tt>.</t>
        <t>If the Location filter is relative (see <xref target="location-filter"/>), the publisher
<bcp14>MUST</bcp14> return REQUEST_ERROR with error code <tt>INVALID_RANGE</tt>.</t>
        <section anchor="fetch-object-delivery">
          <name>Fetch Object Delivery</name>
          <t>The publisher creates a single unidirectional stream (see <xref target="fetch-streams"/>)
that is used to send the Objects.  If no Objects exist in the requested range,
the publisher opens the unidirectional stream, sends the FETCH_HEADER (see
<xref target="fetch-header"/>) and closes the stream with a FIN.</t>
          <t>A publisher <bcp14>MUST</bcp14> send fetched groups in the requested group order (see
<xref target="group-order"/>). Within each group, objects are sent in Object ID order;
subgroup ID is not used for ordering.  The Object Delivery Mode does not
apply.</t>
        </section>
        <section anchor="gaps-in-a-fetch-stream">
          <name>Gaps in a Fetch Stream</name>
          <t>A gap in a fetch stream occurs when the publisher has no object for the next
ordered Location.  A gap can occur because the object does not exist, the object
was filtered out by the subscriber, or the object state cannot be determined
(e.g. a Relay has temporarily lost contact with the Original Publisher and does
not have the Object in cache).</t>
          <t>Unless the request included Range Filters (see <xref target="range-filters"/>), any gaps in
the Group and Object IDs in the response stream that are not otherwise marked
indicate objects that do not exist (see <xref target="object-states"/>).  When one or more
Range Filters are present, unmarked gaps indicate objects in the Unknown state.</t>
          <t>In this section, End Location refers to the LARGEST_OBJECT in FETCH_OK if
present, and the requested End Location otherwise (see <xref target="fetch"/>).</t>
          <t>For Ascending Group Order, and Descending Group Order where Start and End
Location are in the same group, gaps include ranges between the Start
Location and the first object in the stream; between objects in the stream; and
between the last object in the stream and the End Location.</t>
          <t>For Descending Group Order where Start and End Location are in different groups,
the first expected Object in the stream is <tt>{End Location.Group, 0}</tt> and the
last expected Object in the stream is <tt>{Start Location.Group, 2^64-1}</tt>.  When
two consecutive objects A and B are in different groups, a gap represents
multiple logical gaps: the tail of <tt>A.Group</tt>; all skipped groups; and <tt>{B.Group,
0}</tt> through B, exclusive.</t>
          <t>Gaps at the end of a stream are only detectable when the stream is terminated
by a FIN.</t>
          <t>When the cause of the gap differs from the default, the publisher marks the range
of Objects it will not serialize with an End of Range indicator (see
<xref target="end-of-range"/>), identifying those Objects as non-existent, Unknown, Gone, or
timed out.  A publisher <bcp14>SHOULD NOT</bcp14> use <tt>End of Non-Existent Range</tt> in a FETCH response
except to split a range of Objects that will not be serialized into those that are
known not to exist and those with Unknown, Gone or timed out status.  The
publisher <bcp14>MUST</bcp14> follow an Object known to end the Track with <tt>End of Track</tt>, and
<bcp14>MUST</bcp14> follow the last Object in the response with <tt>End of Group</tt> if it is known
to end its Group (see <xref target="end-of-range"/>).</t>
          <t>If a Publisher receives a FETCH with a range that includes one or more Objects
with Unknown state, it indicates the range of Unknown Objects (<tt>End of Unknown
Range</tt>, see <xref target="end-of-range"/>) and continues serving other known Objects.</t>
        </section>
        <section anchor="relay-fetch-handling">
          <name>Relay Fetch Handling</name>
          <t>A relay that has cached objects from the beginning of the range <bcp14>MAY</bcp14> start
sending objects immediately in response to a FETCH.  When a relay encounters
Objects within the requested range that are not immediately available and have
Unknown status, it issues one or more upstream FETCHes to retrieve them.  It
does not issue upstream FETCHes for Objects it has cached as Gone or as not
existing.</t>
          <t>If an upstream FETCH fails, the relay indicates the range of Unknown Objects,
as described above, unless the Track is malformed (see <xref target="malformed-tracks"/>).
A relay <bcp14>MUST NOT</bcp14> signal Objects as Gone unless it received that signal from
upstream.</t>
          <t>The Fill Timeout (see <xref target="fill-timeout"/>) represents a total budget
for all upstream FETCHes generated by a single request. If the budget is
exhausted, the relay reports any remaining unavailable Objects as Timed-Out gaps
(<tt>End of Timed-Out Range</tt>, see <xref target="end-of-range"/>) and continues delivering
available Objects in the range.</t>
        </section>
        <section anchor="fetch-state-management">
          <name>Fetch State Management</name>
          <t>A subscriber keeps FETCH state until it cancels the request
(see <xref target="request-cancellation"/>), receives FETCH_ERROR, or the FETCH data stream
receives a FIN or is reset. If the data stream is already open,
the subscriber wishing to cancel the FETCH <bcp14>MAY</bcp14> send STOP_SENDING for the
data stream as well as the bidi request stream. It <bcp14>MUST</bcp14> send STOP_SENDING
for the bidi request stream.</t>
          <t>The Publisher can remove fetch state as soon as it has received a
STOP_SENDING. It <bcp14>MUST</bcp14> reset the bidi request stream and unidirectional
data stream associated with the FETCH. It can also remove state after closing
the FETCH data stream.</t>
          <t>It can remove all FETCH state after closing the data stream with a FIN.</t>
          <t>A FETCH_ERROR indicates that both endpoints can immediately remove state.
Since a relay can start delivering FETCH Objects from cache before determining
the result of the request, some Objects could be received even if the FETCH
results in error.</t>
        </section>
      </section>
      <section anchor="filtering-tracks-and-objects">
        <name>Filtering Tracks and Objects</name>
        <section anchor="location-filters">
          <name>Location Filters</name>
          <t>A Location filter specifies an inclusive range of Locations or an inclusive start
Location and an open-ended end location.  Only objects
with Locations within the inclusive range pass the filter.  A Location filter
is encoded as specified in <xref target="location-filter"/>.</t>
          <t>Subscribers can specify a Location filter on a subscription to indicate to the
publisher which Objects to send.  Subscriptions without a filter pass all
Objects published or received via upstream subscriptions.</t>
          <t>Fetch requests can also specify a Location filter (see <xref target="fetch"/>).</t>
          <t>Some Location filters are defined to be relative to the <tt>Largest Object</tt>
(<xref target="largest-object"/>).</t>
          <t>A Location Filter on a subscription is always valid, even if it specifies a
range entirely before Largest Object.</t>
          <t>Note that due to network reordering or prioritization, relays can receive
Objects with Locations smaller than <tt>Largest Object</tt> after the filter is
processed, but these Objects do not pass a filter that starts at the Next
Object.</t>
          <t>A publisher <bcp14>MUST NOT</bcp14> send objects from outside the requested range.  Because
updating filters is asynchronous, subscribers can receive objects outside the
current filter.</t>
          <t>A publisher does not end a subscription solely because the Largest Object
advances past the end of the current Location Filter.</t>
        </section>
        <section anchor="range-filters">
          <name>Range Filters</name>
          <t>Range Filters are parameters in SUBSCRIBE, FETCH, or SUBSCRIBE_TRACKS that
tell a publisher to filter tracks (via TRACK PROPERTY FILTER) and objects
according to subscriber-provided criteria.  Range filters are specified as
ranges of integer values in Track and Object Properties and other
Object header fields (Subgroup ID, Object ID, and Publisher Priority).
There are five Range Filter parameter types, 0x25-0x29.  They share the
encoding specified in <xref target="range-filter-structure"/>.</t>
          <t>An object matches the filter if its value falls within any Range (i.e., Ranges
are OR'd within a filter parameter).</t>
          <t>Each Range Filter parameter carries a SetID, which identifies the set of
filters it belongs to.  Filter parameters with the same SetID are AND'd;
distinct SetIDs are OR'd.  The final result is SetID=0 OR SetID=1 OR
... SetID=255, where each SetID=i is the AND of all filter parameters
carrying that SetID.</t>
          <t>The Track Property filter parameter <bcp14>MAY</bcp14> appear multiple times in a
SUBSCRIBE_TRACKS message or REQUEST_UPDATE for it.
All other filter parameters <bcp14>MAY</bcp14> appear multiple times in a FETCH, SUBSCRIBE,
SUBSCRIBE_TRACKS, or REQUEST_UPDATE (on a subscription, from the subscriber only)
message.  If the same combination of Parameter Type, SetID, and Property Type
(only in the Track and Object Property Filters) repeat in any message,
an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR with error code INVALID_FILTER.</t>
          <t>In REQUEST_UPDATE, Length of 0 removes the filter; non-zero replaces it
entirely.  If a filter parameter is omitted from REQUEST_UPDATE, it is
unchanged.  If omitted from other messages, the default is no filter.</t>
          <t>Range Filters are only allowed if the setup option MAX_FILTER_RANGES
is non-zero, which limits the total number of Ranges allowed
in all Range Filter parameters for a given subscription or fetch.
If this limit is exceeded, an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR
with error code INVALID_FILTER.</t>
          <t>The Track Property Filter can be used in SUBSCRIBE_TRACKS to filter PUBLISH
messages with required Track Property types and values.  PUBLISH messages
which pass the filter will be forwarded while those which do not pass it
will not be forwarded nor will any Objects.</t>
          <t>The Object Property Filter can be used to filter Objects with required
Object Property types and values.  It only filters Object Properties,
and does not evaluate Track Properties in PUBLISH messages.</t>
        </section>
        <section anchor="combining-filters">
          <name>Combining Filters</name>
          <t>All filter types are combined using logical "AND" operations
to further restrict which tracks and objects pass all filter criteria.
This includes all Range Filters <xref target="range-filters"/> and Location
Filters <xref target="location-filters"/>, which can be evaluated in any order.
The Paused parameter is also a type of filter.  The publisher <bcp14>MUST</bcp14>
forward only objects that pass all filters.</t>
          <artwork><![CDATA[
Pass = (NOT Paused) AND Location Filters AND Range Filters
]]></artwork>
        </section>
      </section>
      <section anchor="fill-semantics">
        <name>Fill Semantics</name>
        <t>A subscription that carries a FILL_PARAMETERS parameter (see
<xref target="fill-parameters"/>) causes the publisher to open a unidirectional stream
beginning with a FETCH_HEADER (see <xref target="fetch-header"/>) and delivered as a FETCH
response (see <xref target="message-fetch"/>).  This is called a fill fetch stream.</t>
        <t>The <strong>fill range</strong> is the range of Locations selected by the Location filter
inside FILL_PARAMETERS, or the subscription's Location filter if it is
omitted. The filter is evaluated using the rules for a Fetch in
<xref target="location-filter"/>, so the fill range never extends beyond <tt>Largest
Object</tt>. When the subscription has no Location filter, or the LOCATION_FILTER
inside FILL_PARAMETERS has Location Filter Type 0x00 (None), the fill range is
the entire track up to <tt>Largest Object</tt>.  The subscriber learns the <tt>Largest
Object</tt> from the <tt>LARGEST_OBJECT</tt> parameter in SUBSCRIBE_OK, PUBLISH or
REQUEST_UPDATE_OK.</t>
        <t>Because the fill range is specified independently of the subscription's
Location filter, a subscriber can retrieve a range of Groups prior to
<tt>Largest Object</tt> while the subscription itself starts at the Next Group.  If
the fill range is empty, or starts after Largest Object, the publisher does not
open a fill fetch stream.</t>
        <t>The fill fetch stream inherits the subscription's parameters, including
subscriber priority, range filters and authorization; parameters carried inside
FILL_PARAMETERS override them for the fill fetch stream.  FILL_TIMEOUT (see
<xref target="fill-timeout"/>) applies to fill fetch streams in the same way it applies to a
FETCH.</t>
        <t>The FETCH_HEADER on the fill fetch stream carries the subscription's Request
ID for an initial fill, or the REQUEST_UPDATE Request ID for a subsequent
fill.  As a result of REQUEST_UPDATE, a subscription can have
multiple fill fetch streams open at once, each identified by its Request ID;
opening a new fill fetch stream does not implicitly cancel any previously
opened fill fetch streams.</t>
        <t>An object delivered on the fill fetch stream is <strong>fill-delivered</strong>.  When the
fill range overlaps the subscription's Location filter, an object can be both
fill-delivered and subscription-delivered.  A subscriber that wants each Object
delivered exactly once uses the Next Object Subscription Location Filter coupled
with an open-ended fill range, which the publisher will end at Largest Object.</t>
        <section anchor="opening-and-closing-fill-fetch-streams">
          <name>Opening and Closing Fill Fetch Streams</name>
          <t>A publisher opens a fill fetch stream when it processes a SUBSCRIBE or
REQUEST_UPDATE, or sends a PUBLISH, that carries FILL_PARAMETERS while the
subscription is not paused (see <xref target="pausing-subscriptions"/>).</t>
          <ul spacing="normal">
            <li>
              <t>FILL_PARAMETERS carried while the subscription is paused opens no fill fetch
stream.  Resuming the subscription without re-sending FILL_PARAMETERS does
not open one either.</t>
            </li>
            <li>
              <t>A REQUEST_UPDATE that does not carry FILL_PARAMETERS does not open a new fill
fetch stream.</t>
            </li>
            <li>
              <t>When the subscription is cancelled, the publisher <bcp14>MUST</bcp14> reset any open fill fetch streams.</t>
            </li>
          </ul>
          <t>The publisher signals that the fill is complete by closing the stream with a
FIN once all objects in the fill range have been delivered.  Because there is
no REQUEST_ERROR associated with a fill fetch stream, the publisher signals a
fill failure by resetting the stream; it <bcp14>MUST</bcp14> open a fill fetch stream and reset
it immediately after the FETCH_HEADER if necessary.  A subscriber can cancel a
fill fetch stream independently using STOP_SENDING.  Resetting or
cancelling a fill fetch stream, by either endpoint, does not affect the
subscription, which continues to deliver objects using subscribe subgroups and
datagrams.</t>
        </section>
      </section>
      <section anchor="joining-tracks">
        <name>Joining an Ongoing Track</name>
        <t>The MOQT Object model is designed with the concept that the beginning of a Group
is a join point, so in order for a subscriber to join a Track, it needs to
request an existing Group or wait for a future Group.  Different applications
will have different approaches for when to begin a new Group.</t>
        <t>To join a Track immediately, the subscriber sends a SUBSCRIBE with a Location
Filter <xref target="location-filters"/> that starts at the Next Object.  Delivery begins
with the next Object and can begin mid-group.</t>
        <t>To join a Track at the current Group, the subscriber sends a SUBSCRIBE with a
Location Filter that starts at the Next Object and a FILL_PARAMETERS parameter
(see <xref target="fill-parameters"/>) whose Location filter has StartGroup=1, which fills
the current Group from its start.</t>
        <t>To join a Track at a past Group, the subscriber sends a SUBSCRIBE with a
FILL_PARAMETERS parameter whose Location filter selects the intended Groups,
which can be relative.  The publisher delivers the fill range on a fill fetch
stream and subscription-delivered Objects in subgroups or
datagrams (see <xref target="fill-semantics"/>).</t>
        <t>To join a Track at the next Group, the subscriber sends a SUBSCRIBE with
a Location Filter <xref target="location-filters"/> that starts at the Next Group.</t>
        <section anchor="dynamically-starting-new-groups">
          <name>Dynamically Starting New Groups</name>
          <t>While some publishers will deterministically create new Groups, other
applications might want to only begin a new Group when needed.  A subscriber
joining a Track might detect that it is more efficient to request the Original
Publisher create a new group than to fill the current group.  Publishers
indicate a Track supports dynamic group creation using the DYNAMIC_GROUPS
Track Property (<xref target="dynamic-groups"/>).</t>
          <t>One possible subscriber pattern is to SUBSCRIBE to a Track using a Location Filter
that starts at the Next Object and observe the <tt>Largest Object</tt> in the response.  If the
Object ID is below the application's threshold, the subscriber sends a FETCH for
the beginning of the Group.  If the Object ID is above the threshold and the
Track supports dynamic groups, the subscriber sends a REQUEST_UPDATE message with the
NEW_GROUP_REQUEST parameter equal to the Next Group (see <xref target="new-group-request"/>).</t>
          <t>Another possible subscriber pattern is to send a SUBSCRIBE with a Location Filter
that starts at the Next Group and NEW_GROUP_REQUEST equal to 0.  The value of
DYNAMIC_GROUPS in SUBSCRIBE_OK will indicate if the publisher supports dynamic
groups. A publisher that does will begin the next group as soon as practical.</t>
        </section>
      </section>
      <section anchor="subscribe-tracks">
        <name>Subscribing to Tracks by Prefix</name>
        <t>SUBSCRIBE_TRACKS requests subscriptions: the publisher sends PUBLISH
messages for tracks within matching namespaces, excluding tracks published
by the subscriber.</t>
        <t>A SUBSCRIBE_TRACKS with zero Track Namespace fields indicates the subscriber
is requesting a Subscription for all Tracks from the publisher.</t>
        <t>SUBSCRIBE_TRACKS is not required for a publisher to send PUBLISH messages to
a subscriber.  It is useful, for example, when the subscriber does not know
the exact names of the tracks it wants, or when those tracks will be
published.</t>
        <t>The publisher will respond with SUBSCRIBE_TRACKS_OK or SUBSCRIBE_TRACKS_ERROR
on the response half of the stream. If the subscriber receives any message
other than a SUBSCRIBE_TRACKS_OK or a SUBSCRIBE_TRACKS_ERROR as the first
message on the response half of the stream, then it <bcp14>MUST</bcp14> close the session with
<tt>UNEXPECTED_MESSAGE</tt>. If the SUBSCRIBE_TRACKS is successful, the publisher will
send PUBLISH messages on new bidirectional streams for tracks matching the
Namespace Prefix. If it is an error, the stream will be closed via FIN after
SUBSCRIBE_TRACKS_ERROR is sent.</t>
        <t>Each PUBLISH sent as a result of a SUBSCRIBE_TRACKS carries the
SUBSCRIBE_TRACKS_ID parameter (<xref target="subscribe-tracks-id"/>).  If a Track matches
more than one SUBSCRIBE_TRACKS, the publisher sends a PUBLISH for each.</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</t>
        <t>A SUBSCRIBE_TRACKS is cancelled as described in
<xref target="request-cancellation"/>.  Cancelling a SUBSCRIBE_TRACKS has no effect on
existing subscriptions.
Cancelling SUBSCRIBE_TRACKS does not prohibit original publishers
from sending further PUBLISH messages, but relays <bcp14>MUST NOT</bcp14>
send any further PUBLISH messages to a client without knowing the client is
interested in and authorized to receive the content.</t>
        <section anchor="filtering-subscribetracks">
          <name>Filtering SUBSCRIBE_TRACKS</name>
          <t>Range Filters <xref target="range-filters"/> can be used in SUBSCRIBE_TRACKS to filter
Tracks in a namespace using the Track Property Filter. Objects published in
the resulting Subscriptions can be filtered by any Range Filter.</t>
        </section>
        <section anchor="parameters-on-subscribe-tracks">
          <name>Parameters on SUBSCRIBE_TRACKS</name>
          <t>The parameters that can appear in SUBSCRIBE_TRACKS are listed in
<xref target="message-subscribe-tracks"/>.  AUTHORIZATION_TOKEN and TRACK_PROPERTY_FILTER
apply to the SUBSCRIBE_TRACKS itself.  The publisher uses the others as the
initial Subscription parameters when a PUBLISH is sent as a result of
SUBSCRIBE_TRACKS, and includes those in the PUBLISH.
When a Parameter is omitted from the SUBSCRIBE_TRACKS and resulting
PUBLISH, the Subscription uses the default value.  Parameters that only apply
to a SUBSCRIBE for a single Track, such as RENDEZVOUS_TIMEOUT and
NEW_GROUP_REQUEST, cannot appear in SUBSCRIBE_TRACKS.</t>
          <t>To join Tracks initiated via the resulting PUBLISHes, the subscriber can
specify a Location Filter and optionally include FILL_PARAMETERS in the
SUBSCRIBE_TRACKS, or in a REQUEST_UPDATE following PUBLISH_OK, as described
in <xref target="joining-tracks"/>.</t>
        </section>
        <section anchor="skipped-tracks">
          <name>Skipped Tracks</name>
          <t>If a Subscription cannot be created because there are no available bidirectional
streams or any other reason, the Publisher sends a PUBLISH_SKIPPED message on the
SUBSCRIBE_TRACKS response stream to indicate the Full Track Name of the
Subscription that was not created. The Publisher <bcp14>MUST NOT</bcp14> send a PUBLISH for a
Track for a given SUBSCRIBE_TRACKS after PUBLISH_SKIPPED has been sent,
scoped to a single PUBLISH.  If, for example, the publisher disconnects from
a relay and later reconnects and sends a new PUBLISH, the relay <bcp14>MAY</bcp14> send the new
PUBLISH downstream.
If desired, the subscriber can issue a SUBSCRIBE to establish a subscription to
that track.</t>
        </section>
      </section>
      <section anchor="mandatory-track-properties">
        <name>Mandatory to Understand Track Properties</name>
        <t>Property types in the range 0x4000-0x7FFF are designated as Mandatory Track
Properties. These properties <bcp14>MUST</bcp14> have Track scope. Mandatory Track Properties
have special handling rules that prevent tracks with required properties from
being forwarded to or processed by endpoints that do not understand them.
Grease values (<xref target="grease"/>) in this range are not Mandatory Track Properties.</t>
        <t>An Object received with a Mandatory Track Property as an Object Property is
malformed (see <xref target="malformed-tracks"/>).</t>
        <t>When an endpoint receives a Mandatory Track Property in PUBLISH,
SUBSCRIBE_OK, FETCH_OK, or TRACK_STATUS_OK that it does not
understand, it <bcp14>MUST NOT</bcp14> process or forward that track:</t>
        <ul spacing="normal">
          <li>
            <t>For PUBLISH messages: the subscriber <bcp14>MUST</bcp14> respond with PUBLISH_ERROR with
error code UNSUPPORTED_EXTENSION.</t>
          </li>
          <li>
            <t>For SUBSCRIBE_OK messages: the subscriber <bcp14>MUST</bcp14> cancel the subscription
(see <xref target="request-cancellation"/>).  If the subscriber is a relay with pending
downstream subscribers, it <bcp14>MUST</bcp14> send SUBSCRIBE_ERROR with error code
UNSUPPORTED_EXTENSION to the downstream subscribers.</t>
          </li>
          <li>
            <t>For FETCH_OK messages: the subscriber <bcp14>MUST</bcp14> cancel the fetch
(see <xref target="request-cancellation"/>).  If the subscriber is a relay and has not yet
sent a FETCH_OK or FETCH_ERROR downstream, it <bcp14>MUST</bcp14> send FETCH_ERROR with
error code UNSUPPORTED_EXTENSION to the downstream fetch requester.  If the
relay has already forwarded data on a fetch stream, it <bcp14>MUST</bcp14> reset the stream.</t>
          </li>
          <li>
            <t>For TRACK_STATUS_OK messages: if the subscriber is a relay with pending
downstream TRACK_STATUS requests, it <bcp14>MUST</bcp14> send TRACK_STATUS_ERROR with error
code UNSUPPORTED_EXTENSION to the downstream requesters.</t>
          </li>
        </ul>
        <t>A publisher that knows a subscriber does not support a Mandatory Track Property
<bcp14>SHOULD</bcp14> take the following action:</t>
        <ul spacing="normal">
          <li>
            <t>For SUBSCRIBE: respond with SUBSCRIBE_ERROR with error code
UNSUPPORTED_EXTENSION.</t>
          </li>
          <li>
            <t>For FETCH: respond with FETCH_ERROR with error code UNSUPPORTED_EXTENSION.</t>
          </li>
          <li>
            <t>For TRACK_STATUS: respond with TRACK_STATUS_ERROR with error code
UNSUPPORTED_EXTENSION.</t>
          </li>
          <li>
            <t>For PUBLISH: do not publish the track to that subscriber.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="track-discovery">
      <name>Publisher and Namespace Discovery</name>
      <t>Given out-of-band information, a subscriber can
retrieve tracks from a publisher (including a relay) without any previous MOQT
messages besides SETUP.  However, MOQT provides in-band messages for a publisher
to advertise the namespaces it has tracks in, and for a subscriber to discover
the namespaces a publisher knows.</t>
      <t>Discovery of MOQT servers is always done out-of-band: MOQT does not specify how
an endpoint learns where to establish a session. The discovery described in this
section takes place within an established session.</t>
      <section anchor="publishing-namespaces">
        <name>Publishing Namespaces</name>
        <t>A publisher <bcp14>MAY</bcp14> send PUBLISH_NAMESPACE messages to any subscriber. A
PUBLISH_NAMESPACE indicates to the subscriber that the publisher has tracks
available in namespaces matching the Track Namespace Prefix it carries (see
<xref target="namespace-prefix-matching"/>). A subscriber <bcp14>MAY</bcp14> send SUBSCRIBE, FETCH or
TRACK_STATUS for tracks in a namespace without having received a
PUBLISH_NAMESPACE for it. A Relay has additional requirements on which
publishers receive these requests; see <xref target="publisher-interactions"/>.</t>
        <t>The receiver verifies the publisher is authorized to publish tracks under this
prefix.</t>
        <t>A publisher can send more than one PUBLISH_NAMESPACE for the same Track
Namespace Prefix in a session.  The namespace remains published until all of
them are withdrawn.</t>
        <t>A subscriber <bcp14>MUST</bcp14> send exactly one PUBLISH_NAMESPACE_OK or
PUBLISH_NAMESPACE_ERROR as the first message on the bidi stream in response to
a PUBLISH_NAMESPACE. The publisher <bcp14>SHOULD</bcp14> close the session with
<tt>UNEXPECTED_MESSAGE</tt> if it receives more than one.</t>
        <t>An endpoint <bcp14>SHOULD</bcp14> report the reception of a PUBLISH_NAMESPACE_OK or
PUBLISH_NAMESPACE_ERROR to the application to inform the search for additional
subscribers for a namespace, or to abandon the attempt to publish under this
namespace.</t>
        <t>If a subscriber
has accepted a PUBLISH_NAMESPACE with a namespace that exactly matches the
namespace for a given track, it <bcp14>SHOULD</bcp14> only request the Track from the sender(s) of those
PUBLISH_NAMESPACE messages.</t>
        <t>A PUBLISH_NAMESPACE is withdrawn by cancelling the request
(see <xref target="request-cancellation"/>), although it is not a protocol error for
the subscriber to send a SUBSCRIBE, FETCH or TRACK_STATUS message for a track
in a namespace after the namespace is withdrawn.</t>
        <t>A subscriber can cancel the request (see <xref target="request-cancellation"/>) to revoke
acceptance of a PUBLISH_NAMESPACE. If the reason for cancellation is expiration
of authorization credentials, the publisher can send PUBLISH_NAMESPACE again
on a new bidi stream with refreshed authorization.</t>
        <t>While PUBLISH_NAMESPACE indicates to relays how to connect publishers and
subscribers, it is not a full-fledged routing protocol and does not protect
against loops. In particular, PUBLISH_NAMESPACE <bcp14>SHOULD NOT</bcp14>
be used to find paths through richly connected networks of relays.</t>
      </section>
      <section anchor="subscribing-to-namespaces">
        <name>Subscribing to Namespaces</name>
        <t>If the subscriber is aware of a namespace of interest, it can send
SUBSCRIBE_NAMESPACE to publishers/relays it has established
a session with. The Track Namespace Prefix it carries is
compared against the namespaces known to the receiver using Namespace Prefix
Matching (<xref target="namespace-prefix-matching"/>).</t>
        <t>SUBSCRIBE_NAMESPACE requests namespace discovery: the publisher responds with
NAMESPACE and NAMESPACE_DONE messages.</t>
        <t>A SUBSCRIBE_NAMESPACE with zero Track Namespace fields indicates the sender is
interested in all namespaces from the receiver.</t>
        <t>The subscriber sends SUBSCRIBE_NAMESPACE on a new bidirectional stream. The
publisher <bcp14>MUST</bcp14> send a single SUBSCRIBE_NAMESPACE_OK or
SUBSCRIBE_NAMESPACE_ERROR as the first message on the response half of the
stream; if the subscriber receives any other message first, it <bcp14>MUST</bcp14> close the
session with <tt>UNEXPECTED_MESSAGE</tt>.</t>
        <t>On success, the publisher <bcp14>MUST</bcp14> send a NAMESPACE message for each namespace it
knows that matches the Track Namespace Prefix, and further NAMESPACE or
NAMESPACE_DONE messages as that set changes.  A publisher knows a namespace if
it is an Original Publisher for one or more tracks in that Namespace Prefix,
or is a relay that has received an authorized PUBLISH_NAMESPACE for the
Namespace.
On error, the stream is immediately closed via FIN.</t>
        <t>The namespace in a NAMESPACE message is itself a prefix; tracks can exist in
namespaces matching it.  A NAMESPACE_DONE indicates the publisher intends to
stop serving new subscriptions for tracks within that namespace.</t>
        <t>The publisher <bcp14>MUST NOT</bcp14> send NAMESPACE_DONE for a namespace suffix before the
corresponding NAMESPACE. If a subscriber receives a NAMESPACE_DONE before the
corresponding NAMESPACE, it <bcp14>MUST</bcp14> close the session with <tt>UNEXPECTED_MESSAGE</tt>.</t>
        <t>A subscriber can receive a PUBLISH_NAMESPACE on a request stream for a
namespace that falls within an active SUBSCRIBE_NAMESPACE prefix. This
occurs when SUBSCRIBE_NAMESPACE or its response is in flight at the same time
as a PUBLISH_NAMESPACE, or when an original publisher sends PUBLISH_NAMESPACE
to advertise namespaces within the prefix being discovered. Such a
PUBLISH_NAMESPACE is valid and <bcp14>MAY</bcp14> carry an AUTHORIZATION TOKEN parameter.
Its lifetime is independent of the SUBSCRIBE_NAMESPACE stream.</t>
        <t>A SUBSCRIBE_NAMESPACE is cancelled as described in
<xref target="request-cancellation"/>, by resetting or sending STOP_SENDING on the stream.</t>
        <section anchor="namespace-subscription-authorization">
          <name>Namespace Subscription Authorization</name>
          <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform a
namespace subscription.</t>
          <t>By sending SUBSCRIBE_NAMESPACE, the subscriber indicates that it trusts the
relay to be authoritative for namespaces matching the requested prefix.
NAMESPACE messages received on the SUBSCRIBE_NAMESPACE response stream inherit
this trust and do not independently carry authorization.</t>
        </section>
        <section anchor="namespace-subscription-state-management">
          <name>Namespace Subscription State Management</name>
          <t>If the publisher is unable to send NAMESPACE or NAMESPACE_DONE messages in a
timely manner because the SUBSCRIBE_NAMESPACE response stream is blocked by flow
control, the publisher <bcp14>MAY</bcp14> reset the SUBSCRIBE_NAMESPACE response stream.  When
a subscriber receives a stream reset or FIN on a SUBSCRIBE_NAMESPACE response
stream, it <bcp14>SHOULD</bcp14> treat this as though each active namespace received a
NAMESPACE_DONE. Subscriptions established via PUBLISH on separate bidi streams
are not affected by closure of the SUBSCRIBE_NAMESPACE stream.</t>
        </section>
      </section>
      <section anchor="namespace-discovery-example">
        <name>Namespace Discovery Example</name>
        <t>In the following example, a publisher advertises a namespace to a relay before
a subscriber asks that relay for namespaces under a prefix, so the relay
reports it immediately.  The publisher then advertises a second matching
namespace, which the relay passes on as it arrives.  When the publisher
withdraws that advertisement, the relay tells the subscriber the namespace is
gone.</t>
        <figure anchor="namespace-discovery-flow">
          <name>Namespace discovery through a relay</name>
          <artwork><![CDATA[
 Publisher                    Relay                   Subscriber
     |                          |                          |
     |    PUBLISH_NAMESPACE     |                          |
     |       (example-42)       |                          |
     |------------------------->|                          |
     |   PUBLISH_NAMESPACE_OK   |                          |
     |<-------------------------|   SUBSCRIBE_NAMESPACE    |
     |                          |        (example)         |
     |                          |<-------------------------|
     |                          |  SUBSCRIBE_NAMESPACE_OK  |
     |                          |------------------------->|
     |                          |        NAMESPACE         |
     |                          |           (42)           |
     |                          |------------------------->|
     |    PUBLISH_NAMESPACE     |                          |
     |      (example-123)       |                          |
     |------------------------->|                          |
     |   PUBLISH_NAMESPACE_OK   |        NAMESPACE         |
     |<-------------------------|          (123)           |
     |                          |------------------------->|
     | cancel PUBLISH_NAMESPACE |                          |
     |------------------------->|                          |
     |                          |      NAMESPACE_DONE      |
     |                          |          (123)           |
     |                          |------------------------->|
     |                          |                          |
]]></artwork>
        </figure>
        <t>The NAMESPACE and NAMESPACE_DONE messages carry only the suffixes <tt>42</tt> and
<tt>123</tt>, because the prefix <tt>example</tt> is already known from the
SUBSCRIBE_NAMESPACE.</t>
      </section>
    </section>
    <section anchor="object-transmission">
      <name>Object Transmission</name>
      <section anchor="priorities">
        <name>Priorities</name>
        <t>MOQT priorities allow a subscriber and original publisher to influence
the transmission order of Objects within a session in the presence of
congestion.</t>
        <section anchor="definitions">
          <name>Definitions</name>
          <t>MOQT maintains priorities between different schedulable objects.
A schedulable object in MOQT is either:</t>
          <ol spacing="normal" type="1"><li>
              <t>The first or next Object in a Subgroup that is in response to a subscription.</t>
            </li>
            <li>
              <t>An Object with Delivery Mode Datagram.</t>
            </li>
            <li>
              <t>An Object in response to a FETCH where that Object is the next
Object in the response.</t>
            </li>
          </ol>
          <t>An Object is not schedulable if it is known that no part of it can be written
due to underlying transport flow control limits.</t>
          <t>A single subgroup or datagram has a single publisher priority. Within a
subscription, it can be useful to conceptualize this process as
scheduling subgroups or datagrams instead of individual objects on them.
FETCH responses however can contain objects with different publisher
priorities.</t>
          <t>A <tt>priority number</tt>is an unsigned integer with a value between 0 and 255.
A lower priority number indicates higher priority; the highest priority is 0.</t>
          <t><tt>Subscriber Priority</tt> is a priority number associated with an individual
request.  It is carried in the SUBSCRIBER_PRIORITY parameter
(<xref target="subscriber-priority"/>), and can be updated.  The subscriber priority of an
individual schedulable object is the subscriber priority of the request that
caused that object to be sent. When subscriber priority is changed, a best
effort <bcp14>SHOULD</bcp14> be
made to apply the change to all objects that have not been scheduled, but it is
implementation dependent what happens to objects that have already been
scheduled.</t>
          <t><tt>Publisher Priority</tt> is a priority number associated with an individual
schedulable object.  A default for the subscription is specified in the
DEFAULT_PUBLISHER_PRIORITY Track Property (<xref target="publisher-priority"/>). Publisher
priority can also be set per subgroup or datagram in the subgroup header or
datagram (see <xref target="data-streams"/>), which overrides the default.</t>
          <t><tt>Group Order</tt> is a property of an individual subscription.  It can be either
'Ascending' (groups with lower group ID are sent first), or 'Descending'
(groups with higher group ID are sent first).  The subscriber optionally
communicates its group order preference in the SUBSCRIBE or SUBSCRIBE_TRACKS
message; the publisher's preference, carried in the
DEFAULT_PUBLISHER_GROUP_ORDER Track Property (<xref target="group-order-pref"/>), is used if
the subscriber did not express one (by omitting the Group Order parameter). The
group order of an existing subscription cannot be changed.</t>
        </section>
        <section anchor="scheduling-algorithm">
          <name>Scheduling Algorithm</name>
          <t>When an MOQT publisher has multiple schedulable objects it can choose between,
the objects <bcp14>SHOULD</bcp14> be selected as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If two objects have different subscriber priorities associated with them,
the one with <strong>the highest subscriber priority</strong> is scheduled to be sent first.</t>
            </li>
            <li>
              <t>If two objects have the same subscriber priority, but different publisher
priorities, the one with <strong>the highest publisher priority</strong> is scheduled to be
sent first.</t>
            </li>
            <li>
              <t>If two objects in the same subscription have the same subscriber and
publisher priority, but belong to two different groups of the same track,
<strong>the group order</strong> of the subscription is used to decide the one that is
scheduled to be sent first. When a subscription fill's Group Order differs
from the subscription's Group Order, the subscription-delivered object is scheduled
first.</t>
            </li>
            <li>
              <t>If two objects in the same subscription have the same subscriber
and publisher priority and belong to the same group of the same track, and
one is delivered by the fill fetch stream while the other is
subscription-delivered, the fill-delivered object is scheduled first. Otherwise,
the one with <strong>the lowest Subgroup ID</strong> (for objects with Delivery Mode
Subgroup), or <strong>the lowest Object ID</strong> (for objects with Delivery Mode
Datagram) is scheduled to be sent first.  If the two objects have
different Delivery Modes the datagram is sent first.</t>
            </li>
          </ol>
          <t>Within the same group, fill-delivered objects win the tie-break over
subscription-delivered objects (rule 4) because objects with smaller Locations
are assumed to be needed before those with larger Locations.</t>
          <t>The definition of "scheduled to be sent first" in the algorithm is implementation
dependent and is constrained by the prioritization interface of the underlying
transport. For some implementations, it could mean that the object is serialized
and passed to the underlying transport first.  Other implementations can
control the order packets are initially transmitted.</t>
          <t>This algorithm does not provide a well-defined ordering for objects that belong
to different subscriptions or FETCH responses, but have the same subscriber and
publisher priority.  The ordering in those cases is implementation-defined,
though the expectation is that all subscriptions will be able to send some data.</t>
          <t>A publisher might not utilize the entire available congestion window,
session flow control, or all available streams for lower
priority Objects if it expects higher priority Objects will be available to send
in the near future or it wants to reserve some bandwidth for control messages.</t>
          <t>Given the critical nature of control messages and their relatively
small size, the control streams <bcp14>SHOULD</bcp14> be prioritized highest, followed by the
bidi request streams and then all Objects. Bidi request streams <bcp14>MAY</bcp14> be
prioritized within themselves by Subscriber Priority if specified.</t>
        </section>
        <section anchor="considerations-for-setting-priorities">
          <name>Considerations for Setting Priorities</name>
          <t>For downstream subscriptions, relays <bcp14>SHOULD</bcp14> respect the subscriber and original
publisher's priorities.  Relays can receive subscriptions with conflicting
subscriber priorities or Group Order preferences.  Relays <bcp14>SHOULD NOT</bcp14> directly
use Subscriber Priority or Group Order from incoming subscriptions for upstream
subscriptions. A Relay's use of these fields for upstream subscriptions can be
based on factors specific to it, such as the popularity of the content or
policy, or relays can specify the same value for all upstream subscriptions.</t>
          <t>MOQT Sessions can span multiple namespaces, and priorities might not
be coordinated across namespaces.  The subscriber's priority is
considered first, so there is a mechanism for a subscriber to fix
incompatibilities between different namespaces prioritization schemes.
Additionally, it is anticipated that when multiple namespaces
are present within a session, the namespaces could be coordinating,
possibly part of the same application.  In cases when pooling among
namespaces is expected to cause issues, multiple MOQT sessions, either
within a single connection or on multiple connections can be used.</t>
          <t>Implementations that have a default priority <bcp14>SHOULD</bcp14> set it to a value in
the middle of the range (eg: 128) to allow non-default priorities to be
set either higher or lower.</t>
        </section>
      </section>
      <section anchor="delivery-timeouts">
        <name>Delivery Timeouts and Data Reliability</name>
        <t>Each MOQT subscription has two timeout values associated with it: a
SUBGROUP_DELIVERY_TIMEOUT and an OBJECT_DELIVERY_TIMEOUT.  Both of those values
are expressed in milliseconds and both are optional; a value of 0 means that
there is no timeout set.</t>
        <t>The publisher communicates both timeout values as a Track Property; the
subscriber communicates them as Message Parameters.  Either timeout value can
also be set as an Object Property on the first object in a subgroup, overriding
the Track-level value for that subgroup.  If either timeout is set as an Object
Property on any object other than the first in a subgroup, it is ignored.  For
each type of timeout, the
publisher's value is the Object Property when present on the first object of the
subgroup, and the Track Property otherwise.  If both the publisher's value and
the subscriber's value are non-zero, the smaller of the two is used.</t>
        <t>If the OBJECT_DELIVERY_TIMEOUT is not zero, the MOQT implementation <bcp14>MUST</bcp14> retain
the time at which the last header byte of every object has been either
received from the upstream subscription, or provided by the original publisher
application.  The actual mechanism by which the timeout works depends on the
Object Delivery Mode:</t>
        <ul spacing="normal">
          <li>
            <t>For subgroups, the implementation <bcp14>MUST</bcp14> check the time elapsed
before attempting to pass it to the underlying transport
for transmission; if the time elapsed exceeds OBJECT_DELIVERY_TIMEOUT, it
<bcp14>MUST</bcp14> reset the underlying transport stream with the reset stream code
DELIVERY_TIMEOUT (see <xref target="closing-subgroup-streams"/>) and <bcp14>SHOULD NOT</bcp14> attempt to
open a new stream to deliver additional Objects in that Subgroup.  The
implementation <bcp14>SHOULD</bcp14> check object delivery timeouts before retransmitting
object data if the underlying transport implementation allows.  The
implementations <bcp14>SHOULD</bcp14> minimize the amount of data buffered at the underlying
transport layer, as any data buffered at this layer can no longer be timed
out, potentially leading to transmission of expired data.</t>
          </li>
          <li>
            <t>For datagrams, the implementation <bcp14>MUST</bcp14> drop the datagrams if the time elapsed
exceeds OBJECT_DELIVERY_TIMEOUT.  Similar to subgroups,
implementations <bcp14>SHOULD</bcp14> either minimize datagram queueing, or use datagram
queueing mechanisms that support time bounds (such as the <tt>outgoingMaxAge</tt>
parameter in the W3C WebTransport API).</t>
          </li>
        </ul>
        <t>If the Object Delivery Mode is Subgroup and the value of
SUBGROUP_DELIVERY_TIMEOUT is not zero, the MOQT implementation <bcp14>MUST</bcp14>
start a timer of SUBGROUP_DELIVERY_TIMEOUT duration once it becomes
aware that all of the objects on the subgroup have been published
(either by receiving a FIN from the upstream subscription, or, in case
of the original publisher, through being notified of this fact by the
application).  If the timer expires before the underlying transport
stream reaches "all data committed" state
(<xref section="4.3" sectionFormat="comma" target="I-D.ietf-webtrans-overview"/>), the implementation
<bcp14>MUST</bcp14> reset the stream.  This ensures that MOQT can time out subgroups
where all of the data has been sent but not yet fully delivered due to
packet loss.</t>
        <t>For objects whose Object Delivery Mode is Datagram, the
SUBGROUP_DELIVERY_TIMEOUT acts the same way as OBJECT_DELIVERY_TIMEOUT; if both
are non-zero, the smaller of the two is used.</t>
        <table anchor="timeout-comparison">
          <name>Comparison of the delivery timeout mechanisms</name>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="left">SUBGROUP_DELIVERY_TIMEOUT</th>
              <th align="left">OBJECT_DELIVERY_TIMEOUT</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Timeout starts</td>
              <td align="left">When the FIN for the subgroup is received</td>
              <td align="left">When the last byte of the object header is received</td>
            </tr>
            <tr>
              <td align="left">Timeout checked at</td>
              <td align="left">Via a timer until all data is acknowledged</td>
              <td align="left">When the object is sent to the underlying transport</td>
            </tr>
            <tr>
              <td align="left">Action upon timeout</td>
              <td align="left">Reset for subgroups, drop for datagrams</td>
              <td align="left">Reset for subgroups, drop for datagrams</td>
            </tr>
          </tbody>
        </table>
        <t>Publishers can, at their discretion, discontinue forwarding Objects before
either timeout occurs, subject to stream closure and ordering
constraints described in <xref target="closing-subgroup-streams"/>.  However, if neither
timeout is set to a non-zero value, all Objects in the track matching the
subscription filter are delivered as indicated by their Group Order and
Priority.  If a subscriber fails to consume Objects at a sufficient rate,
causing the publisher to exceed its resource limits, the publisher <bcp14>MAY</bcp14>
terminate the subscription using PUBLISH_DONE with error <tt>TOO_FAR_BEHIND</tt>.</t>
      </section>
    </section>
    <section anchor="session">
      <name>Sessions</name>
      <section anchor="moqt-uri-scheme">
        <name>MOQT URI Scheme</name>
        <t>An MOQT server is identified using a URI with the "moqt" scheme.  The "moqt"
URI scheme is defined as follows, using definitions from <xref target="RFC3986"/>:</t>
        <artwork><![CDATA[
moqt-URI = "moqt" "://" authority path-abempty [ "?" query ]
]]></artwork>
        <t>The <tt>authority</tt> portion <bcp14>MUST NOT</bcp14> contain an empty <tt>host</tt> portion.
The <tt>moqt</tt> URI scheme supports the <tt>/.well-known/</tt> path prefix defined in
<xref target="RFC8615"/>.</t>
        <t>The <tt>moqt</tt> URI scheme follows the generic URI syntax of <xref target="RFC3986"/> for
the <tt>authority</tt>, <tt>path-abempty</tt>, and <tt>query</tt> components, including the
use of reserved characters and percent-encoding defined therein.  A <tt>moqt</tt>
URI can be converted to an <tt>https</tt> URI by replacing the scheme (see
<xref target="webtransport"/>), so the <tt>path-abempty</tt> and <tt>query</tt> components use the same
syntax as <tt>https</tt> URIs.</t>
        <section anchor="moqt-fragment">
          <name>Fragment Identifiers</name>
          <t>The media type for resources identified by <tt>moqt</tt> URIs is
<tt>application/moqt</tt> (see <xref target="iana-media-type"/>).</t>
          <t>Fragment identifiers <bcp14>MAY</bcp14> be used with <tt>moqt</tt> URIs. The fragment is not
transmitted to the server; it is processed locally by the client after
establishing the MOQT session.</t>
          <t>A <tt>moqt</tt> URI fragment <bcp14>MUST</bcp14> begin with a registered fragment type
identifier, followed by a colon (<tt>:</tt>), followed by a type-specific value:</t>
          <artwork><![CDATA[
moqt://example.com/app#<type>:<value>
]]></artwork>
          <t>Fragment type identifiers <bcp14>MUST</bcp14> consist of ASCII lowercase letters,
digits, and hyphens (<tt>a-z</tt>, <tt>0-9</tt>, <tt>-</tt>). The
semantics of the value after the colon are defined by the specification
that registers the fragment type.</t>
          <t>Fragment type identifiers are registered in the "MOQT URI Fragment
Types" registry (<xref target="iana-fragment-types"/>).</t>
        </section>
        <section anchor="dereferencing-a-moqt-uri">
          <name>Dereferencing a MOQT URI</name>
          <t>The default operation for dereferencing a <tt>moqt</tt> URI is to establish a
MOQT session to the identified server.</t>
          <t>The <tt>moqt</tt> URI scheme has the following security considerations:</t>
          <ul spacing="normal">
            <li>
              <t>The <tt>authority</tt> component is sent in the TLS SNI extension during
connection establishment, exposing the target server identity to
on-path observers. Encrypted Client Hello (ECH) <xref target="RFC9580"/> can
mitigate this exposure.</t>
            </li>
            <li>
              <t>The <tt>path-abempty</tt> and <tt>query</tt> components are visible to the relay
that terminates the client's connection.</t>
            </li>
          </ul>
          <t>TODO: Add internationalization statement per RFC 7595 Section 3.6.</t>
          <t>The client resolves the <tt>host</tt> subcomponent of the <tt>authority</tt> to one or
more network addresses, most commonly using DNS A <xref target="RFC1035"/> and AAAA <xref target="RFC3596"/> records.</t>
          <t>When SVCB-compatible records <xref target="RFC9460"/> are published for the <tt>authority</tt>,
a client <bcp14>MAY</bcp14> use them to learn the server's endpoints and supported ALPN
protocols before connecting. A client using WebTransport resolves the
<tt>https</tt> URI derived in <xref target="webtransport"/> using HTTPS resource records as for
any <tt>https</tt> origin.
TODO: reference moqt SVCB record draft once available.</t>
          <t>If the port is omitted in the URI, a default port of 443 is used.</t>
          <t>The client <bcp14>MAY</bcp14> use either native QUIC or WebTransport. On a QUIC connection,
the client offers any combination of MOQT ALPNs (e.g. <tt>moqt-1</tt>, <tt>moqt-2</tt>)
and <tt>h3</tt> that it supports in its TLS ClientHello, in preference order. If the
server selects an MOQT ALPN, the session proceeds as described in
<xref target="native-quic"/>. If the server selects <tt>h3</tt>, the client establishes a
WebTransport session as described in <xref target="webtransport"/>. On a TCP+TLS
connection, the client offers <tt>h2</tt> in its TLS ClientHello and establishes a
WebTransport session as described in <xref target="webtransport"/>.</t>
        </section>
      </section>
      <section anchor="session-establishment">
        <name>Session establishment</name>
        <t>This document defines a protocol that can be used interchangeably both
over a QUIC connection directly <xref target="QUIC"/>, and over WebTransport
<xref target="WebTransport"/>.  Both provide streams and datagrams with similar
semantics (see <xref section="4" sectionFormat="comma" target="I-D.ietf-webtrans-overview"/>); thus, the
main difference lies in how the servers are identified and how the
connection is established. When MOQT runs directly over QUIC or over
WebTransport on HTTP/3, the QUIC DATAGRAM extension (<xref target="RFC9221"/>)
<bcp14>MUST</bcp14> be supported and negotiated in the QUIC connection used for MOQT,
which is already a requirement for WebTransport over HTTP/3.</t>
        <t>WebTransport can itself run over HTTP/2 (<xref target="I-D.ietf-webtrans-http2"/>), in
which case datagrams are reliable and ordered and TCP loss blocks delivery
on every stream.  MOQT remains functional, but its latency behavior differs
substantially from a deployment over QUIC.</t>
        <t>This document does not define how to run the protocol directly over other
transports, such as TCP, and applications using MOQT might need to fallback
to another protocol when QUIC or WebTransport aren't available.</t>
        <t>MOQT uses ALPN in QUIC and "WT-Available-Protocols" in WebTransport
(<xref section="3.3" sectionFormat="comma" target="WebTransport"/>) to perform version negotiation.</t>
        <t>The ALPN value <xref target="RFC7301"/> for the final version of this specification
is <tt>moqt</tt>.</t>
        <t>[[RFC editor: please remove the remainder of this section before publication.]]</t>
        <t>ALPNs used to identify IETF drafts are created by appending
the draft number to "moqt-". For example, draft-ietf-moq-transport-13
would be identified as "moqt-13".</t>
        <t>Note: Draft versions prior to -15 all used moq-00 ALPN, followed by version
negotiation in the SETUP messages.</t>
        <section anchor="webtransport">
          <name>WebTransport</name>
          <t>When the client uses WebTransport, it constructs an <tt>https</tt> URI from the <tt>moqt</tt>
URI by replacing the scheme with <tt>https</tt>.
For example, <tt>moqt://example.com/path</tt> becomes
<tt>https://example.com/path</tt>. The client sends an extended CONNECT request to this
URI to establish a WebTransport session, as described in
(<xref section="3" sectionFormat="comma" target="WebTransport"/>). The client includes MOQT protocol identifiers in
the WT-Available-Protocols header (<xref section="3.3" sectionFormat="comma" target="WebTransport"/>).</t>
        </section>
        <section anchor="native-quic">
          <name>Native QUIC</name>
          <t>The client establishes a QUIC connection to the host and port identified by the
<tt>authority</tt> section of the URI.
When the client uses native QUIC, the <tt>authority</tt>, <tt>path-abempty</tt> and <tt>query</tt>
portions of the URI are transmitted in Setup Options (see <xref target="message-setup"/>).</t>
        </section>
      </section>
      <section anchor="session-init">
        <name>Session initialization</name>
        <t>MOQT uses a pair of unidirectional streams for creating the session and
exchanging control messages. Each peer opens one control stream beginning with
a SETUP message. Using a pair of unidirectional streams rather than a single
bidirectional stream allows either peer to send data as soon as it is able.
Depending on whether 0-RTT is available on the QUIC connection, either the client or
the server might be able to send stream data first.</t>
        <t>In addition to the control streams, this specification uses bidirectional streams
to carry requests.  A request stream begins with one of these seven message types:
TRACK_STATUS, SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS. Bidirectional streams <bcp14>MUST NOT</bcp14>
begin with any other message type unless negotiated. If they do, the peer <bcp14>MUST</bcp14>
close the Session with <tt>UNEXPECTED_MESSAGE</tt>. Objects are sent on unidirectional
streams.</t>
        <t>As such, a client can initiate a MOQT session and send requests in parallel.
However, there are restrictions on these requests as described in <xref target="message-setup"/>.
When this is done before the handshake completes using 0-RTT, the security
implications described in <xref target="zero-rtt"/> apply.</t>
        <t>Unidirectional streams containing Objects or bidirectional stream(s) beginning
with a request message could arrive prior to the control streams, in which case
the data <bcp14>SHOULD</bcp14> be buffered until both control streams arrive and setup is
complete. If an implementation does not want to buffer or if the message type is
not supported, it <bcp14>MAY</bcp14> reset such streams before the session and control streams
are established.</t>
        <t>A control stream <bcp14>MUST NOT</bcp14> be closed at the underlying transport layer during the
session's lifetime.  If the control stream is closed, the peer <bcp14>MUST</bcp14> close the
session with <tt>CLOSED_CONTROL_STREAM</tt>.</t>
        <section anchor="zero-rtt">
          <name>0-RTT</name>
          <t>QUIC supports 0-RTT (<xref section="2.3" sectionFormat="of" target="RFC8446"/>), but WebTransport over QUIC
is not expected to use 0-RTT, because initializing a WebTransport session
uses CONNECT, which is not a safe method. <xref target="RFC8470"/> describes the use of
0-RTT with HTTP in more detail. If 0-RTT is used with an existing or future
version of WebTransport, the following would apply to it as well as QUIC.</t>
          <t>MOQT Messages and Objects as defined in this draft are safe to replay in most
circumstances.</t>
          <ul spacing="normal">
            <li>
              <t>TRACK_STATUS gets the Largest Object and Track Properties, but does not
change the state of a Track or any Object in the Track.</t>
            </li>
            <li>
              <t>SUBSCRIBE requests Objects be delivered, but does not change the Objects
being requested.</t>
            </li>
            <li>
              <t>PUBLISH initiates a Subscription. Objects can be immediately sent to
the Subscriber. Processing the same Objects multiple times is
idempotent, as the subscriber or relay can identify and discard
duplicates based on the Group ID and Object ID.</t>
            </li>
            <li>
              <t>SUBSCRIBE_NAMESPACE requests a list of namespaces and the establishment
of new subscriptions, but does not change the available Namespaces,
Tracks, or Objects contained within a Track.</t>
            </li>
            <li>
              <t>PUBLISH_NAMESPACE requests that Subscriptions under the namespace be sent
to that Publisher. If a Subscription was sent to the replaying endpoint, it
would fail because the endpoint cannot complete the handshake.</t>
            </li>
          </ul>
          <t>Some potential side effects of replay are:</t>
          <ul spacing="normal">
            <li>
              <t>Publishing Objects that were previously published could cause those
Objects to be distributed to active Subscriptions if the relays do
not identify them as already having been published. This re-distribution could
also make them available in cache again after they previously expired.</t>
            </li>
          </ul>
          <t>Replays could increase load on the MOQT network. For relay to client
traffic, this is no worse than 0-RTT in HTTP/3, since the server is limited by
the amplification factor until address validation. However, it could cause
the relay to initiate new upstream Subscriptions. For a SUBSCRIBE_TRACKS
request, sending that upstream could cause the Relay to receive a number of new
Subscriptions on the replaying client's behalf.</t>
          <t>Relays <bcp14>MAY</bcp14> defer initiating upstream subscriptions until the handshake is complete
or reject 0-RTT entirely to mitigate resource exhaustion from replayed packets.</t>
        </section>
        <section anchor="extension-negotiation">
          <name>Extension Negotiation</name>
          <t>Endpoints use the exchange of Setup messages to negotiate MOQT extensions.
Extensions can define new Message types, new Parameters, new Properties,
new Parameter values, or new framing for Streams and Datagrams.</t>
          <t>The client and server <bcp14>MUST</bcp14> include all Setup Options <xref target="message-setup"/>
required for the negotiated MOQT version in SETUP.</t>
          <t>Each endpoint declares the extensions it supports and provides any initial
values required by those extensions as Setup Options in SETUP. Once an endpoint
has both sent and received SETUP messages, it determines the set of negotiated
extensions.</t>
          <t>There is no generic format for declaring extension support. Each extension
specification defines the Setup Option or Options used to declare support for
that extension, the format of their values, and the rules for determining
whether the extension is negotiated. For example, an extension could be
declared by a zero length option, where presence alone indicates support, or
by an option carrying a list of supported extension versions from which the
endpoints select a common version. Setup Option types are registered with
IANA; see <xref target="iana-setup-options"/>.</t>
          <t>New versions of MOQT <bcp14>MUST</bcp14> specify which existing extensions can be used with
that version. New extensions <bcp14>MUST</bcp14> specify the existing versions with which they
can be used.</t>
        </section>
      </section>
      <section anchor="stream-usage">
        <name>Stream Usage</name>
        <section anchor="stream-types">
          <name>Unidirectional Streams</name>
          <t>All unidirectional MOQT streams start with a variable-length integer indicating
the type of the stream.</t>
          <table>
            <thead>
              <tr>
                <th align="right">ID</th>
                <th align="left">Type</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">0x05</td>
                <td align="left">FETCH_HEADER  (<xref target="fetch-header"/>)</td>
              </tr>
              <tr>
                <td align="right">0b0XX1XXXX</td>
                <td align="left">SUBGROUP_HEADER  (<xref target="subgroup-header"/>)</td>
              </tr>
              <tr>
                <td align="right">0x2F00</td>
                <td align="left">SETUP (<xref target="message-setup"/>)</td>
              </tr>
              <tr>
                <td align="right">0x132B3E28</td>
                <td align="left">PADDING  (<xref target="padding-streams"/>)</td>
              </tr>
            </tbody>
          </table>
          <t>An endpoint that receives an unknown stream type <bcp14>MUST</bcp14> close the session with
<tt>INVALID_STREAM_HEADER</tt>.</t>
          <t>Control streams (SETUP) are described in <xref target="session-init"/>.
Data streams (FETCH_HEADER, SUBGROUP_HEADER) are described in <xref target="data-streams"/>.
Padding streams are described in <xref target="padding"/>.</t>
        </section>
        <section anchor="bidirectional-request-streams">
          <name>Bidirectional Request Streams</name>
          <section anchor="request-id">
            <name>Request ID</name>
            <t>Request ID is included in request messages and is used to identify
requests across messages. For example, fetch streams reference
the Request ID of a SUBSCRIBE, PUBLISH, FETCH, or REQUEST_UPDATE.</t>
            <t>The client generates even numbered Request IDs, starting at 0, and the
server generates odd numbered Request IDs, starting at 1.  Each
endpoint increments its Request ID by 2 for each new request.</t>
            <t>Each SUBSCRIBE, PUBLISH, FETCH, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS,
PUBLISH_NAMESPACE, REQUEST_UPDATE, and TRACK_STATUS message consumes a
Request ID. Only
request messages include a Request ID; response messages do not, since
they are sent on the same bidirectional stream as the request.</t>
            <t>An endpoint <bcp14>MUST NOT</bcp14> reuse a Request ID within a session.  If an endpoint
receives a Request ID where the least significant bit is incorrect for the
sender, it <bcp14>MUST</bcp14> close the session with <tt>INVALID_REQUEST_ID</tt>.  If an endpoint
detects a duplicate Request ID, it <bcp14>MUST</bcp14> close the session with
<tt>INVALID_REQUEST_ID</tt>.</t>
          </section>
          <section anchor="graceful-request-closure">
            <name>Graceful Request Stream Closure</name>
            <t>A request stream is bidirectional and each direction is closed independently,
either gracefully with a FIN or abruptly with RESET_STREAM.</t>
            <t>A FIN only indicates that an endpoint will send no further messages in that
direction; it is not a request cancellation. An endpoint <bcp14>MUST NOT</bcp14> send a FIN on
a direction of a request stream until it has sent all required messages on that
direction for its request type. In particular, an endpoint sending a response to
a request <bcp14>MUST</bcp14> send the corresponding response message, and the publisher of an
<tt>Established</tt> subscription <bcp14>MUST</bcp14> send PUBLISH_DONE, before sending a FIN. A FIN
sent by the responder after its response and any subsequent messages for the
request signals that the request is complete; if it has not already done so, the
requester <bcp14>SHOULD</bcp14> then send a FIN on its direction, gracefully closing the stream.
An endpoint that receives a FIN before all required messages have arrived treats
the request as failed.</t>
            <t>An endpoint <bcp14>SHOULD</bcp14> send a FIN promptly after a message when it has nothing
further to send on that direction and will not need to respond to a future
REQUEST_UPDATE. A requester, with the exception of the sender of PUBLISH,
<bcp14>MAY</bcp14> FIN immediately after sending a message if it will not send a
REQUEST_UPDATE.</t>
          </section>
          <section anchor="request-cancellation">
            <name>Request Cancellation and Rejection</name>
            <t>Once a request stream has been opened, the request <bcp14>MAY</bcp14> be cancelled by either
endpoint. Senders cancel requests if the response is no longer of interest;
Receivers cancel requests if they are unable to or choose not to respond.
Implementations cancel a request by abruptly terminating any directions of the
stream that are still open, using RESET_STREAM for a direction they are sending
and STOP_SENDING for a direction they are receiving. An endpoint that has
already sent a FIN on its sending direction and subsequently wishes to cancel
sends STOP_SENDING on the receiving direction.</t>
            <t>When an endpoint rejects a request without performing any application
processing, it <bcp14>SHOULD</bcp14> send a REQUEST_ERROR and FIN the stream.</t>
          </section>
        </section>
      </section>
      <section anchor="session-level-tracks">
        <name>Session-Level Tracks and Namespaces</name>
        <t>MOQT defines the <tt>.session</tt> namespace (the bytes 0x2e, 0x73, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e) in the first position of the Track Namespace for
session-level tracks and namespaces. Session-level tracks and namespaces are
managed by the MOQT implementation, not the Application. They provide a
mechanism for extending MOQT transport functionality using existing
subscription and object delivery machinery, without defining new control
messages or stream types.</t>
        <t>The Application <bcp14>MUST NOT</bcp14> publish tracks or namespaces whose first
field is <tt>.session</tt>. Relays <bcp14>MUST NOT</bcp14> forward requests for session-level
tracks and namespaces to other sessions.</t>
        <t>An endpoint that receives a request for an unrecognized session-level track
or namespace <bcp14>MUST</bcp14> reject it with REQUEST_ERROR using error code
DOES_NOT_EXIST rather than passing it to the Application.</t>
        <t>The track names and namespaces available under the <tt>.session</tt> namespace are
defined by extensions to this specification and registered with IANA (see
<xref target="iana-session-level-tracks"/>).</t>
      </section>
      <section anchor="session-termination">
        <name>Termination</name>
        <t>The Transport Session can be terminated at any point.  When native QUIC
is used, the session is closed using the CONNECTION_CLOSE frame
(<xref section="19.19" sectionFormat="comma" target="QUIC"/>).  When WebTransport is used, the session is
closed using the CLOSE_WEBTRANSPORT_SESSION capsule (<xref section="6" sectionFormat="comma" target="WebTransport"/>).</t>
        <t>The error codes used when terminating a Session are defined in
<xref target="session-termination-codes"/>.</t>
        <t>An endpoint <bcp14>MAY</bcp14> choose to treat a subscription or request specific error as a
session error under certain circumstances, closing the entire session in
response to a condition with a single subscription or message. Implementations
need to consider the impact on other outstanding subscriptions before making
this choice.</t>
        <section anchor="session-migration">
          <name>Graceful Session Migration</name>
          <t>MOQT requires a long-lived and stateful session. However, a service
provider needs the ability to shutdown/restart a server without waiting for all
sessions to drain naturally, as that can take days for long-form media.
MOQT enables proactively draining sessions via the GOAWAY message (<xref target="message-goaway"/>).</t>
          <t>A GOAWAY on the control stream migrates the entire session, as described in
this section. A GOAWAY on a single request stream instead migrates only that
request, leaving the rest of the session in place; see <xref target="message-goaway"/>.</t>
          <t>The server sends a GOAWAY message, signaling the client to establish a new
session and migrate any <tt>Established</tt> subscriptions. The GOAWAY message optionally
contains a new URI for the new session, otherwise the current URI is
reused. The GOAWAY message contains a Timeout indicating how long, in
milliseconds, the sender intends to wait before closing the session. The sender
<bcp14>SHOULD</bcp14> close the session with <tt>GOAWAY_TIMEOUT</tt> after the indicated timeout if
there are still open subscriptions or fetches on a connection.</t>
          <t>When the server is a subscriber, it <bcp14>SHOULD</bcp14> send a GOAWAY message to downstream
subscribers prior to unsubscribing from upstream publishers.</t>
          <t>After the client receives a GOAWAY, it's <bcp14>RECOMMENDED</bcp14> that the client waits until
there are no more <tt>Established</tt> subscriptions before closing the session with NO_ERROR.
Ideally this is transparent to the application using MOQT, which involves
establishing a new session in the background and migrating <tt>Established</tt> subscriptions
and published namespaces. The client can choose to delay closing the session if
it expects more OBJECTs to be delivered. The sender closes the session with a
<tt>GOAWAY_TIMEOUT</tt> if the peer doesn't close the session within the
indicated Timeout.</t>
        </section>
      </section>
    </section>
    <section anchor="relays-moq">
      <name>Relays</name>
      <t>Relays are leveraged to enable distribution scale in the MOQT
architecture. Relays can be used to form an overlay delivery network,
similar in functionality to Content Delivery Networks
(CDNs). Additionally, relays serve as policy enforcement points by
validating subscribe and publish requests at the edge of a network.</t>
      <t>Relays are endpoints, which means they terminate Transport Sessions in order to
have visibility of MOQT Object metadata.</t>
      <t>For the purposes of this specification, a coordinated set of relays are treated
as a single MOQT relay.  How relays within such a set interconnect, and use
cases built on relay to relay communication, are out of scope.</t>
      <section anchor="caching-relays">
        <name>Caching Relays</name>
        <t>Relays <bcp14>MAY</bcp14> cache Objects, but are not required to.</t>
        <t>A caching relay saves Objects to its cache identified by the Object's Full Track
Name, Group ID and Object ID. If multiple objects are received with the same
Full Track Name, Group ID and Object ID, Relays <bcp14>MAY</bcp14> ignore subsequently received
Objects or <bcp14>MAY</bcp14> use them to update certain cached fields. Implementations that
update the cache need to protect against cache poisoning.  Only Object
Properties can be added, removed or updated, subject to the constraints of the
specific property.</t>
        <t>An endpoint that receives a duplicate Object with a different Delivery
Mode, Subgroup ID, Priority or Payload <bcp14>MUST</bcp14> treat the track as Malformed.</t>
        <t>For ranges of objects that do not exist, relays <bcp14>MAY</bcp14> change the representation
of a missing range to a semantically equivalent one.  For instance, a relay may
change an End-of-Group="Y" Subgroup Header to an equivalent object with an End
of Group status, or a Prior Group ID Gap property could be removed in FETCH,
where it's redundant.</t>
        <t>A relay <bcp14>MAY</bcp14> cache that a range of Objects is Gone (see <xref target="object-states"/>).  If
it later receives one of those Objects, it can cache and forward the Object.  A
relay does not cache Unknown or timed out ranges.</t>
        <t>A cache <bcp14>MUST</bcp14> store all fields of an Object defined in <xref target="object-header"/>,
with the exception of any Object Properties (<xref target="object-properties"/>)
that specify otherwise.</t>
      </section>
      <section anchor="paused-subscription-handling">
        <name>Paused Subscription Handling</name>
        <t>If one or more downstream subscribers to a track are not paused, the relay
<bcp14>MUST</bcp14> have an unpaused upstream subscription, in order to receive and
forward the requested Objects. When all downstream subscribers are paused, the
relay chooses whether to pause upstream at its discretion, considering the
following
tradeoffs and deployment considerations:</t>
        <ul spacing="normal">
          <li>
            <t>Leaving the upstream subscription unpaused starts object delivery and
pre-warms the relay's cache, so objects are available when a downstream
subscriber resumes. This reduces latency but consumes upstream and
publisher resources for content no downstream subscriber is currently
receiving.</t>
          </li>
          <li>
            <t>Pausing the upstream subscription avoids that work, at the cost of higher
latency when delivery is later resumed.</t>
          </li>
        </ul>
      </section>
      <section anchor="multiple-publishers">
        <name>Multiple Publishers</name>
        <t>A Relay can receive PUBLISH_NAMESPACE for the same Track Namespace Prefix or
PUBLISH messages for the same Track from multiple publishers.  The following
sections explain how Relays maintain subscriptions to all available publishers
for a given Track.</t>
        <t>There is no specified limit to the number of publishers of a Track Namespace or
Track.  An implementation can use mechanisms such as REQUEST_ERROR or
unsubscribing (see <xref target="request-cancellation"/>) if it cannot accept an additional
publisher due to implementation constraints. Implementations can consider the
establishment or idle time of the session or subscription to determine which
publisher to reject or disconnect.</t>
        <t>Relays <bcp14>MUST</bcp14> handle Objects for the same Track from multiple publishers and
forward them to matching <tt>Established</tt> subscriptions. The Relay <bcp14>SHOULD</bcp14> attempt to
deduplicate Objects before forwarding, subject to implementation constraints.</t>
      </section>
      <section anchor="request-stream-credit">
        <name>Request Stream Credit</name>
        <t>Each request opens a new bidirectional stream, and the peer limits how many can
be opened (e.g., with QUIC MAX_STREAMS).  A single FETCH can generate several
upstream FETCHes, each needing its own stream (see <xref target="relay-fetch-handling"/>).  A
relay that lacks stream credit to forward a request can fail it immediately with
<tt>UNAVAILABLE</tt>, or wait for credit and fail it with <tt>TIMEOUT</tt> if none arrives.
Either response can include a Retry Interval.  Other requests from the same peer
can still succeed, since they might be served from cache or by a different
upstream.</t>
      </section>
      <section anchor="subscriber-interactions">
        <name>Subscriber Interactions</name>
        <t>Subscribers request Tracks by sending a SUBSCRIBE (see
<xref target="message-subscribe-req"/>) or FETCH (see <xref target="message-fetch"/>) control message for
each Track of interest. Relays <bcp14>MUST</bcp14> ensure subscribers are authorized to access
the content associated with the Track. The authorization information can be part
of request itself or part of the encompassing session. The specifics of how a
relay authorizes a user are outside the scope of this specification.</t>
        <t>The relay <bcp14>MUST</bcp14> have an <tt>Established</tt> upstream subscription before sending
SUBSCRIBE_OK in response to a downstream SUBSCRIBE.  If a relay does not have
sufficient information to send a FETCH_OK immediately in response to a FETCH, it
<bcp14>MUST</bcp14> withhold sending FETCH_OK until it does.</t>
        <t>A relay <bcp14>MUST</bcp14> set LARGEST_OBJECT (<xref target="largest-param"/>) to the largest of the
following:</t>
        <ol spacing="normal" type="1"><li>
            <t>Any LARGEST_OBJECT value received from the upstream publisher in
SUBSCRIBE_OK, PUBLISH, REQUEST_UPDATE_OK, TRACK_STATUS_OK or
PUBLISH_STATE_NOTIFY</t>
          </li>
          <li>
            <t>The largest Location of an Object received on an upstream subscription</t>
          </li>
        </ol>
        <t>However, a relay <bcp14>MUST</bcp14> only compute the <tt>Largest Object</tt> from an upstream subscription
that is currently unpaused, and is either unfiltered or has Location and/or Range
filters that match or are wider than the downstream request. If such an upstream
subscription does not exist, the relay <bcp14>MUST</bcp14> establish, widen or unpause an
upstream subscription, or send a TRACK_STATUS, and use
the resulting LARGEST_OBJECT parameter.</t>
        <t>Publishers maintain a list of <tt>Established</tt> downstream subscriptions for
each Track. Relays use the Track Alias (<xref target="track-alias"/>) of an incoming Object
to identify its Track and find the current subscribers.  Each new Object
belonging to the Track is forwarded to each subscriber, as allowed by the
subscription's filter (see <xref target="message-subscribe-req"/>), and delivered according
to the priority (see <xref target="priorities"/>) and delivery timeout (see
<xref target="delivery-timeouts"/>).</t>
        <t>A relay <bcp14>MUST NOT</bcp14> reorder or drop objects received on a multi-object stream when
forwarding to subscribers.</t>
        <t>Relays <bcp14>MAY</bcp14> aggregate authorized subscriptions for a given Track when
multiple subscribers request the same Track. Subscription aggregation
allows relays to make only a single upstream subscription for the
Track. The published content received from the upstream subscription
request is cached and shared among the pending subscribers.
Relays that aggregate subscriptions <bcp14>MAY</bcp14> combine filters from downstream
subscribers on the upstream subscription, up to the peer's MAX_FILTER_RANGES.
If adding filters to an upstream subscription is not possible, the relay can either
remove some or all filters, or make additional subscriptions to the same Track.
Multiple subscriptions to the same Track with non-disjoint filter sets will result in
duplicate objects arriving at the relay.  Using wider upstream filters can protect the
relay from churn as subscribers with disparate filters subscribe and unsubscribe from
a Track, at the cost of receiving more objects.</t>
        <t>A subscriber remains subscribed to a Track at a Relay until it unsubscribes, the
upstream publisher terminates the subscription, or the subscription expires (see
<xref target="message-subscribe-ok"/>).  A subscription with a filter can reach a state where
all possible Objects matching the filter have been delivered to the subscriber.
Since tracking this can be prohibitively expensive, Relays are not required or
expected to do so.</t>
        <section anchor="graceful-subscriber-switchover">
          <name>Graceful Subscriber Relay Switchover</name>
          <t>This section describes a behavior that a Subscriber <bcp14>MAY</bcp14> implement to improve
user experience when a relay sends a GOAWAY or the Subscriber switches between
networks, such as WiFi to Cellular, and QUIC Connection Migration is not possible.</t>
          <t>When a subscriber receives the GOAWAY message, it starts the process
of connecting to a new relay and sending the SUBSCRIBE requests for
all <tt>Established</tt> subscriptions to the new relay. The new relay will send a
response to the subscribes and if they are successful, the subscriptions
to the old relay can be cancelled (see <xref target="request-cancellation"/>).</t>
        </section>
      </section>
      <section anchor="large-namespaces">
        <name>Relay Resource Protection in Large Namespaces</name>
        <t>Relays <bcp14>SHOULD</bcp14> aggregate and propagate filters upstream on subscriptions,
especially namespace subscriptions,
to conserve and protect their resources from excessive load.  They <bcp14>MAY</bcp14>
also impose limits on the number of publishers in a namespace, by rejecting
or closing namespace subscriptions with the error NAMESPACE_TOO_LARGE.
Relays <bcp14>MAY</bcp14> likewise limit the load imposed by subscribers, by rejecting or
closing namespace subscriptions with CONFLICTING_FILTERS if too many disjoint
filters are requested on downstream subscriptions across a large number of
subscribers.</t>
      </section>
      <section anchor="publisher-interactions">
        <name>Publisher Interactions</name>
        <t>There are two ways to publish through a relay:</t>
        <ol spacing="normal" type="1"><li>
            <t>Send a PUBLISH message for a specific Track to the relay. The relay <bcp14>MAY</bcp14>
pause the Subscription with REQUEST_UPDATE (see <xref target="pausing-subscriptions"/>)
until there are known subscribers for new Tracks.</t>
          </li>
          <li>
            <t>Send a PUBLISH_NAMESPACE message for a Track Namespace Prefix to the relay.
This enables the relay to send SUBSCRIBE or FETCH messages to publishers for
Tracks matching that prefix in response to requests received from subscribers.</t>
          </li>
        </ol>
        <t>Relays <bcp14>MUST</bcp14> verify that publishers are authorized to publish the set of Tracks
whose Track Namespace matches the Track Namespace Prefix in a
PUBLISH_NAMESPACE, or the Full Track Name in PUBLISH. Relays <bcp14>MUST NOT</bcp14> assume
that an authorized publisher of a single Track is implicitly authorized to
publish any other Tracks or Track Namespaces.
If a Publisher would like Subscriptions in a Namespace routed to it, it <bcp14>MUST</bcp14> send
an explicit PUBLISH_NAMESPACE.
The authorization and identification of the publisher depends on the way the
relay is managed and is application specific.</t>
        <t>When a publisher wants to stop new subscriptions for a published namespace, it
cancels the request (see <xref target="request-cancellation"/>) to withdraw the PUBLISH_NAMESPACE.
A subscriber indicates it will no longer subscribe to Tracks in a namespace it
previously responded PUBLISH_NAMESPACE_OK to by cancelling the
PUBLISH_NAMESPACE request.</t>
        <t>A Relay connects publishers and subscribers by managing sessions based on the
Track Namespace or Full Track Name. When a SUBSCRIBE message is sent, its Full
Track Name is matched exactly against existing upstream subscriptions.</t>
        <t>Namespace Prefix Matching (<xref target="namespace-prefix-matching"/>) is further used to
decide which publishers receive a SUBSCRIBE and which subscribers receive a
PUBLISH.</t>
        <t>Relays <bcp14>MUST</bcp14> send at least one SUBSCRIBE to each matching publisher. This includes
matching both Established subscriptions on the Full Track Name and Namespace
Prefix Matching against published Namespaces.</t>
        <t>When a Relay needs to make an upstream FETCH request, it determines the
available publishers using the same matching rules as SUBSCRIBE. When more than
one publisher is available, the Relay <bcp14>MUST</bcp14> send the FETCH to at least one of them.</t>
        <t>When a Relay receives a SUBSCRIBE with FILL_PARAMETERS, it serves the fill
range from its cache and retrieves any missing objects upstream using
a SUBSCRIBE with FILL_PARAMETERS or FETCHes (see <xref target="fill-semantics"/>).</t>
        <t>When a Relay receives an authorized SUBSCRIBE for a Track with one or more
<tt>Established</tt> upstream subscriptions, it <bcp14>MUST</bcp14> reply with SUBSCRIBE_OK.  If the
SUBSCRIBE is not paused and the upstream subscriptions are paused, the Relay
<bcp14>MUST</bcp14> resume the upstream subscriptions with REQUEST_UPDATE to all publishers.
If there are no <tt>Established</tt> upstream subscriptions for the requested Track, the Relay
<bcp14>MUST</bcp14> send a SUBSCRIBE request to each publisher that has published the
subscription's namespace or prefix thereof.  If the SUBSCRIBE is not paused,
then the Relay <bcp14>MUST NOT</bcp14> pause when subscribing upstream.</t>
        <t>When a relay receives an incoming PUBLISH message, it <bcp14>MUST</bcp14> send a PUBLISH
request to each subscriber that has sent SUBSCRIBE_TRACKS for the Track's
namespace or a prefix thereof. However, if the relay is
holding a downstream SUBSCRIBE awaiting a publisher for this Track (see
<xref target="rendezvous-timeout"/>), it <bcp14>MUST</bcp14> proceed with the SUBSCRIBE and
<bcp14>MUST NOT</bcp14> also forward the PUBLISH to that subscriber.</t>
        <t>When a relay receives an authorized PUBLISH message for a
Track that has <tt>Established</tt> downstream subscriptions, it <bcp14>MUST</bcp14> respond with
PUBLISH_OK.  If at least one downstream subscriber for the Track is not
paused, the Relay <bcp14>MUST</bcp14> resume the upstream subscription with REQUEST_UPDATE,
if paused.</t>
        <t>When a relay receives an authorized PUBLISH_NAMESPACE for a namespace that
matches one or more existing subscriptions to other upstream sessions, it <bcp14>MUST</bcp14>
send a SUBSCRIBE to the publisher that sent the PUBLISH_NAMESPACE for each
matching subscription, unless it already has a subscription to that Track from
that publisher. A Relay does not send PUBLISH_NAMESPACE to a subscriber;
it advertises namespaces by sending NAMESPACE in response to a matching
SUBSCRIBE_NAMESPACE (see <xref target="subscribing-to-namespaces"/>).</t>
        <t>If a Session is closed due to an unknown or invalid control message or Object,
the Relay <bcp14>MUST NOT</bcp14> propagate that message or Object to another Session, because
it would enable a single Session error to force an unrelated Session, which
might be handling other subscriptions, to be closed.</t>
        <section anchor="graceful-publisher-switchover">
          <name>Graceful Publisher Relay Switchover</name>
          <t>This section describes a behavior that a publisher <bcp14>MAY</bcp14> implement to improve
user experience when a relay sends a GOAWAY or the publisher switches between
networks, such as WiFi to Cellular, and QUIC Connection Migration is not possible.</t>
          <t>A new Session is established, to a new URI if specified in a GOAWAY. The
publisher sends PUBLISH_NAMESPACE and/or PUBLISH messages to begin publishing
on the new Session, but it does not immediately stop publishing Objects on the
old Session.</t>
          <t>Once the subscriptions have migrated over to the new session, the publisher
can stop publishing Objects on the old session. The relay will attempt
to deduplicate Objects received on both subscriptions. Ideally, the
subscriptions downstream from the relay do not observe this change, and keep
receiving the Objects on the same subscription.</t>
        </section>
      </section>
      <section anchor="relay-track-handling">
        <name>Relay Track Handling</name>
        <t>A relay <bcp14>MUST</bcp14> include all Properties associated with a Track when sending any PUBLISH,
SUBSCRIBE_OK, TRACK_STATUS_OK, or FETCH_OK, unless
allowed by the property's specification (see <xref target="properties"/>).</t>
      </section>
      <section anchor="relay-object-handling">
        <name>Relay Object Handling</name>
        <t>MOQT encodes the delivery information in the Object header (<xref target="object-header"/>).
A relay <bcp14>MUST NOT</bcp14> modify Object fields when forwarding, except for
Object Properties as specified in <xref target="properties"/>.</t>
        <t>A relay <bcp14>MUST</bcp14> treat the object payload as opaque.  A relay <bcp14>MUST NOT</bcp14>
combine, split, or otherwise modify object payloads.</t>
        <t>Relays prioritize forwarded Objects as described in <xref target="priorities"/>.</t>
      </section>
    </section>
    <section anchor="notational-conventions-and-common-structures">
      <name>Notational Conventions and Common Structures</name>
      <t>This document uses the conventions detailed in (<xref section="1.3" sectionFormat="comma" target="RFC9000"/>)
when describing the binary encoding.</t>
      <section anchor="variable-length-integers">
        <name>Variable-Length Integers</name>
        <t>MOQT requires a variable-length integer encoding with the following properties:</t>
        <ol spacing="normal" type="1"><li>
            <t>The encoded length can be determined from the first encoded byte.</t>
          </li>
          <li>
            <t>The range of 1 byte values is as large as possible.</t>
          </li>
          <li>
            <t>All 64 bit numbers can be encoded.</t>
          </li>
        </ol>
        <t>The variable-length integer encoding uses the number of leading 1 bits of the
first byte to indicate the length of the encoding in bytes. The remaining bits
after the first 0 and subsequent bytes, if any, represent the integer value,
encoded in network byte order.</t>
        <t>Integers are encoded in 1 to 9 bytes and can encode up to 64
bit unsigned integers. The following table summarizes the encoding properties.</t>
        <table>
          <name>Summary of Integer Encodings</name>
          <thead>
            <tr>
              <th align="left">Leading Bits</th>
              <th align="left">Length (bytes)</th>
              <th align="left">Usable Bits</th>
              <th align="left">Range</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">7</td>
              <td align="left">0-127</td>
            </tr>
            <tr>
              <td align="left">10</td>
              <td align="left">2</td>
              <td align="left">14</td>
              <td align="left">0-16383</td>
            </tr>
            <tr>
              <td align="left">110</td>
              <td align="left">3</td>
              <td align="left">21</td>
              <td align="left">0-2097151</td>
            </tr>
            <tr>
              <td align="left">1110</td>
              <td align="left">4</td>
              <td align="left">28</td>
              <td align="left">0-268435455</td>
            </tr>
            <tr>
              <td align="left">11110</td>
              <td align="left">5</td>
              <td align="left">35</td>
              <td align="left">0-34359738367</td>
            </tr>
            <tr>
              <td align="left">111110</td>
              <td align="left">6</td>
              <td align="left">42</td>
              <td align="left">0-4398046511103</td>
            </tr>
            <tr>
              <td align="left">1111110</td>
              <td align="left">7</td>
              <td align="left">49</td>
              <td align="left">0-562949953421311</td>
            </tr>
            <tr>
              <td align="left">11111110</td>
              <td align="left">8</td>
              <td align="left">56</td>
              <td align="left">0-72057594037927935</td>
            </tr>
            <tr>
              <td align="left">11111111</td>
              <td align="left">9</td>
              <td align="left">64</td>
              <td align="left">0-18446744073709551615</td>
            </tr>
          </tbody>
        </table>
        <t>The following table contains some example encodings:</t>
        <table>
          <name>Example Integer Encodings</name>
          <thead>
            <tr>
              <th align="left">Byte Sequence</th>
              <th align="left">Decimal Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x25</td>
              <td align="left">37</td>
            </tr>
            <tr>
              <td align="left">0x8025</td>
              <td align="left">37</td>
            </tr>
            <tr>
              <td align="left">0xbbbd</td>
              <td align="left">15,293</td>
            </tr>
            <tr>
              <td align="left">0xed7f3e7d</td>
              <td align="left">226,442,877</td>
            </tr>
            <tr>
              <td align="left">0xfaa1a0e403d8</td>
              <td align="left">2,893,212,287,960</td>
            </tr>
            <tr>
              <td align="left">0xfc8998abc66bc0</td>
              <td align="left">151,288,809,941,952</td>
            </tr>
            <tr>
              <td align="left">0xfefa318fa8e3ca11</td>
              <td align="left">70,423,237,261,249,041</td>
            </tr>
            <tr>
              <td align="left">0xffffffffffffffffff</td>
              <td align="left">18,446,744,073,709,551,615</td>
            </tr>
          </tbody>
        </table>
        <t>Variable-length integers do not need to be encoded using the minimum number of
bytes; any encoding length that can represent the value is valid. Note that, as
a result, the same numeric value can be represented by more than one byte
sequence. For example, the value 0 can be encoded as <tt>0x00</tt>, <tt>0x8000</tt>,
<tt>0xc00000</tt>, or any longer form.</t>
        <dl>
          <dt>x (vi64):</dt>
          <dd>
            <t>Indicates that x holds an integer value using the variable-length
encoding as described above.</t>
          </dd>
        </dl>
      </section>
      <section anchor="location-structure">
        <name>Location Structure</name>
        <t>Location identifies a particular Object in a Group within a Track.</t>
        <figure anchor="moq-location">
          <name>Location structure</name>
          <artwork><![CDATA[
Location {
  Group (vi64),
  Object (vi64)
}
]]></artwork>
        </figure>
        <t>In this document, a Location can be expressed in the form of {GroupID,
ObjectID}, where GroupID and ObjectID indicate the Group ID and Object ID of the
Location, respectively.  The constituent parts of any Location A can be referred
to using A.Group or A.Object.</t>
        <t>Location A &lt; Location B if:</t>
        <t><tt>A.Group &lt; B.Group || (A.Group == B.Group &amp;&amp; A.Object &lt; B.Object)</tt></t>
      </section>
      <section anchor="key-value-pair-structure">
        <name>Key-Value-Pair Structure</name>
        <t>Key-Value-Pair is a flexible structure that carries key/value
pairs in which the key is a variable-length integer and the value
is either a variable-length integer or a byte field of arbitrary
length.</t>
        <t>Key-Value-Pairs encode a Type value as a delta from the previous Type value,
or from 0 if there is no previous Type value. This is efficient on the wire
and makes it easy to ensure there is only one instance of a type when needed.
The previous Type value plus the Delta Type <bcp14>MUST NOT</bcp14> be greater than 2^64 - 1.
If a Delta Type is received that would be too large, the Session <bcp14>MUST</bcp14> be closed
with <tt>DELTA_ENCODING_OVERFLOW</tt>.</t>
        <t>Key-Value-Pair is used in both the data plane and control plane, but
is optimized for use in the data plane.</t>
        <figure anchor="moq-key-value-pair">
          <name>MOQT Key-Value-Pair</name>
          <artwork><![CDATA[
Key-Value-Pair {
  Delta Type (vi64),
  [Length (vi64),]
  Value (..)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Delta Type: an unsigned variable-length integer identifying the Type
as a delta encoded value from the previous Type, if any. The Type identifies
the type of value and also the subsequent serialization.</t>
          </li>
          <li>
            <t>Length: Only present when Type is odd. Specifies the length of the Value field
in bytes. The maximum length of a value is 2^16-1 bytes.  If an endpoint
receives a length larger than the maximum, it <bcp14>MUST</bcp14> close the session with
<tt>FIELD_LENGTH_EXCEEDED</tt>.</t>
          </li>
          <li>
            <t>Value: A single variable-length integer when Type is even, otherwise a
sequence of Length bytes.</t>
          </li>
        </ul>
        <t>If a receiver understands a Type, and the following Value or Length/Value does
not match the serialization defined by that Type, the receiver <bcp14>MUST</bcp14> close
the session with <tt>MALFORMED_KEY_VALUE</tt>.</t>
        <t>Key-Value-Pairs are always parsed with a known byte length, which bounds
the sequence. The source of this length varies by context.</t>
      </section>
      <section anchor="properties">
        <name>Track and Object Properties</name>
        <t>Tracks and Objects can have additional relay-visible fields, known as
Properties, which do not require negotiation, and can be used to alter
MOQT Object distribution.</t>
        <t>Properties are defined in <xref target="moqt-properties"/> as well as external
specifications and are registered in an IANA table <xref target="iana"/>. These
specifications define the type and value of the property, along with any rules
concerning processing, modification, caching and forwarding.</t>
        <t>If a Relay does not support a Property, unless it is a Mandatory Track
Property as described in <xref target="mandatory-track-properties"/>, the Relay:</t>
        <ul spacing="normal">
          <li>
            <t><bcp14>MUST NOT</bcp14> modify the Property.</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> forward the Property.</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> cache the Property with the Track or Object.</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> allow multiple instances of the Property.</t>
          </li>
        </ul>
        <t>If a Track or Object
arrives with a different set of unknown properties than previously cached,
the most recent set <bcp14>SHOULD</bcp14> replace any cached values, removing any unknown
values not present in the new set.  Relays <bcp14>MUST NOT</bcp14> attempt to merge sets
of unknown properties received in different messages.</t>
        <t>If a Relay supports a Property, it <bcp14>MUST</bcp14> follow the processing rules in the
Property's definition.  Unless those rules permit otherwise:</t>
        <ul spacing="normal">
          <li>
            <t>A Relay <bcp14>MUST NOT</bcp14> modify, add, or remove the Property.</t>
          </li>
          <li>
            <t>A Relay <bcp14>MUST</bcp14> forward the Property to downstream subscribers.</t>
          </li>
          <li>
            <t>A Relay <bcp14>MUST</bcp14> cache the Property with the Track or Object if the Track or
Object is cached.</t>
          </li>
          <li>
            <t>A Track or Object <bcp14>MUST NOT</bcp14> contain more than one instance of the Property.</t>
          </li>
        </ul>
        <t>An endpoint that supports a Property and receives more instances of it than
allowed <bcp14>MUST</bcp14> treat the Track as malformed (see <xref target="malformed-tracks"/>).</t>
        <t>An endpoint that supports a Property and receives it outside its scope (e.g. a
Track-only Property as an Object Property) <bcp14>MUST</bcp14> treat the Track as malformed
(see <xref target="malformed-tracks"/>).</t>
        <t>Properties are serialized as Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).
Track Properties always appear as the final field in the messages that
carry them; their length is the remaining bytes of the message after all
preceding fields have been consumed. Object Properties (<xref target="object-properties"/>)
are preceded by an explicit length field.</t>
        <t>Property types are registered in the IANA table 'MOQ Properties'.
See <xref target="iana"/>.</t>
        <t>Certain Property type ranges are reserved for application-specific
use and will never be allocated by IANA in future MOQT specifications:</t>
        <ul spacing="normal">
          <li>
            <t>0x78 to 0x7F (1-byte encoding): 8 code points for applications with
tight space constraints</t>
          </li>
          <li>
            <t>0x3800 to 0x3FFF (2-byte encoding): 2048 code points (including grease
<xref target="grease"/>) for applications with moderate space constraints</t>
          </li>
        </ul>
        <t>Applications <bcp14>MAY</bcp14> use code points in these ranges without registration for
format-specific metadata or other application-defined purposes. Relays that
do not understand the application format <bcp14>MUST</bcp14> forward these properties
unchanged but <bcp14>MUST NOT</bcp14> attempt to interpret their semantic meaning. Different
applications using the same code point in these ranges may assign different
meanings; the interpretation depends on the track or application
context known to the publisher and subscriber.</t>
      </section>
      <section anchor="reason-phrase">
        <name>Reason Phrase Structure</name>
        <t>Reason Phrase provides a way for the sender to encode additional diagnostic
information about an error condition, where appropriate.</t>
        <artwork><![CDATA[
Reason Phrase {
  Reason Phrase Length (vi64),
  Reason Phrase Value (..)
}
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>Reason Phrase Length: A variable-length integer specifying the length of the
reason phrase in bytes. The reason phrase length has a maximum value of
1024 bytes. If an endpoint receives a length exceeding the maximum, it <bcp14>MUST</bcp14>
close the session with <tt>FIELD_LENGTH_EXCEEDED</tt>.</t>
          </li>
          <li>
            <t>Reason Phrase Value: Additional diagnostic information about an error condition.
The reason phrase value is encoded as UTF-8 string and does not carry information,
such as language tags, that would aid comprehension by any entity other than
the one that created the text.</t>
          </li>
        </ul>
      </section>
      <section anchor="range-filter-structure">
        <name>Range Filter Structure</name>
        <t>Each Range Filter parameter (see <xref target="range-filters"/>) carries a sequence of
Ranges, encoded as follows:</t>
        <artwork><![CDATA[
Range {
  Start (vi64),
  [End (vi64)]
}
]]></artwork>
        <t>Length (vi64) is the byte count of all fields after itself.  When Length
is 0, there is no filter and no further fields are present.  This can be
used in REQUEST_UPDATE to remove a filter.</t>
        <t>Each Range is an inclusive Start/End pair.  End is optional in the last
pair; if omitted it indicates the last Range is open-ended.</t>
        <t>Each Start is delta encoded from the prior Range's End (or from 0 for the
first Range), and End is delta encoded from its own Start.  If adding the delta
would exceed 2^64-1, the request <bcp14>MUST</bcp14> be rejected with <tt>INVALID_FILTER</tt>.
For example, ranges 3-5 and 10-15 encode as: Start=3, End=2, Start=5, End=5.</t>
      </section>
      <section anchor="track-namespace-structure">
        <name>Track Namespace Structure</name>
        <t>Track Namespace (<xref target="track-name"/>) is encoded as follows:</t>
        <artwork><![CDATA[
Track Namespace {
  Number of Track Namespace Fields (vi64),
  Track Namespace Field (..) ...
}
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>Number of Track Namespace Fields: A variable-length integer specifying
the number of Track Namespace Fields in the Track Namespace.</t>
          </li>
        </ul>
        <t>Each Track Namespace Field is encoded as follows:</t>
        <artwork><![CDATA[
Track Namespace Field {
  Track Namespace Field Length (vi64),
  Track Namespace Field Value (..)
}
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Field Length: A variable-length integer specifying the length
of the Track Namespace Field in bytes.</t>
          </li>
          <li>
            <t>Track Namespace Field Value: A sequence of bytes that forms a Track Namespace
Field.</t>
          </li>
        </ul>
        <t>Each Track Namespace Field Value <bcp14>MUST</bcp14> contain at least one byte. If an endpoint
receives a Track Namespace Field with a Track Namespace Field Length of 0, it
<bcp14>MUST</bcp14> close the session with <tt>INVALID_TRACK_NAMESPACE</tt>.</t>
        <t>If an endpoint receives a Track Namespace consisting of greater than 32 Track
Namespace Fields, it <bcp14>MUST</bcp14> close the session with <tt>INVALID_TRACK_NAMESPACE</tt>.</t>
        <t>The maximum total length of a Full Track Name is 4,096 bytes. The length of a
Full Track Name is computed as the sum of the Track Namespace Field Length
fields and the Track Name Length field. The length of a Track Namespace is the
sum of the Track Namespace Field Length fields. If an endpoint receives a Track
Namespace or a Full Track Name exceeding 4,096 bytes, it <bcp14>MUST</bcp14> close the session
with <tt>FIELD_LENGTH_EXCEEDED</tt>.</t>
      </section>
      <section anchor="namespace-name-format">
        <name>Representing Namespace and Track Names</name>
        <t>There is often a need to render namespace tuples and track names for
purposes such as logging, representing track filenames, or use in
certain authorization verification schemes. The namespace and track name
are binary and need to be converted to a safe form.</t>
        <t>The following format is <bcp14>RECOMMENDED</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>Each of the namespace tuples are rendered in order with a hyphen (-)
between them followed by the track name with a double hyphen (--)
between the last namespace and track name.</t>
          </li>
          <li>
            <t>Bytes in the range a-z, A-Z, 0-9 as well as _ (0x5f) are output verbatim,
while all other bytes are encoded as a period (.) symbol followed by
exactly two lowercase hexadecimal digits.</t>
          </li>
        </ul>
        <t>This format allows many common names to be rendered in an easily human readable
form while still supporting binary values.  Note that while the character set
is chosen to be generally both filename and URL safe, filename safety is
platform specific; for instance, on case-insensitive filesystems, track names
can collide.</t>
        <t>Because this format produces exactly one rendering of any given binary value, it
is bijective: every valid serialized name maps to exactly one binary value, so
serialized names can be compared without deserializing them. To maintain this
property, an implementation parsing this format <bcp14>MUST</bcp14> reject a name that does
not follow the encoding rules exactly, including a period not followed by
exactly two lowercase hexadecimal digits, or a byte that could have been
represented literally but was hex-encoded.  For example, <tt>.61</tt> is invalid
because <tt>a</tt> is represented as the literal character <tt>a</tt>. How an invalid name is
handled is application-defined.</t>
        <t>Example:</t>
        <artwork><![CDATA[
example.2enet-team2-project_x--report
  Namespace tuples: (example.net, team2, project_x)
  Track name: report
]]></artwork>
      </section>
      <section anchor="auth-token-compression">
        <name>Authorization Token Compression</name>
        <t>Authorization tokens are carried in the AUTHORIZATION TOKEN message parameter
(see <xref target="authorization-token"/>) and the AUTHORIZATION TOKEN Setup Option (see
<xref target="setup-auth-token"/>).  Both use the wire format and semantics defined in this
section.</t>
        <t>The value is a Token structure containing an optional Session-specific
Alias. The Alias allows the sender to reference a previously transmitted Token
Type and Token Value in future messages. The Token structure is serialized as
follows:</t>
        <figure anchor="moq-token">
          <name>Token structure</name>
          <artwork><![CDATA[
Token {
  Alias Type (vi64),
  [Token Alias (vi64),]
  [Token Type (vi64),]
  [Token Value (..)]
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Alias Type - an integer defining both the serialization and the processing
behavior of the receiver. This Alias type has the following code points:</t>
          </li>
        </ul>
        <dl>
          <dt>DELETE (0x0):</dt>
          <dd>
            <t>There is an Alias but no Type or Value. This Alias and the Token Value it was
previously associated with <bcp14>MUST</bcp14> be retired. Retiring removes them from the pool
of actively registered tokens.</t>
          </dd>
          <dt>REGISTER (0x1):</dt>
          <dd>
            <t>There is an Alias, a Type and a Value. This Alias <bcp14>MUST</bcp14> be associated with the
Token Value for the duration of the Session or it is deleted. This action is
termed "registering" the Token.</t>
          </dd>
          <dt>USE_ALIAS (0x2):</dt>
          <dd>
            <t>There is an Alias but no Type or Value. Use the Token Type and Value
previously registered with this Alias.</t>
          </dd>
          <dt>USE_VALUE (0x3):</dt>
          <dd>
            <t>There is no Alias and there is a Type and Value. Use the Token Value as
provided. The Token Value <bcp14>MAY</bcp14> be discarded after processing.</t>
          </dd>
        </dl>
        <ul spacing="normal">
          <li>
            <t>Token Alias - a Session-specific integer identifier that references a Token
Type and Token Value. There are separate Alias spaces for the client and server (e.g.: they
can each register Alias=1). Once a Token Alias has been registered, it cannot
be re-registered by the same endpoint in the Session without first being
deleted. Use of the Token Alias is optional.</t>
          </li>
          <li>
            <t>Token Type - a numeric identifier for the type of Token payload being
transmitted. This type is defined by the IANA table "MOQT Auth Token Type" (see
<xref target="iana"/>). Type 0 is reserved to indicate that the type is not defined in the
table and is negotiated out-of-band between client and receiver.</t>
          </li>
          <li>
            <t>Token Value - the payload of the Token. The contents and serialization of this
payload are defined by the Token Type.</t>
          </li>
        </ul>
        <t>If the Token structure cannot be decoded, including an unknown Alias Type, the
receiver <bcp14>MUST</bcp14> close the Session with <tt>MALFORMED_AUTH_TOKEN</tt>.  The receiver of
a message attempting to
register an Alias which is already registered <bcp14>MUST</bcp14> close the Session with
<tt>DUPLICATE_AUTH_TOKEN_ALIAS</tt>. The receiver of a message referencing an Alias
that is not currently registered <bcp14>MUST</bcp14> reject the message with
<tt>UNKNOWN_AUTH_TOKEN_ALIAS</tt>.</t>
        <t>The receiver of a message containing a well-formed Token structure that is
otherwise invalid <bcp14>MUST</bcp14> reject that message with an <tt>MALFORMED_AUTH_TOKEN</tt>
error.</t>
        <t>The receiver of a message carrying an Authorization Token with Alias Type
REGISTER that does not result in a Session error <bcp14>MUST</bcp14> register the Token Alias
in the token cache, even if the message fails for other reasons, including
<tt>Unauthorized</tt>.  This allows senders to pipeline messages that refer to
previously registered tokens without potentially terminating the entire Session.
A receiver <bcp14>MAY</bcp14> store an error code (eg: <tt>UNAUTHORIZED</tt> or
<tt>MALFORMED_AUTH_TOKEN</tt>) in place of the Token Type and Token Alias if any future
message referencing the Token Alias will result in that error. However, it is
important to not store an error code for a token that might be valid in the
future or due to some other property becoming fulfilled which currently
isn't. The size of a registered cache entry includes the length of the Token
Value, regardless of whether it is stored.</t>
        <t>If a receiver detects that an authorization token has expired, it <bcp14>MUST</bcp14> retain
the registered Alias until it is deleted by the sender, though it <bcp14>MAY</bcp14> discard
other state associated with the token that is no longer needed.  Expiration does
not affect the size occupied by a token in the token cache.  Any message that
references an expired token with Alias Type USE_ALIAS fails with <tt>EXPIRED_AUTH_TOKEN</tt>.</t>
        <t>Using an Alias to refer to a previously registered Token Type and Value is for
efficiency only and has the same effect as if the Token Type and Value was
included directly.  Retiring an Alias that was previously used to authorize a
message has no retroactive effect on the original authorization, nor does it
prevent that same Token Type and Value from being re-registered.</t>
        <t>Senders of tokens <bcp14>SHOULD</bcp14> only register tokens which they intend to re-use during
the Session and <bcp14>SHOULD</bcp14> retire previously registered tokens once their utility
has passed.</t>
        <t>By registering a Token, the sender is requiring the receiver to store the Token
Alias and Token Value until they are deleted, or the Session ends. The receiver
can protect its resources by sending a Setup Option defining the
MAX_AUTH_TOKEN_CACHE_SIZE limit (see <xref target="max-auth-token-cache-size"/>) it is
willing to accept. If a registration outside of SETUP is attempted that would
cause this limit to be exceeded, the receiver <bcp14>MUST</bcp14> terminate the Session with
an <tt>AUTH_TOKEN_CACHE_OVERFLOW</tt> error.  Registrations in SETUP are handled as
described in <xref target="setup-auth-token"/>.</t>
        <t>An Authorization Token <bcp14>MAY</bcp14> be repeated within a message as long as the
combination of Token Type and Token Value are unique after resolving any
aliases.</t>
        <t>Messages carrying an Authorization Token can appear on different
control streams. Because stream processing order can be different than send order, the
receiver and sender can have inconsistent views of the token cache state.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> send USE_ALIAS on one control stream for an alias registered on a
different stream until the sender has received a response to the message
containing the REGISTER. Senders <bcp14>MAY</bcp14> use USE_ALIAS on the same control stream as the
REGISTER without waiting for a response.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> send DELETE for an alias while any message using USE_ALIAS with
that alias has not received a response.</t>
      </section>
    </section>
    <section anchor="message">
      <name>Control Messages</name>
      <t>MOQT uses a pair of unidirectional streams to exchange control messages, as
defined in <xref target="session-init"/>.  Every message on a control or request stream is
formatted as follows:</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Control Message</name>
        <artwork><![CDATA[
MOQT Control Message {
  Message Type (vi64),
  Message Length (vi64),
  Message Body (..),
}
]]></artwork>
      </figure>
      <t>The following Message Types are defined. The Stream column indicates
which stream type each message is sent on: Control indicates the
control stream (<xref target="session-init"/>), and Request indicates a bidirectional
request stream. Messages marked "First" <bcp14>MUST</bcp14> be the first message on a
new request stream.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
            <th align="left">Stream</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x01</td>
            <td align="left">RESERVED (SETUP for version 00)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">RESERVED (CLIENT_SETUP for &lt;= 10)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">RESERVED (SERVER_SETUP for &lt;= 10)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x20</td>
            <td align="left">RESERVED (CLIENT_SETUP in &lt;= 16)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x21</td>
            <td align="left">RESERVED (SERVER_SETUP in &lt;= 16)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x2F00</td>
            <td align="left">SETUP (<xref target="message-setup"/>)</td>
            <td align="left">Control</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
            <td align="left">Control, Request</td>
          </tr>
          <tr>
            <td align="right">0x3</td>
            <td align="left">SUBSCRIBE (<xref target="message-subscribe-req"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x22</td>
            <td align="left">PUBLISH_STATE_NOTIFY (<xref target="ps-notify"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x1D</td>
            <td align="left">PUBLISH (<xref target="message-publish"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x1E</td>
            <td align="left">RESERVED (PUBLISH_OK in &lt;= 17)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">PUBLISH_DONE (<xref target="message-publish-done"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x16</td>
            <td align="left">FETCH (<xref target="message-fetch"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x18</td>
            <td align="left">RESERVED (FETCH_OK in &lt;= 22)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xD</td>
            <td align="left">TRACK_STATUS (<xref target="message-track-status"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x6</td>
            <td align="left">PUBLISH_NAMESPACE (<xref target="message-pub-ns"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x50</td>
            <td align="left">SUBSCRIBE_NAMESPACE (<xref target="message-subscribe-ns"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x51</td>
            <td align="left">SUBSCRIBE_TRACKS (<xref target="message-subscribe-tracks"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x8</td>
            <td align="left">NAMESPACE (<xref target="message-namespace"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xE</td>
            <td align="left">NAMESPACE_DONE (<xref target="message-namespace-done"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xF</td>
            <td align="left">PUBLISH_SKIPPED (<xref target="message-publish-skipped"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">REQUEST_UPDATE (<xref target="message-request-update"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">REQUEST_OK (<xref target="message-request-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">REQUEST_ERROR (<xref target="message-request-error"/>)</td>
            <td align="left">Request</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session with
<tt>UNEXPECTED_MESSAGE</tt>.
Control messages have a length to simplify parsing, but no control messages
are intended to be ignored. The length is set to the number of bytes in the
Message Body, which is defined by each message type.  If the length does not
match the length of the Message Body, the receiver <bcp14>MUST</bcp14> close the session with
<tt>MALFORMED_MESSAGE</tt>.  An endpoint <bcp14>MUST NOT</bcp14> send a control message with a length
larger than the peer's MAX_CONTROL_MESSAGE_SIZE (<xref target="max-control-message-size"/>).
If an endpoint receives a control message with a length larger than its
MAX_CONTROL_MESSAGE_SIZE, it <bcp14>MUST</bcp14> close the session with
<tt>FIELD_LENGTH_EXCEEDED</tt>.</t>
      <section anchor="message-setup">
        <name>SETUP</name>
        <t>The <tt>SETUP</tt> message is the first message each endpoint sends on its control
stream (see <xref target="session-init"/>); it allows the endpoints to agree on the initial
configuration before any other control messages are exchanged. An endpoint that
is not offering extensions which modify control message semantics <bcp14>MAY</bcp14> pipeline
other control messages after SETUP without waiting for the peer's SETUP.
Endpoints <bcp14>SHOULD NOT</bcp14> send such requests (and related Objects) that offer such
extensions before receiving the peer SETUP.</t>
        <t>The messages contain a sequence of key-value pairs called Setup Options; the
semantics and format of which can vary based on whether the client or server is
sending.  To ensure future extensibility of MOQT, endpoints <bcp14>MUST</bcp14> ignore unknown
Setup Options.</t>
        <t>The wire format of the Setup message is as follows:</t>
        <figure anchor="moq-transport-setup-format">
          <name>MOQT SETUP Message</name>
          <artwork><![CDATA[
SETUP Message {
  Type (vi64) = 0x2F00,
  Length (vi64),
  Setup Options (..) ...,
}
]]></artwork>
        </figure>
        <t>Setup Options are serialized as Key-Value-Pairs <xref target="moq-key-value-pair"/>,
spanning the entire message payload, bounded by the message Length field.
Setup Options use a namespace that is constant across all MOQT versions,
separate from Message Parameters.  Receivers <bcp14>MUST</bcp14> ignore unrecognized Setup
Options.  Senders <bcp14>MUST NOT</bcp14> repeat the same Option Type in a message unless
the option definition explicitly allows multiple instances. Receivers <bcp14>MUST</bcp14>
allow duplicates of unknown Setup Options.</t>
        <t>Setup Options are also the mechanism by which endpoints declare support for
MOQT extensions; see <xref target="extension-negotiation"/>.</t>
        <t>The available Setup Options are detailed in the next sections.</t>
        <section anchor="authority">
          <name>AUTHORITY</name>
          <t>The AUTHORITY option (Option Type 0x05) allows the client to specify the
authority component of the MoQ URI when using native QUIC (<xref target="native-quic"/>).  It <bcp14>MUST
NOT</bcp14> be used by the server, or when WebTransport is used.  When an AUTHORITY
option is received from a server, or when an AUTHORITY option is received
while WebTransport is used, or when an AUTHORITY option is received by a
server but the server does not support the specified authority, the session <bcp14>MUST</bcp14>
be closed with <tt>INVALID_AUTHORITY</tt>.</t>
          <t>The AUTHORITY option follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the AUTHORITY option to the <tt>authority</tt> portion of the
URI. If an AUTHORITY option does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with <tt>MALFORMED_AUTHORITY</tt>.</t>
        </section>
        <section anchor="path">
          <name>PATH</name>
          <t>The PATH option (Option Type 0x01) allows the client to specify the path
of the MoQ URI when using native QUIC (<xref target="native-quic"/>).  It <bcp14>MUST NOT</bcp14> be used by
the server, or when WebTransport is used.  When a PATH setup option is received
from a server, or when a PATH parameter is received while WebTransport is used,
or when a PATH parameter is received by a server but the server does not
support the specified path, the session <bcp14>MUST</bcp14> be closed with <tt>INVALID_PATH</tt>.</t>
          <t>The PATH option follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the PATH option to the <tt>path-abempty</tt> portion of the
URI; if <tt>query</tt> is present, the client <bcp14>MUST</bcp14> concatenate <tt>?</tt>, followed by
the <tt>query</tt> portion of the URI to the option. If a PATH does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with <tt>MALFORMED_PATH</tt>.</t>
        </section>
        <section anchor="max-auth-token-cache-size">
          <name>MAX_AUTH_TOKEN_CACHE_SIZE</name>
          <t>The MAX_AUTH_TOKEN_CACHE_SIZE option (Option Type 0x04) communicates the
maximum size in bytes of all actively registered Authorization tokens that the
endpoint is willing to store per Session. This option is optional. The default
value is 0 which prohibits the use of token Aliases.</t>
          <t>The token size is calculated as 16 bytes + the size of the Token Value field
(see <xref target="moq-token"/>). The total size as restricted by the
MAX_AUTH_TOKEN_CACHE_SIZE option is calculated as the sum of the token sizes
for all registered tokens (Alias Type value of 0x01) minus the sum of the token
sizes for all deregistered tokens (Alias Type value of 0x00), since Session
initiation.</t>
        </section>
        <section anchor="setup-auth-token">
          <name>AUTHORIZATION TOKEN</name>
          <t>The AUTHORIZATION TOKEN Setup Option (Option Type 0x03) is functionally
equivalent to the AUTHORIZATION TOKEN message parameter, see <xref target="authorization-token"/>.
The endpoint can specify one or more tokens in SETUP
that the peer can use to authorize MOQT session establishment.</t>
          <t>The option value is a Token structure, whose wire format and semantics are
defined in <xref target="auth-token-compression"/>.</t>
          <t>If a server receives Alias Type DELETE (0x0) or USE_ALIAS (0x2) in a SETUP
message, it <bcp14>MUST</bcp14> close the session with <tt>ROLE_VIOLATION</tt>.</t>
          <t>If an endpoint receives an AUTHORIZATION TOKEN option in SETUP with Alias
Type REGISTER that exceeds its MAX_AUTH_TOKEN_CACHE_SIZE, it <bcp14>MUST NOT</bcp14> fail
the session with <tt>AUTH_TOKEN_CACHE_OVERFLOW</tt>.  Instead, it <bcp14>MUST</bcp14> treat the
option as Alias Type USE_VALUE.  Since each endpoint's SETUP may be sent before
the peer's SETUP is received, the sender <bcp14>MUST</bcp14> handle registration failures
of this kind by purging any Token Aliases that failed to register based on the
peer's MAX_AUTH_TOKEN_CACHE_SIZE option in SETUP (or the default value of 0).</t>
        </section>
        <section anchor="moqt-implementation">
          <name>MOQT IMPLEMENTATION</name>
          <t>The MOQT_IMPLEMENTATION option (Option Type 0x07) identifies the name and
version of the sender's MOQT implementation.  This <bcp14>SHOULD</bcp14> be a UTF-8 encoded
string <xref target="RFC3629"/>, though the message does not carry information, such as
language tags, that would aid comprehension by any entity other than the one
that created the text.</t>
          <t>An endpoint <bcp14>SHOULD</bcp14> send a MOQT_IMPLEMENTATION option unless specifically
configured not to do so. This option helps identify the scope of interoperability
problems and work around implementation-specific limitations.</t>
          <t>Senders <bcp14>SHOULD</bcp14> limit the value to the implementation name and version, avoiding
advertising or other nonessential information. Implementations <bcp14>SHOULD NOT</bcp14> use
the identifiers of other implementations to declare compatibility, as this
undermines the usefulness of implementation identification for debugging.</t>
        </section>
        <section anchor="max-filter-ranges">
          <name>MAX FILTER RANGES</name>
          <t>The MAX_FILTER_RANGES option (Type 0x06) limits the peer's total number of Ranges
(Start/End pairs) allowed concurrently in all Range filter <xref target="range-filters"/>
parameters for a given subscription or fetch.  The default value is 0, so if not
specified, the peer <bcp14>MUST NOT</bcp14> send any such filter parameters.  If this limit is
exceeded, an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR with error code INVALID_FILTER.</t>
        </section>
        <section anchor="max-request-updates">
          <name>MAX_REQUEST_UPDATES</name>
          <t>The MAX_REQUEST_UPDATES option (Option Type 0x08) communicates the maximum
number of unacknowledged REQUEST_UPDATE messages per request stream that
the endpoint is willing to receive.</t>
          <t>A REQUEST_UPDATE is considered outstanding from when it is sent until the
sender receives the corresponding REQUEST_OK or REQUEST_ERROR response.
The sender <bcp14>MUST NOT</bcp14> have more than MAX_REQUEST_UPDATES outstanding
REQUEST_UPDATEs on any single request stream at a time. Each REQUEST_OK
or REQUEST_ERROR response restores one credit on that stream. An
implementation that processes and responds to a REQUEST_UPDATE immediately
might not detect when a peer has pipelined messages exceeding its limit;
coalescing REQUEST_UPDATE processing (see <xref target="message-request-update"/>) can be
more effective at enforcing MAX_REQUEST_UPDATES.</t>
          <t>The value is encoded as a variable-length integer. A value of 0 means the
endpoint does not limit REQUEST_UPDATE concurrency. If not present, the default
value is 0.</t>
          <t>If an endpoint receives a REQUEST_UPDATE on a stream that already has
MAX_REQUEST_UPDATES outstanding REQUEST_UPDATEs, it <bcp14>MUST</bcp14> close the session
with <tt>TOO_MANY_REQUEST_UPDATES</tt>.</t>
        </section>
        <section anchor="max-control-message-size">
          <name>MAX_CONTROL_MESSAGE_SIZE</name>
          <t>The MAX_CONTROL_MESSAGE_SIZE option (Option Type 0x09) communicates the maximum
length, in bytes, of a control message the endpoint is willing to receive (see
<xref target="message"/>).  The value is encoded as a variable-length integer and <bcp14>MUST</bcp14> be at
least 65535.  If not present, the default value is 65535.  Until an endpoint
receives the peer's SETUP, it uses the default value, including for SETUP
itself.</t>
        </section>
      </section>
      <section anchor="message-goaway">
        <name>GOAWAY</name>
        <t>An endpoint sends a <tt>GOAWAY</tt> message on its control stream to inform the peer
it intends to close the session soon.  When sent by a server, it can initiate
session migration (<xref target="session-migration"/>) with an optional URI.  A client <bcp14>MUST</bcp14>
send a zero-length New Session URI in any GOAWAY, as clients cannot instruct
servers to initiate connections.</t>
        <t>A <tt>GOAWAY</tt> <bcp14>MAY</bcp14> also be sent on a request stream to initiate migration of that
individual request.  Only the receiver of a request can send GOAWAY on its
request stream.  If the receiver of a request receives a GOAWAY on that request
stream, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.  Upon receiving a
GOAWAY on a request stream, the sender of the request <bcp14>SHOULD</bcp14> re-issue that
specific request on a session at the specified URI (or the current session if no
URI is provided), and close the old request stream using the appropriate
mechanism (e.g. FIN, stream reset, or PUBLISH_DONE).  This allows, for example,
moving the publishers and subscribers of a set of tracks to a common relay
without draining their entire session.</t>
        <t>The GOAWAY message does not impact subscription state. A subscriber
<bcp14>SHOULD</bcp14> individually unsubscribe from each existing subscription, while a
publisher <bcp14>MAY</bcp14> reject new requests after sending a GOAWAY.</t>
        <t>Upon receiving a GOAWAY on the control stream, an endpoint <bcp14>SHOULD NOT</bcp14> initiate new requests to the
peer including SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS and TRACK_STATUS.</t>
        <t>Sending a GOAWAY does not prevent the sender from initiating new requests,
though the sender <bcp14>SHOULD</bcp14> avoid initiating requests unless required by migration
(see (<xref target="graceful-subscriber-switchover"/> and <xref target="graceful-publisher-switchover"/>).
An endpoint that receives a GOAWAY <bcp14>MAY</bcp14> reject new requests with an appropriate
error code (e.g., REQUEST_ERROR with error code GOING_AWAY).</t>
        <t>The endpoint <bcp14>MUST</bcp14> close the session with <tt>UNEXPECTED_MESSAGE</tt>
(<xref target="session-termination-codes"/>) if it receives more than one GOAWAY on the
control stream or on a single request stream.</t>
        <figure anchor="moq-transport-goaway-format">
          <name>MOQT GOAWAY Message</name>
          <artwork><![CDATA[
GOAWAY Message {
  Type (vi64) = 0x10,
  Length (vi64),
  New Session URI Length (vi64),
  New Session URI (..),
  Timeout (vi64),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>New Session URI: When received by a client, indicates where the client can
connect to continue this session or re-issue this request.  The client <bcp14>MUST</bcp14>
use this URI for the new session if provided. If the URI is zero bytes long,
the current URI is reused instead. The new session URI <bcp14>SHOULD</bcp14> use the same scheme
as the current URI to ensure compatibility.  The maximum length of the New
Session URI is 8,192 bytes.  If an endpoint receives a length exceeding the
maximum, it <bcp14>MUST</bcp14> close the session with <tt>FIELD_LENGTH_EXCEEDED</tt>.  </t>
            <t>
If a server receives a GOAWAY with a non-zero New Session URI Length it <bcp14>MUST</bcp14>
close the session with <tt>ROLE_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Timeout: The time in milliseconds the sender will wait for graceful closure.
When sent on the control stream, the sender closes the session with
<tt>GOAWAY_TIMEOUT</tt> after the indicated timeout if there are still open requests.
When sent on a request stream, the sender <bcp14>SHOULD</bcp14> reset the stream with
<tt>GOING_AWAY</tt> after the indicated timeout.  A value of 0 indicates the sender has no
specific timeout, but the recipient <bcp14>SHOULD</bcp14> migrate as quickly as
possible. This is a hint; the sender of the GOAWAY <bcp14>MAY</bcp14> close the session or
reset the request stream before the indicated timeout has elapsed.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-ok">
        <name>REQUEST_OK</name>
        <t>The REQUEST_OK message is sent in response to PUBLISH, FETCH, REQUEST_UPDATE,
TRACK_STATUS, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS and PUBLISH_NAMESPACE
requests.</t>
        <figure anchor="moq-transport-request-ok">
          <name>MOQT REQUEST_OK Message</name>
          <artwork><![CDATA[
REQUEST_OK Message {
  Type (vi64) = 0x7,
  Length (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.  The
parameters that can appear depend on the request being answered:  </t>
            <ul spacing="normal">
              <li>
                <t>PUBLISH_OK: EXPIRES</t>
              </li>
              <li>
                <t>FETCH_OK: EXPIRES, LARGEST_OBJECT</t>
              </li>
              <li>
                <t>REQUEST_UPDATE_OK: EXPIRES, LARGEST_OBJECT</t>
              </li>
              <li>
                <t>TRACK_STATUS_OK: EXPIRES, LARGEST_OBJECT</t>
              </li>
              <li>
                <t>SUBSCRIBE_NAMESPACE_OK: EXPIRES</t>
              </li>
              <li>
                <t>SUBSCRIBE_TRACKS_OK: EXPIRES</t>
              </li>
              <li>
                <t>PUBLISH_NAMESPACE_OK: EXPIRES</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>. The
length of Track Properties is the remaining length of the message
after parsing all previous fields. Track Properties are populated in
TRACK_STATUS_OK and FETCH_OK; they are empty in PUBLISH_OK,
REQUEST_UPDATE_OK, SUBSCRIBE_NAMESPACE_OK and PUBLISH_NAMESPACE_OK.  If an
endpoint
receives Track Properties in one of these messages it <bcp14>MUST</bcp14> close the
session with <tt>INVALID_FIELD</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-error">
        <name>REQUEST_ERROR</name>
        <t>The REQUEST_ERROR message is sent in response to any request (SUBSCRIBE, FETCH,
PUBLISH, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS, PUBLISH_NAMESPACE, TRACK_STATUS,
REQUEST_UPDATE).</t>
        <section anchor="requesterror-message-format">
          <name>REQUEST_ERROR Message Format</name>
          <figure anchor="moq-transport-request-error">
            <name>MOQT REQUEST_ERROR Message</name>
            <artwork><![CDATA[
REQUEST_ERROR Message {
  Type (vi64) = 0x5,
  Length (vi64),
  Error Code (vi64),
  Retry Interval (vi64),
  Error Reason (Reason Phrase),
  Error Details (..) ...,
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Error Code: Identifies an integer error code for request failure.</t>
            </li>
            <li>
              <t>Retry Interval: The minimum time (in milliseconds) before the request <bcp14>SHOULD</bcp14> be
sent again, plus one. If the value is 0, the request <bcp14>SHOULD NOT</bcp14> be retried.</t>
            </li>
            <li>
              <t>Error Reason: Provides a text description of the request error. See
 <xref target="reason-phrase"/>.</t>
            </li>
            <li>
              <t>Error Details: Structured information about the error, serialized as
Key-Value-Pairs (<xref target="moq-key-value-pair"/>) spanning the remainder of the
message, bounded by the message Length field.  See <xref target="error-details"/>.</t>
            </li>
          </ul>
          <t>If a request is retryable with the same parameters at a later time, the sender
of REQUEST_ERROR includes a non-zero Retry Interval in the message. To minimize
the risk of synchronized retry storms, the sender can apply randomization to
each retry interval so that retries are spread out over time.  A Retry Interval
value of 1 indicates the request can be retried immediately.</t>
          <t>The error codes used in REQUEST_ERROR are defined in <xref target="request-error-codes"/>.</t>
        </section>
        <section anchor="error-details">
          <name>Error Details</name>
          <t>Error Details carry structured information that helps the requester act on a
REQUEST_ERROR.  Each Error Detail type specifies which Error Codes it can
accompany.  Error Detail types are registered in the "MOQT Error Detail Types"
registry (<xref target="iana-error-details"/>).</t>
          <t>Receivers <bcp14>MUST</bcp14> ignore unknown Error Detail types, and <bcp14>MUST</bcp14> ignore a known
Error Detail type that accompanies an Error Code it is not defined for.
Senders <bcp14>MUST NOT</bcp14> repeat the same Error Detail type in a message unless the
type's definition explicitly allows multiple instances.  Receivers <bcp14>MUST</bcp14> allow
duplicates of unknown Error Detail types.</t>
          <t>Error Details describe the request error in the Session where the error
occurred.  A Relay that propagates an upstream error downstream decides for each
Error Detail whether it also applies to the downstream request.</t>
          <section anchor="error-detail-redirect">
            <name>REDIRECT</name>
            <t>The REDIRECT Error Detail directs the requester to retry a request at a
different URI and/or for a different Full Track Name.  It accompanies Error
Code <tt>REDIRECT</tt> and <bcp14>MUST</bcp14> be present when the Error Code is <tt>REDIRECT</tt>.  An
endpoint that receives a REQUEST_ERROR with Error Code <tt>REDIRECT</tt> and no
REDIRECT Error Detail <bcp14>MUST</bcp14> close the session with <tt>MALFORMED_MESSAGE</tt>.</t>
            <artwork><![CDATA[
REDIRECT Error Detail {
  Type (vi64) = 0x01,
  Length (vi64),
  Connect URI Length (vi64),
  Connect URI (..),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
}
]]></artwork>
            <ul spacing="normal">
              <li>
                <t>Connect URI: The URI to connect to for the redirected request. If the length is
zero, the requester <bcp14>SHOULD</bcp14> use the current session's URI. If a server
receives a Redirect with a non-zero Connect URI Length it <bcp14>MUST</bcp14> close the
session with <tt>ROLE_VIOLATION</tt>.</t>
              </li>
              <li>
                <t>Track Namespace and Track Name: The Track Namespace and Track Name to use
for the redirected request, together referred to as the Redirect target.  </t>
                <t>
Track Name is not meaningful for namespace-scoped requests
(SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, SUBSCRIBE_TRACKS) and <bcp14>MUST</bcp14> be empty;
an endpoint that receives a non-empty Track Name in a Redirect for a
namespace-scoped request <bcp14>MUST</bcp14> close the session with <tt>INVALID_FIELD</tt>.</t>
              </li>
            </ul>
          </section>
          <section anchor="error-detail-unsupported-property">
            <name>UNSUPPORTED_PROPERTY</name>
            <t>The UNSUPPORTED_PROPERTY Error Detail (Type 0x02) contains the Property Type
(vi64) of a Mandatory Track Property (<xref target="mandatory-track-properties"/>) that the
sender does not understand.  It accompanies Error Code <tt>UNSUPPORTED_EXTENSION</tt>.
A sender that rejects a request with <tt>UNSUPPORTED_EXTENSION</tt> <bcp14>SHOULD</bcp14> include
one UNSUPPORTED_PROPERTY Error Detail for each Mandatory Track Property it does
not understand.  Multiple instances of this type are allowed.  A Relay that
propagates <tt>UNSUPPORTED_EXTENSION</tt> downstream <bcp14>SHOULD</bcp14> include the
UNSUPPORTED_PROPERTY Error Details it received.</t>
          </section>
        </section>
      </section>
      <section anchor="message-request-update">
        <name>REQUEST_UPDATE</name>
        <t>The sender of a request (SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS) can later send a REQUEST_UPDATE on the
same bidi stream as the request to modify it.  A subscriber can also send
REQUEST_UPDATE to modify parameters of a subscription established with PUBLISH.</t>
        <t>An endpoint that receives a REQUEST_UPDATE other than in the two cases above
<bcp14>MUST</bcp14> close the session with <tt>UNEXPECTED_MESSAGE</tt>.</t>
        <t>A receiver of multiple REQUEST_UPDATE messages on the same stream <bcp14>MAY</bcp14>
coalesce their processing by applying only the cumulative result.
Parameter values from later REQUEST_UPDATE messages override values
from earlier ones. The receiver <bcp14>MUST</bcp14> still send a REQUEST_UPDATE_OK for
each successful update, but it is not required to process
intermediate states individually. If the coalesced REQUEST_UPDATE
results in an error, only a single REQUEST_UPDATE_ERROR will be
sent and the sender of the REQUEST_UPDATEs will not always be
able to determine which caused an error.  A receiver <bcp14>MUST NOT</bcp14> coalesce a
REQUEST_UPDATE containing a parameter whose definition prohibits coalescing.</t>
        <t>REQUEST_UPDATE messages <bcp14>MUST</bcp14> be processed in order to guarantee
consistent behavior. The receiver of a REQUEST_UPDATE <bcp14>MUST</bcp14> respond with
exactly one REQUEST_UPDATE_OK or REQUEST_UPDATE_ERROR message indicating if
the update was successful, unless it is coalescing failed updates to produce
just one REQUEST_UPDATE_ERROR for multiple REQUEST_UPDATE messages.
Because REQUEST_UPDATE and REQUEST_UPDATE_OKs are sent on a single
in-order stream and REQUEST_UPDATE_OK does not contain a Request ID,
REQUEST_UPDATE_OKs <bcp14>MUST</bcp14> be returned in the order the REQUEST_UPDATEs
were received.</t>
        <t>The number of outstanding REQUEST_UPDATEs on a single request stream is
limited by the MAX_REQUEST_UPDATES Setup Option (<xref target="max-request-updates"/>).</t>
        <t>If a parameter previously set on the request is not present in
<tt>REQUEST_UPDATE</tt>, its value remains unchanged.</t>
        <t>There is no generic mechanism to remove a parameter from a request.</t>
        <t>The format of REQUEST_UPDATE is as follows:</t>
        <figure anchor="moq-transport-request-update-format">
          <name>MOQT REQUEST_UPDATE Message</name>
          <artwork><![CDATA[
REQUEST_UPDATE Message {
  Type (vi64) = 0x2,
  Length (vi64),
  Request ID (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.  The
parameters that can appear depend on the request being updated:  </t>
            <ul spacing="normal">
              <li>
                <t>Subscription: OBJECT_DELIVERY_TIMEOUT, AUTHORIZATION_TOKEN,
SUBGROUP_DELIVERY_TIMEOUT, PAUSED, SUBSCRIBER_PRIORITY, LOCATION_FILTER,
FILL_PARAMETERS, SUBGROUP_FILTER, OBJECTID_FILTER, PRIORITY_FILTER,
OBJECT_PROPERTY_FILTER, NEW_GROUP_REQUEST</t>
              </li>
              <li>
                <t>FETCH: AUTHORIZATION_TOKEN, SUBSCRIBER_PRIORITY</t>
              </li>
              <li>
                <t>PUBLISH_NAMESPACE: AUTHORIZATION_TOKEN</t>
              </li>
              <li>
                <t>SUBSCRIBE_NAMESPACE: AUTHORIZATION_TOKEN, TRACK_NAMESPACE_PREFIX</t>
              </li>
              <li>
                <t>SUBSCRIBE_TRACKS: AUTHORIZATION_TOKEN, PAUSED, TRACK_PROPERTY_FILTER,
TRACK_NAMESPACE_PREFIX</t>
              </li>
            </ul>
            <t>
Range Filters are only allowed from the subscriber (see <xref target="range-filters"/>).</t>
          </li>
        </ul>
        <section anchor="updating-subscriptions">
          <name>Updating Subscriptions</name>
          <t>When a subscriber decreases the Start Location of the Location Filter
(see <xref target="location-filters"/>), the Start Location can be smaller than the Track's
Largest Object, similar to a new Subscription. Including FILL_PARAMETERS
(see <xref target="fill-parameters"/>) in the REQUEST_UPDATE causes the publisher to deliver
the new fill range by opening a new fill fetch stream (see
<xref target="fill-semantics"/>).  FETCH can also be used to retrieve any necessary Objects
with Locations less than or equal to the current Largest Object.</t>
          <t>When a subscriber increases the End Location, the Largest Object at
the publisher might already be larger than the previous End Location. This will
create a gap in the subscription. The REQUEST_UPDATE_OK will include the
LARGEST_OBJECT parameter, and the subscriber
can issue a FETCH to retrieve the omitted Objects, if any.</t>
          <t>When a subscriber narrows their subscription (increase the Start Location and/or
decrease the End Group), it might still receive Objects outside the
new range if the publisher sent them before the update was processed.</t>
          <t>When a REQUEST_UPDATE is unsuccessful, the publisher <bcp14>MUST</bcp14> also terminate
the subscription by sending a
PUBLISH_DONE with error code <tt>UPDATE_FAILED</tt>. When a REQUEST_UPDATE fails for
a FETCH, the publisher <bcp14>MUST</bcp14> reset the FETCH data stream. When a REQUEST_UPDATE
fails for a SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS or PUBLISH_NAMESPACE, the
responder <bcp14>MUST</bcp14> close the bidi stream (see <xref target="graceful-request-closure"/>).</t>
        </section>
        <section anchor="updating-namespace-subscriptions">
          <name>Updating Namespace Subscriptions</name>
          <t>A subscriber can update the Track Namespace Prefix of an established
SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS by including the
TRACK_NAMESPACE_PREFIX parameter (<xref target="track-namespace-prefix-param"/>) in a
REQUEST_UPDATE.  If the update is accepted, NAMESPACE and NAMESPACE_DONE
messages following the REQUEST_OK will contain Track Namespace suffixes
relative to the updated prefix.  For a SUBSCRIBE_NAMESPACE, the REQUEST_OK
implies a NAMESPACE_DONE for each advertised namespace that no longer matches
the prefix.  Updating the prefix of a SUBSCRIBE_TRACKS has
no effect on existing subscriptions, and the publisher <bcp14>MUST NOT</bcp14> send another
PUBLISH for a Track it already published for that SUBSCRIBE_TRACKS.  If the
subscriber is no longer interested in a Track it can cancel the corresponding
bidirectional stream.</t>
        </section>
      </section>
      <section anchor="message-subscribe-req">
        <name>SUBSCRIBE</name>
        <t>SUBSCRIBE initiates a subscription to a track.  The associated parameters
determine the range and mechanism of object delivery; the Location Filter
(see <xref target="location-filters"/>) selects which Objects are sent, and a
FILL_PARAMETERS parameter (see <xref target="fill-parameters"/>) additionally retrieves the
fill range on a fill fetch stream (see <xref target="fill-semantics"/>).</t>
        <t>The format of SUBSCRIBE is as follows:</t>
        <figure anchor="moq-transport-subscribe-format">
          <name>MOQT SUBSCRIBE Message</name>
          <artwork><![CDATA[
SUBSCRIBE Message {
  Type (vi64) = 0x3,
  Length (vi64),
  Request ID (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-namespace-structure"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.  The parameters
that can appear in a SUBSCRIBE are OBJECT_DELIVERY_TIMEOUT,
AUTHORIZATION_TOKEN, RENDEZVOUS_TIMEOUT, SUBGROUP_DELIVERY_TIMEOUT, PAUSED,
SUBSCRIBER_PRIORITY, LOCATION_FILTER, GROUP_ORDER, FILL_PARAMETERS,
SUBGROUP_FILTER, OBJECTID_FILTER, PRIORITY_FILTER, OBJECT_PROPERTY_FILTER,
NEW_GROUP_REQUEST and INCLUDE_PROPERTIES.</t>
          </li>
        </ul>
        <t>On successful subscription, the publisher <bcp14>MUST</bcp14> reply with a SUBSCRIBE_OK,
allowing the subscriber to determine the start group/object when not explicitly
specified, and start sending objects.</t>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A publisher sends a SUBSCRIBE_OK as the first response message on the
bidi stream for successful subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK Message {
  Type (vi64) = 0x4,
  Length (vi64),
  Track Alias (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.  The parameters
that can appear in a SUBSCRIBE_OK are EXPIRES and LARGEST_OBJECT.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-publish">
        <name>PUBLISH</name>
        <t>The publisher sends PUBLISH as the first message on a new bidirectional stream
to initiate a subscription for a Track. The receiver verifies the publisher is
authorized to publish this track.</t>
        <figure anchor="moq-transport-publish-format">
          <name>MOQT PUBLISH Message</name>
          <artwork><![CDATA[
PUBLISH Message {
  Type (vi64) = 0x1D,
  Length (vi64),
  Request ID (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Track Alias (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-namespace-structure"/>)</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>. The parameters
that can appear in a PUBLISH are OBJECT_DELIVERY_TIMEOUT,
AUTHORIZATION_TOKEN, SUBGROUP_DELIVERY_TIMEOUT, EXPIRES, LARGEST_OBJECT,
PAUSED, SUBSCRIBER_PRIORITY, LOCATION_FILTER, GROUP_ORDER, FILL_PARAMETERS
and SUBSCRIBE_TRACKS_ID.  Those governing delivery, such as PAUSED,
GROUP_ORDER, SUBSCRIBER_PRIORITY,
SUBGROUP_DELIVERY_TIMEOUT, OBJECT_DELIVERY_TIMEOUT and LOCATION_FILTER,
inform the Subscriber of the initial Subscription parameters.
If the PUBLISH is the result of a SUBSCRIBE_TRACKS, the parameters are handled
as described in <xref target="parameters-on-subscribe-tracks"/>, otherwise, they represent
the publisher's initial settings for the subscription, which the subscriber can
change.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
        <t>A subscriber receiving a PUBLISH for a Track it does not wish to receive <bcp14>SHOULD</bcp14>
send PUBLISH_ERROR with error code <tt>UNINTERESTED</tt>, and abandon reading any
publisher initiated streams associated with that subscription using a
STOP_SENDING frame.</t>
        <t>A publisher that pauses the subscription (see <xref target="pausing-subscriptions"/>)
indicates that it will not transmit any objects until the subscriber resumes
it. If the subscription is not paused, the
publisher will start transmitting objects immediately, possibly before
PUBLISH_OK. Delivery starts at the Next Object relative to the Largest Object
at the time the publisher begins sending.</t>
      </section>
      <section anchor="message-publish-done">
        <name>PUBLISH_DONE</name>
        <t>A publisher sends a <tt>PUBLISH_DONE</tt> message as the final message before
closing the subscription's bidi stream to indicate it is done publishing Objects
for that subscription.  The Status Code indicates why the subscription
ended, and whether it was an error. Because PUBLISH_DONE is sent on a request
stream, it is likely to arrive at the receiver before late-arriving objects, and
often even late-opening streams. However, the receiver uses it as an indication
that it should receive any late-opening streams in a relatively short time.</t>
        <t>Note that some objects in the subscribed track might never be delivered,
because a stream was reset, or never opened in the first place, due to the
delivery timeouts (see <xref target="delivery-timeouts"/>).</t>
        <t>A sender <bcp14>MUST NOT</bcp14> send PUBLISH_DONE until it has closed all streams it will ever
open, and has no further datagrams to send, for a subscription. After sending
PUBLISH_DONE, the sender can immediately destroy subscription state, although
stream state can persist until delivery completes. The sender might persist
subscription state to enforce the subgroup delivery timeout.</t>
        <t>A sender <bcp14>MUST NOT</bcp14> destroy subscription state until it sends PUBLISH_DONE, though
it can choose to stop sending objects (and thus send PUBLISH_DONE) for any
reason.</t>
        <t>A subscriber that receives PUBLISH_DONE <bcp14>SHOULD</bcp14> set a timer of at least the
larger of SUBGROUP_DELIVERY_TIMEOUT or OBJECT_DELIVERY_TIMEOUT in case some
objects are still inbound due to prioritization or packet loss. The subscriber
<bcp14>MAY</bcp14> dispense with a timer if it unsubscribed or is otherwise no longer
interested in objects from the track. Once the timer has expired, the receiver
destroys subscription state once all open streams for the subscription have
closed. A subscriber <bcp14>MAY</bcp14> discard subscription state earlier, at the cost of
potentially not delivering some late objects to the application.  The
subscriber <bcp14>SHOULD</bcp14> send STOP_SENDING on all streams related to the subscription
when it deletes subscription state.</t>
        <t>A publisher that ends a subscription because the authorization token that
authorized it has expired <bcp14>SHOULD</bcp14> send PUBLISH_DONE with status code
<tt>EXPIRED_AUTH_TOKEN</tt>.</t>
        <t>The format of <tt>PUBLISH_DONE</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-fin-format">
          <name>MOQT PUBLISH_DONE Message</name>
          <artwork><![CDATA[
PUBLISH_DONE Message {
  Type (vi64) = 0xB,
  Length (vi64),
  Status Code (vi64),
  Stream Count (vi64),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Status Code: An integer status code indicating why the subscription ended.</t>
          </li>
          <li>
            <t>Stream Count: An integer indicating the number of data streams the publisher
opened for this subscription, including streams that contained no Objects (e.g.,
an empty Subgroup) and including any fill fetch streams (see
<xref target="fill-semantics"/>).  This helps the subscriber know if it has received
all of the data published in this subscription by comparing the number of
streams received.  The subscriber can immediately remove all subscription state
once the same number of streams have been processed.  If the publisher did not open any streams
for this subscription, the publisher <bcp14>MUST</bcp14> set Stream Count to 0.  If
the publisher is unable to set Stream Count to the exact number of streams
opened for the subscription, it <bcp14>MUST</bcp14> set Stream Count to 2^64 - 1. Subscribers
<bcp14>SHOULD</bcp14> use a timeout or other mechanism to remove subscription state in case
the publisher set an incorrect value, reset a stream before the SUBGROUP_HEADER,
or set the maximum value.  If a subscriber receives more streams for a
subscription than specified in Stream Count, it <bcp14>MAY</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for subscription error. See <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The status codes used in PUBLISH_DONE are defined in <xref target="publish-done-codes"/>.</t>
      </section>
      <section anchor="ps-notify">
        <name>PUBLISH_STATE_NOTIFY</name>
        <t>A publisher sends PUBLISH_STATE_NOTIFY on a subscription's bidirectional
stream to notify the subscriber that the state of the subscription has changed for a
reason other than a subscriber sent REQUEST_UPDATE.  Unlike REQUEST_UPDATE
(<xref target="message-request-update"/>), it is a unilateral notification: the receiver
does not respond with REQUEST_OK or REQUEST_ERROR, and the message is not
subject to the MAX_REQUEST_UPDATES limit (<xref target="max-request-updates"/>).</t>
        <t>PUBLISH_STATE_NOTIFY applies only to subscriptions, and is sent only by
the publisher.  An endpoint that receives a PUBLISH_STATE_NOTIFY for any
other request type <bcp14>MUST</bcp14> close the session with <tt>UNEXPECTED_MESSAGE</tt>.  A
publisher that receives a PUBLISH_STATE_NOTIFY <bcp14>MUST</bcp14> close the session with
<tt>ROLE_VIOLATION</tt>.</t>
        <t>A PUBLISH_STATE_NOTIFY carries the parameters whose values have changed.
If a parameter is not present, its value is unchanged.  The semantics of each
parameter, including whether it may appear in PUBLISH_STATE_NOTIFY, are
defined by the parameter.</t>
        <t>A publisher <bcp14>MUST NOT</bcp14> use PUBLISH_STATE_NOTIFY to
change the value of a subscriber controlled subscription parameter
unless the subscriber requested the change.</t>
        <t>The publisher <bcp14>MUST</bcp14> include the LARGEST_OBJECT parameter (<xref target="largest-param"/>), if
known, in PUBLISH_STATE_NOTIFY so the subscriber can determine the point in the
Track at which the change took effect.</t>
        <t>This message is informative and no action is required by the recipient.</t>
        <t>The format of PUBLISH_STATE_NOTIFY is as follows:</t>
        <figure anchor="moq-transport-ps-notify-format">
          <name>MOQT PUBLISH_STATE_NOTIFY Message</name>
          <artwork><![CDATA[
PUBLISH_STATE_NOTIFY Message {
  Type (vi64) = 0x22,
  Length (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.  The parameters
that can appear in a PUBLISH_STATE_NOTIFY are LARGEST_OBJECT, PAUSED and
LOCATION_FILTER.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-fetch">
        <name>FETCH</name>
        <t>A subscriber sends FETCH as the first message on a new bidi stream to a
publisher to request a range of already published objects within a track.</t>
        <t>The format of FETCH is as follows:</t>
        <figure anchor="moq-transport-fetch-format">
          <name>MOQT FETCH Message</name>
          <artwork><![CDATA[
FETCH Message {
  Type (vi64) = 0x16,
  Length (vi64),
  Request ID (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-namespace-structure"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.  The parameters
that can appear in a FETCH are AUTHORIZATION_TOKEN, FILL_TIMEOUT,
SUBSCRIBER_PRIORITY, LOCATION_FILTER, GROUP_ORDER, SUBGROUP_FILTER,
OBJECTID_FILTER, PRIORITY_FILTER, OBJECT_PROPERTY_FILTER and
INCLUDE_PROPERTIES.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status">
        <name>TRACK_STATUS</name>
        <t>A potential subscriber sends <tt>TRACK_STATUS</tt> as the first and only message on a
new bidi stream to obtain information about the current status of a given track.</t>
        <t>The TRACK_STATUS message format is identical to the SUBSCRIBE message
(<xref target="message-subscribe-req"/>), but subscriber parameters related to Track
delivery (e.g. SUBSCRIBER_PRIORITY) are not included.  The parameters that can
appear in a TRACK_STATUS are AUTHORIZATION_TOKEN and INCLUDE_PROPERTIES.</t>
        <t>The receiver of a TRACK_STATUS message treats it identically as if it had
received a SUBSCRIBE message, except it does not create downstream subscription
state or send any Objects.  If successful, the publisher responds with a
TRACK_STATUS_OK with the same parameters and Track Properties it would have
set in a SUBSCRIBE_OK. Track Alias is not used.  A publisher responds to a
failed TRACK_STATUS with an
appropriate TRACK_STATUS_ERROR message.  The bidi stream is closed with a FIN
after TRACK_STATUS_OK or TRACK_STATUS_ERROR are sent.</t>
        <t>Relays without an <tt>Established</tt> subscription <bcp14>MAY</bcp14> forward TRACK_STATUS to one or more
publishers, or <bcp14>MAY</bcp14> initiate a subscription (subject to authorization) as
described in <xref target="publisher-interactions"/> to determine the response. The publisher
does not send PUBLISH_DONE for this request, and the subscriber cannot send
REQUEST_UPDATE.</t>
      </section>
      <section anchor="message-pub-ns">
        <name>PUBLISH_NAMESPACE</name>
        <t>The publisher sends the PUBLISH_NAMESPACE message as the first message on a
new bidi stream to advertise that it has tracks available in namespaces
matching a Track Namespace Prefix.</t>
        <figure anchor="moq-transport-pub-ns-format">
          <name>MOQT PUBLISH_NAMESPACE Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE Message {
  Type (vi64) = 0x6,
  Length (vi64),
  Request ID (vi64),
  Track Namespace Prefix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: A Track Namespace as defined in
<xref target="track-namespace-structure"/>, matched as a prefix (see
<xref target="namespace-prefix-matching"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.  The only
parameter that can appear in a PUBLISH_NAMESPACE is AUTHORIZATION_TOKEN.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-ns">
        <name>SUBSCRIBE_NAMESPACE</name>
        <t>The subscriber sends a SUBSCRIBE_NAMESPACE control message on a new
bidirectional stream to a publisher to request the current set of matching
published namespaces, as well as future updates to the set.</t>
        <figure anchor="moq-transport-subscribe-ns-format">
          <name>MOQT SUBSCRIBE_NAMESPACE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE Message {
  Type (vi64) = 0x50,
  Length (vi64),
  Request ID (vi64),
  Track Namespace Prefix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: A Track Namespace structure as described in
<xref target="track-namespace-structure"/>, matched as a prefix (see
<xref target="namespace-prefix-matching"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.  The only
parameter that can appear in a SUBSCRIBE_NAMESPACE is AUTHORIZATION_TOKEN.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-namespace">
        <name>NAMESPACE</name>
        <t>The NAMESPACE message is similar to the PUBLISH_NAMESPACE message, except
it is sent on the response stream of a SUBSCRIBE_NAMESPACE request.
All NAMESPACE messages are in response to a SUBSCRIBE_NAMESPACE, so only
the namespace tuples after the 'Track Namespace Prefix' are included
in the 'Track Namespace Suffix'.</t>
        <t>When Parameters of a NAMESPACE change, the NAMESPACE message is sent again
with the updated Parameters.</t>
        <figure anchor="moq-transport-ns-format">
          <name>MOQT NAMESPACE Message</name>
          <artwork><![CDATA[
NAMESPACE Message {
  Type (vi64) = 0x8,
  Length (vi64),
  Track Namespace Suffix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-namespace-structure"/> after removing
namespace tuples included in 'Track Namespace Prefix'
<xref target="message-subscribe-ns"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-namespace-done">
        <name>NAMESPACE_DONE</name>
        <t>The publisher sends the <tt>NAMESPACE_DONE</tt> control message on the response stream
of a SUBSCRIBE_NAMESPACE request. All NAMESPACE_DONE messages are in response to
a SUBSCRIBE_NAMESPACE,
so only the namespace tuples after the 'Track Namespace Prefix' are included
in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-ns-done-format">
          <name>MOQT NAMESPACE_DONE Message</name>
          <artwork><![CDATA[
NAMESPACE_DONE Message {
  Type (vi64) = 0xE,
  Length (vi64),
  Track Namespace Suffix (..)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-namespace-structure"/>. The namespace begins
with the 'Track Namespace Prefix' specified in <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-tracks">
        <name>SUBSCRIBE_TRACKS</name>
        <t>The subscriber sends a SUBSCRIBE_TRACKS control message on a new bidirectional
stream to a publisher to request PUBLISH messages for all tracks within matching
namespaces, as well as future track publications within those namespaces.</t>
        <figure anchor="moq-transport-subscribe-tracks-format">
          <name>MOQT SUBSCRIBE_TRACKS Message</name>
          <artwork><![CDATA[
SUBSCRIBE_TRACKS Message {
  Type (vi64) = 0x51,
  Length (vi64),
  Request ID (vi64),
  Track Namespace Prefix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: A Track Namespace structure as described in
<xref target="track-namespace-structure"/>.  This prefix is matched against track
namespaces known to the publisher.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>, though they
are handled differently from the same Parameters on Subscriptions, as outlined
below.  The parameters that can appear in a SUBSCRIBE_TRACKS are
OBJECT_DELIVERY_TIMEOUT, AUTHORIZATION_TOKEN, SUBGROUP_DELIVERY_TIMEOUT,
PAUSED, SUBSCRIBER_PRIORITY, LOCATION_FILTER, GROUP_ORDER, FILL_PARAMETERS,
SUBGROUP_FILTER, OBJECTID_FILTER, PRIORITY_FILTER, OBJECT_PROPERTY_FILTER,
TRACK_PROPERTY_FILTER and INCLUDE_PROPERTIES.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-publish-skipped">
        <name>PUBLISH_SKIPPED</name>
        <t>The publisher sends the <tt>PUBLISH_SKIPPED</tt> control message to indicate it will
not send a PUBLISH message to initiate a new Subscription for a Track in the
SUBSCRIBE_TRACKS's Track Namespace. All PUBLISH_SKIPPED messages are in
response to a SUBSCRIBE_TRACKS, so only the namespace tuples after the
'Track Namespace Prefix' are included in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-publish-blocked-format">
          <name>MOQT PUBLISH_SKIPPED Message</name>
          <artwork><![CDATA[
PUBLISH_SKIPPED Message {
  Type (vi64) = 0xF,
  Length (vi64),
  Track Namespace Suffix (..),
  Track Name Length (vi64),
  Track Name (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-namespace-structure"/>. The namespace begins
with the 'Track Namespace Prefix' specified in <xref target="message-subscribe-tracks"/>.</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="message-params">
        <name>Control Message Parameters</name>
        <t>Some control messages include a field that encodes optional Message Parameters.
Message Parameters are serialized as follows:</t>
        <figure anchor="moq-message-param">
          <name>Message Parameter</name>
          <artwork><![CDATA[
Message Parameter {
  Type Delta (vi64),
  Value (..)
}
]]></artwork>
        </figure>
        <t>Type Delta: The difference between this Parameter Type and the previous
   Parameter Type in the message, or the Parameter Type itself for the first
   parameter. Parameters <bcp14>MUST</bcp14> be serialized in ascending order by Type.
   If the resulting Type would be greater than 2^64 - 1, the endpoint
   <bcp14>MUST</bcp14> close the session with <tt>DELTA_ENCODING_OVERFLOW</tt>.</t>
        <ul spacing="normal">
          <li>
            <t>Value: The encoding is specified by each parameter definition.
The encodings defined in this draft are:
            </t>
            <ul spacing="normal">
              <li>
                <t>uint8: A single-byte unsigned integer (0-255)</t>
              </li>
              <li>
                <t>varint: A variable-length integer</t>
              </li>
              <li>
                <t>Location: Two consecutive varints (Group, Object)</t>
              </li>
              <li>
                <t>Length-prefixed: A varint length followed by that many bytes</t>
              </li>
              <li>
                <t>Track Namespace: A sequence of length-prefixed fields (<xref target="track-namespace-structure"/>)</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Message Parameters are intended for the peer only and are not
forwarded by Relays, though relays can consider received parameter values when
making a request.</t>
        <t>All Message Parameters <bcp14>MUST</bcp14> be defined in the negotiated version of MOQT or
negotiated via Setup Options. An endpoint that receives an unknown Message
Parameter <bcp14>MUST</bcp14> close the session with <tt>INVALID_PARAMETER</tt>. Because the receiver
has to understand every Message Parameter, there is no need for a mechanism to
skip unknown parameters. Because unknown parameters cannot be skipped, the block
is bounded by a parameter count rather than a length.</t>
        <t>The Message Parameter types defined in this version of MOQT are defined in
the following subsections.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> repeat the same Parameter Type in a message unless the
parameter definition explicitly allows multiple instances of that type to
be sent in a single message. Receivers <bcp14>SHOULD</bcp14> check that there are no
unexpected duplicate parameters and close the session with <tt>INVALID_PARAMETER</tt>
if found.</t>
        <t>The number of Message Parameters is not specifically limited, but the total
length of a control message is limited by MAX_CONTROL_MESSAGE_SIZE
(<xref target="max-control-message-size"/>).</t>
        <t>Message Parameters in SUBSCRIBE and FETCH <bcp14>MUST NOT</bcp14> cause the
publisher to alter the payload of the objects it sends, as that would violate
the track uniqueness guarantee described in <xref target="track-scope"/>.</t>
        <section anchor="parameter-scope">
          <name>Parameter Scope</name>
          <t>Message Parameters are always intended for the peer endpoint only and are not
forwarded by Relays, though relays can consider received parameter values when
making a request. Track information not specific to the Message or Session
is encoded in Track Properties. See <xref target="properties"/>.</t>
          <t>Each Message Parameter definition indicates the message types in which
it can appear, and each control message definition lists the parameters it
allows. If a parameter appears in some other type of message, the receiving
endpoint <bcp14>MUST</bcp14> close the session with <tt>INVALID_PARAMETER</tt>.
Note that since Setup Options use a separate namespace, it is impossible for
Message Parameters to appear in Setup messages.</t>
        </section>
        <section anchor="authorization-token">
          <name>AUTHORIZATION TOKEN Parameter</name>
          <t>The AUTHORIZATION TOKEN parameter (Parameter Type 0x03) uses Length-prefixed
encoding. It <bcp14>MAY</bcp14> appear in a PUBLISH, SUBSCRIBE, REQUEST_UPDATE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS, PUBLISH_NAMESPACE, TRACK_STATUS or FETCH message. This
parameter conveys information to authorize the sender to perform the operation
carrying the parameter. This Parameter <bcp14>MUST NOT</bcp14> be copied from a SUBSCRIBE_TRACKS
to the resulting PUBLISH message Parameters.</t>
          <t>The parameter value is a Token structure, whose wire format and semantics are
defined in <xref target="auth-token-compression"/>.</t>
        </section>
        <section anchor="subgroup-delivery-timeout">
          <name>SUBGROUP_DELIVERY_TIMEOUT Parameter</name>
          <t>The SUBGROUP_DELIVERY_TIMEOUT parameter (Parameter Type 0x06) is a varint. It
<bcp14>MAY</bcp14> appear in a SUBSCRIBE, PUBLISH, SUBSCRIBE_TRACKS, or REQUEST_UPDATE (for a
subscription) message.  Its
semantics are defined in <xref target="delivery-timeouts"/>.</t>
          <t>This parameter is intended to be specific to a subscription, so it <bcp14>SHOULD NOT</bcp14>
be forwarded upstream by a relay that intends to serve multiple subscriptions
for the same track.</t>
        </section>
        <section anchor="object-delivery-timeout">
          <name>OBJECT_DELIVERY_TIMEOUT Parameter</name>
          <t>The OBJECT_DELIVERY_TIMEOUT parameter (Parameter Type 0x02) is a varint. It
<bcp14>MAY</bcp14> appear in a SUBSCRIBE, PUBLISH, SUBSCRIBE_TRACKS, or REQUEST_UPDATE (for a
subscription) message.  Its
semantics are defined in <xref target="delivery-timeouts"/>.</t>
          <t>This parameter is intended to be specific to a subscription, so it <bcp14>SHOULD NOT</bcp14>
be forwarded upstream by a relay that intends to serve multiple subscriptions
for the same track.</t>
        </section>
        <section anchor="fill-timeout">
          <name>FILL TIMEOUT Parameter</name>
          <t>The FILL_TIMEOUT parameter (Parameter Type 0x0A) is a varint. It <bcp14>MAY</bcp14> appear in
a FETCH message, or inside a FILL_PARAMETERS parameter (see
<xref target="fill-parameters"/>), where it applies to the fill fetch stream.</t>
          <t>It is the maximum total duration in milliseconds a relay <bcp14>SHOULD</bcp14> spend waiting
for upstream sources to provide Objects that are not immediately available
before reporting them as Timed-Out gaps in the FETCH response (see <xref target="fetch"/>).</t>
          <t>A value of 0 indicates the subscriber only wants Objects that are immediately
available; the relay <bcp14>MUST NOT</bcp14> wait for upstream delivery and <bcp14>MUST</bcp14> report any
unavailable Objects as Timed-Out gaps.</t>
          <t>If the Fill Timeout parameter is absent, the relay waits for an implementation
specific duration before reporting Timed-Out gaps. If the subscriber specifies a
Fill Timeout larger than the relay is willing to wait, the relay <bcp14>MAY</bcp14> use a
shorter timeout without informing the subscriber.</t>
        </section>
        <section anchor="rendezvous-timeout">
          <name>RENDEZVOUS TIMEOUT Parameter</name>
          <t>The RENDEZVOUS_TIMEOUT parameter (Parameter Type 0x04) is a varint. It <bcp14>MAY</bcp14>
appear in a SUBSCRIBE message.</t>
          <t>It is the duration in milliseconds the subscriber is willing to wait for a
publisher to become available. This applies when a relay receives a SUBSCRIBE
for a Track that has no current publisher.</t>
          <t>If the RENDEZVOUS_TIMEOUT is present, the relay <bcp14>SHOULD</bcp14> hold the subscription
and wait for a publisher to appear, up to the specified duration. The relay
does not send SUBSCRIBE_OK until a publisher becomes available. If a publisher
becomes available within this time, the relay proceeds with the subscription
normally. If the timeout expires without a publisher, the relay <bcp14>SHOULD</bcp14> respond
with SUBSCRIBE_ERROR with error code TIMEOUT.</t>
          <t>The relay <bcp14>MAY</bcp14> use a shorter timeout than requested by the subscriber. For
example, a relay might limit the maximum rendezvous timeout to protect its
resources.</t>
          <t>A value of 0 indicates the subscriber does not want to wait and expects an
immediate response.  The relay <bcp14>MUST</bcp14> immediately return SUBSCRIBE_ERROR with
error code DOES_NOT_EXIST if no publisher is available</t>
          <t>If RENDEZVOUS_TIMEOUT is absent, the default is 0.</t>
        </section>
        <section anchor="subscriber-priority">
          <name>SUBSCRIBER PRIORITY Parameter</name>
          <t>The SUBSCRIBER_PRIORITY parameter (Parameter Type 0x20) is a uint8. It <bcp14>MAY</bcp14>
appear in a SUBSCRIBE, PUBLISH, SUBSCRIBE_TRACKS, FETCH, or REQUEST_UPDATE
(for a subscription or FETCH), or inside a FILL_PARAMETERS parameter (see
<xref target="fill-parameters"/>). It is an integer expressing the priority of a
subscription relative to other subscriptions and fetch responses in the same
session. Lower numbers get higher priority. See <xref target="priorities"/>.</t>
          <t>If omitted from SUBSCRIBE or FETCH, the publisher uses the value 128.</t>
        </section>
        <section anchor="group-order">
          <name>GROUP ORDER Parameter</name>
          <t>The GROUP_ORDER parameter (Parameter Type 0x22) is a uint8. It <bcp14>MAY</bcp14> appear in a
SUBSCRIBE, PUBLISH, SUBSCRIBE_TRACKS, or FETCH, or inside a FILL_PARAMETERS
parameter (see <xref target="fill-parameters"/>).</t>
          <t>Its value indicates how to prioritize Objects from different groups within
the same subscription (see <xref target="priorities"/>), or how to order Groups in a Fetch
response (see <xref target="message-fetch"/>). When it appears inside FILL_PARAMETERS, it
governs the fill fetch stream and its ordering relative to subscription-delivered
Objects (see <xref target="priorities"/>). The allowed values are Ascending (0x1) or Descending
(0x2). If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14>
close the session with <tt>INVALID_PARAMETER</tt>.</t>
          <t>If omitted from SUBSCRIBE or SUBSCRIBE_TRACKS, the publisher's preference from
the Track is used. If omitted from FETCH, the receiver uses Ascending (0x1).</t>
        </section>
        <section anchor="location-filter">
          <name>LOCATION FILTER Parameter</name>
          <t>The LOCATION_FILTER parameter (Parameter Type 0x21) <bcp14>MAY</bcp14> appear in a FETCH,
SUBSCRIBE, PUBLISH, SUBSCRIBE_TRACKS, REQUEST_UPDATE (for a subscription) or
PUBLISH_STATE_NOTIFY message, or inside a FILL_PARAMETERS parameter (see
<xref target="fill-parameters"/>). It is a Location Filter (see
<xref target="location-filters"/>).</t>
          <t>A Location filter parameter has the following structure:</t>
          <artwork><![CDATA[
LOCATION_FILTER Parameter {
  Parameter Type (vi64) = 0x21,
  Location Filter Type (vi64),
  [StartGroup (vi64),]
  [StartObject (vi64),]
  [EndGroupDelta (vi64),]
  [EndObject (vi64),]
}
]]></artwork>
          <t>The Location Filter Type dictates which optional variable-length integer fields follow,
and how they are interpreted.</t>
          <ul spacing="normal">
            <li>
              <t>If Location Filter Type is 0x00, no fields follow and there is no Location Filter.</t>
            </li>
            <li>
              <t>If Location Filter Type is 0x01, a relative StartGroup follows.</t>
            </li>
            <li>
              <t>If Location Filter Type is 0x02, StartGroup and StartObject follow.</t>
            </li>
            <li>
              <t>If Location Filter Type is 0x03, StartGroup, StartObject, and EndGroupDelta follow.</t>
            </li>
            <li>
              <t>If Location Filter Type is 0x04, StartGroup, StartObject, EndGroupDelta, and EndObject follow.</t>
            </li>
            <li>
              <t>If Location Filter Type is 0x05, no fields follow and it specifies the Next Object.</t>
            </li>
            <li>
              <t>If an endpoint receives any other Location Filter Type, it <bcp14>MUST</bcp14> close the
session with <tt>INVALID_PARAMETER</tt>.</t>
            </li>
          </ul>
          <t>The table below summarizes the encodings.</t>
          <table anchor="location-filter-forms">
            <name>Location Filter forms</name>
            <thead>
              <tr>
                <th align="left">Location Filter Type</th>
                <th align="left">Start Location</th>
                <th align="left">End Location</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x00 (None)</td>
                <td align="left">no filter</td>
                <td align="left">no filter</td>
              </tr>
              <tr>
                <td align="left">0x01 (Relative Start)</td>
                <td align="left">relative: <tt>{Largest Object.Group + 1 - StartGroup, 0}</tt></td>
                <td align="left">open-ended</td>
              </tr>
              <tr>
                <td align="left">0x02 (Absolute Start)</td>
                <td align="left">absolute: <tt>{StartGroup, StartObject}</tt></td>
                <td align="left">open-ended</td>
              </tr>
              <tr>
                <td align="left">0x03 (Absolute Start, Group End)</td>
                <td align="left">absolute: <tt>{StartGroup, StartObject}</tt></td>
                <td align="left">last Object of Group <tt>StartGroup + EndGroupDelta</tt></td>
              </tr>
              <tr>
                <td align="left">0x04 (Absolute Range)</td>
                <td align="left">absolute: <tt>{StartGroup, StartObject}</tt></td>
                <td align="left">
                  <tt>{StartGroup + EndGroupDelta, EndObject}</tt></td>
              </tr>
              <tr>
                <td align="left">0x05 (Next Object)</td>
                <td align="left">
                  <tt>Next Object</tt></td>
                <td align="left">open-ended</td>
              </tr>
            </tbody>
          </table>
          <t>If Location Filter Type is 0x01, the StartGroup field specifies a relative number of groups prior to the Next Group,
hence the start Location is <tt>{Largest Object.Group + 1 - StartGroup, 0}</tt>. For example:
  * StartGroup=0 will start at the Next Group
  * StartGroup=1 will start at the current group
  * StartGroup=2 will start at 1 group prior to the current group
  * StartGroup=N will start at N-1 groups prior to the current group</t>
          <t>If a relative start group results in a computed absolute group less than 0, the
computed value is set to 0; if greater than 2^64 - 1, it is set to 2^64 - 1.</t>
          <t>Otherwise, all fields are absolute.  EndGroupDelta is delta
encoded from StartGroup, but both the start and end groups are absolute, not
relative to <tt>Largest Object</tt>.  If StartGroup + EndGroupDelta exceeds 2^64 - 1,
the endpoint <bcp14>MUST</bcp14> close the session with <tt>DELTA_ENCODING_OVERFLOW</tt>.</t>
          <t>When EndGroupDelta and EndObject are omitted from a subscription filter, the
subscription is open-ended. When they are omitted from a Fetch, the
EndGroup and EndObject are <tt>Largest Object</tt>.</t>
          <t>When EndObject is omitted, the filter includes all objects in the End Group.</t>
          <t>If omitted from FETCH or SUBSCRIBE, the fetch or subscription is
unfiltered.  If omitted from REQUEST_UPDATE or PUBLISH_STATE_NOTIFY, the
value is unchanged.  When sent in PUBLISH_STATE_NOTIFY, it reports the
Location Filter now in effect at the publisher.</t>
        </section>
        <section anchor="subgroup-filter">
          <name>SUBGROUP FILTER Parameter</name>
          <t>The SUBGROUP_FILTER parameter (Type 0x25) selects objects with specified
Ranges of Subgroup ID.  See <xref target="range-filters"/> and <xref target="range-filter-structure"/>.</t>
          <artwork><![CDATA[
SUBGROUP_FILTER {
  Type (vi64) = 0x25,
  Length (vi64),
  [SetID (8)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="objectid-filter">
          <name>OBJECTID FILTER Parameter</name>
          <t>The OBJECTID_FILTER parameter (Type 0x26) selects objects with specified
Ranges of Object ID.  See <xref target="range-filters"/> and <xref target="range-filter-structure"/>.</t>
          <artwork><![CDATA[
OBJECTID_FILTER {
  Type (vi64) = 0x26,
  Length (vi64),
  [SetID (8)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="priority-filter">
          <name>PRIORITY FILTER Parameter</name>
          <t>The PRIORITY_FILTER parameter (Type 0x27) selects objects with specified
Ranges of Publisher Priority.  See <xref target="range-filters"/> and
<xref target="range-filter-structure"/>.
If a decoded value exceeds 255, the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER since Publisher Priority
is an 8-bit field.</t>
          <artwork><![CDATA[
PRIORITY_FILTER {
  Type (vi64) = 0x27,
  Length (vi64),
  [SetID (8)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="object-property-filter">
          <name>OBJECT PROPERTY FILTER Parameter</name>
          <t>The OBJECT_PROPERTY_FILTER parameter (Type 0x28) selects objects with
required Ranges of Property Value for a required Object Property
Type which <bcp14>MUST</bcp14> be even, i.e. a single integer value
(see <xref target="moq-key-value-pair"/>), otherwise the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER. See <xref target="range-filters"/> and
<xref target="range-filter-structure"/>.</t>
          <artwork><![CDATA[
OBJECT_PROPERTY_FILTER {
  Type (vi64) = 0x28,
  Length (vi64),
  [SetID (8)],
  [Property Type (vi64)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="track-property-filter">
          <name>TRACK PROPERTY FILTER Parameter</name>
          <t>The TRACK_PROPERTY_FILTER parameter (Type 0x29) selects tracks with
required Ranges of Property Value for a required Track Property
Type which <bcp14>MUST</bcp14> be even, i.e. a single integer value
(see <xref target="moq-key-value-pair"/>), otherwise the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER. See <xref target="range-filters"/> and
<xref target="range-filter-structure"/>.</t>
          <artwork><![CDATA[
TRACK_PROPERTY_FILTER {
  Type (vi64) = 0x29,
  Length (vi64),
  [SetID (8)],
  [Property Type (vi64)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="fill-parameters">
          <name>FILL PARAMETERS Parameter</name>
          <t>The FILL_PARAMETERS parameter (Parameter Type 0x23) <bcp14>MAY</bcp14> appear in a SUBSCRIBE,
SUBSCRIBE_TRACKS, PUBLISH, or REQUEST_UPDATE (for a subscription) message. Its
value is a Number of Parameters (vi64) followed by that many Parameters that
apply to the fill fetch stream (see <xref target="fill-semantics"/>), encoded as if they were
Parameters for a separate message (see <xref target="message-params"/>).  A fill fetch stream
is opened only when FILL_PARAMETERS is present.</t>
          <t>The following parameters <bcp14>MAY</bcp14> appear inside FILL_PARAMETERS:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Parameter Type</th>
                <th align="left">Parameter Name</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0A</td>
                <td align="left">FILL_TIMEOUT</td>
                <td align="left">
                  <xref target="fill-timeout"/></td>
              </tr>
              <tr>
                <td align="left">0x20</td>
                <td align="left">SUBSCRIBER_PRIORITY</td>
                <td align="left">
                  <xref target="subscriber-priority"/></td>
              </tr>
              <tr>
                <td align="left">0x21</td>
                <td align="left">LOCATION_FILTER</td>
                <td align="left">
                  <xref target="location-filter"/></td>
              </tr>
              <tr>
                <td align="left">0x22</td>
                <td align="left">GROUP_ORDER</td>
                <td align="left">
                  <xref target="group-order"/></td>
              </tr>
              <tr>
                <td align="left">0x25</td>
                <td align="left">SUBGROUP_FILTER</td>
                <td align="left">
                  <xref target="range-filters"/></td>
              </tr>
              <tr>
                <td align="left">0x26</td>
                <td align="left">OBJECTID_FILTER</td>
                <td align="left">
                  <xref target="range-filters"/></td>
              </tr>
              <tr>
                <td align="left">0x27</td>
                <td align="left">PRIORITY_FILTER</td>
                <td align="left">
                  <xref target="range-filters"/></td>
              </tr>
              <tr>
                <td align="left">0x28</td>
                <td align="left">OBJECT_PROPERTY_FILTER</td>
                <td align="left">
                  <xref target="range-filters"/></td>
              </tr>
            </tbody>
          </table>
          <t>The LOCATION_FILTER inside FILL_PARAMETERS selects the fill range and is
evaluated using the rules for a Fetch (see <xref target="location-filter"/>); it is
independent of the subscription's own Location filter.</t>
          <t>A parameter that is omitted from FILL_PARAMETERS takes the value it has for the
subscription; FILL_PARAMETERS therefore carries only the settings that
differ. An endpoint that receives a parameter inside FILL_PARAMETERS that is not
listed above <bcp14>MUST</bcp14> close the session with <tt>INVALID_PARAMETER</tt>.</t>
          <t>The value of FILL_PARAMETERS is a separate parameter scope. Parameters inside
it are not considered to appear in the enclosing message for the purposes of
<xref target="message-params"/>, so a Parameter Type <bcp14>MAY</bcp14> appear both in the message and
inside FILL_PARAMETERS.</t>
          <t>FILL_PARAMETERS is not retained as subscription state. It applies only to the
message that carries it, so the sticky-parameter rules in
<xref target="message-request-update"/> do not apply to it.  A REQUEST_UPDATE containing
FILL_PARAMETERS cannot be coalesced with other REQUEST_UPDATEs.  A publisher
can reject a REQUEST_UPDATE containing FILL_PARAMETERS with <tt>EXCESSIVE_LOAD</tt> if
it has too many active fill fetch streams.</t>
        </section>
        <section anchor="expires">
          <name>EXPIRES Parameter</name>
          <t>The EXPIRES parameter (Parameter Type 0x8) is a varint. It <bcp14>MAY</bcp14> appear in
PUBLISH, SUBSCRIBE_OK, FETCH_OK, or any REQUEST_OK. It encodes the time
in milliseconds after which the sender of the parameter will terminate
the request (see <xref target="message-publish-done"/> and <xref target="request-cancellation"/>).
This value is advisory and the sender
can terminate the request prior to or after the expiry time.</t>
          <t>EXPIRES in TRACK_STATUS_OK indicates the value the sender would have included
in a SUBSCRIBE_OK for the same Track.</t>
          <t>The receiver of the parameter can attempt to extend the request by sending
a REQUEST_UPDATE with 0 or more updated parameters. If the receiver has one or
more updated AUTHORIZATION_TOKENs, it <bcp14>SHOULD</bcp14> include those in the
REQUEST_UPDATE. If the extension is granted, the sender includes a new EXPIRES
value in REQUEST_UPDATE_OK. Relays that send this parameter and applications that
receive it <bcp14>MAY</bcp14> introduce jitter to prevent many endpoints from updating
simultaneously.</t>
          <t>If the EXPIRES parameter is 0 or is not present in a message, the request
does not expire or expires at an unknown time.</t>
        </section>
        <section anchor="largest-param">
          <name>LARGEST OBJECT Parameter</name>
          <t>The LARGEST_OBJECT parameter (Parameter Type 0x9) is a Location. It <bcp14>MAY</bcp14> appear
in SUBSCRIBE_OK, PUBLISH, REQUEST_UPDATE_OK, TRACK_STATUS_OK, FETCH_OK, or
PUBLISH_STATE_NOTIFY.  It contains the <tt>Largest Object</tt>
(<xref target="largest-object"/>) in the Track from the perspective of the sending
endpoint. If the sending endpoint has published or received any Objects in the
Track, it <bcp14>MUST</bcp14> include this parameter in the above messages it sends, except in
FETCH_OK, where it is only required when <tt>Largest Object</tt> is within the
requested range (see <xref target="fetch"/>).</t>
          <t>If omitted from a message where it is otherwise required, the sending endpoint
has not published or received any Objects in the Track.</t>
          <t>A relay sets LARGEST_OBJECT as described in <xref target="subscriber-interactions"/>.</t>
        </section>
        <section anchor="paused-parameter">
          <name>PAUSED Parameter</name>
          <t>The PAUSED parameter (Parameter Type 0x11) is a uint8. It <bcp14>MAY</bcp14> appear in
SUBSCRIBE, REQUEST_UPDATE (for a subscription or a SUBSCRIBE_TRACKS request),
PUBLISH, SUBSCRIBE_TRACKS and PUBLISH_STATE_NOTIFY. It
specifies whether affected subscriptions are paused (see
<xref target="pausing-subscriptions"/>).
The allowed values are 0 (unpaused) or 1 (paused). If an endpoint receives
a value outside this range, it <bcp14>MUST</bcp14> close the session with <tt>INVALID_PARAMETER</tt>.</t>
          <t>In the case of a REQUEST_UPDATE for SUBSCRIBE_TRACKS, it specifies whether
future subscriptions that match the prefix are paused. Existing
subscriptions are unaffected.</t>
          <t>If the parameter is omitted from REQUEST_UPDATE or PUBLISH_STATE_NOTIFY,
the value for the subscription remains unchanged.  If the parameter is omitted
from any other message, the default value is 0.  When sent in
PUBLISH_STATE_NOTIFY, it reports whether the subscription is paused at the
publisher.</t>
        </section>
        <section anchor="new-group-request">
          <name>NEW GROUP REQUEST Parameter</name>
          <t>The NEW_GROUP_REQUEST parameter (Parameter Type 0x32) is a varint. It <bcp14>MAY</bcp14> appear
in SUBSCRIBE or REQUEST_UPDATE for a subscription.  It represents the largest Group
ID in the Track known by the subscriber, plus 1. A value of 0 indicates that the
subscriber has no Group information for the Track.  A subscriber <bcp14>MUST NOT</bcp14> send
this parameter in REQUEST_UPDATE if it has received the Track's Properties and
they did not include the DYNAMIC_GROUPS Property with value 1.  A subscriber <bcp14>MAY</bcp14>
include this parameter in SUBSCRIBE without foreknowledge of support.  If the
original publisher does not support dynamic Groups, it ignores the parameter.</t>
          <t>When an Original Publisher that supports dynamic Groups receives a
NEW_GROUP_REQUEST with a value of 0 or a value larger than the current Group,
it <bcp14>SHOULD</bcp14> end the current Group and begin a new Group as soon as practical.  The
Original Publisher <bcp14>MAY</bcp14> delay the NEW_GROUP_REQUEST subject to
implementation specific concerns, for example, achieving a minimum duration for
each Group. The Original Publisher chooses the next Group ID; there are no
requirements that it be equal to the NEW_GROUP_REQUEST parameter value.</t>
          <t>Relay Handling:</t>
          <t>A relay that receives a NEW_GROUP_REQUEST for a Track without an <tt>Established</tt>
subscription <bcp14>MUST</bcp14> include the NEW_GROUP_REQUEST when subscribing upstream.</t>
          <t>A relay that receives a NEW_GROUP_REQUEST for an <tt>Established</tt> subscription with a
value of 0 or a value larger than the Largest Group <bcp14>MUST</bcp14> send a REQUEST_UPDATE
including the NEW_GROUP_REQUEST to the publisher unless:</t>
          <ol spacing="normal" type="1"><li>
              <t>The Track does not support dynamic Groups</t>
            </li>
            <li>
              <t>There is already an outstanding NEW_GROUP_REQUEST from this Relay with a
greater or equal value</t>
            </li>
          </ol>
          <t>If a relay receives a NEW_GROUP_REQUEST with a non-zero value less than or equal
to the Largest Group, it does not send a NEW_GROUP_REQUEST upstream.</t>
          <t>After sending a NEW_GROUP_REQUEST upstream, the request is considered
outstanding until the Largest Group increases.</t>
        </section>
        <section anchor="track-namespace-prefix-param">
          <name>TRACK_NAMESPACE_PREFIX Parameter</name>
          <t>The TRACK_NAMESPACE_PREFIX parameter (Parameter Type 0x34) uses the Track
Namespace encoding described in <xref target="track-namespace-structure"/>.  It <bcp14>MAY</bcp14> appear in
REQUEST_UPDATE for a SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS request.  It
updates the Track Namespace Prefix for that subscription.  A REQUEST_UPDATE
containing TRACK_NAMESPACE_PREFIX cannot be coalesced with other
REQUEST_UPDATEs (see <xref target="message-request-update"/>).</t>
        </section>
        <section anchor="subscribe-tracks-id">
          <name>SUBSCRIBE_TRACKS_ID Parameter</name>
          <t>The SUBSCRIBE_TRACKS_ID parameter (Parameter Type 0x36) is a varint. It
appears only in a PUBLISH sent as a result of a SUBSCRIBE_TRACKS, and contains
that SUBSCRIBE_TRACKS's Request ID.</t>
        </section>
        <section anchor="include-properties-param">
          <name>INCLUDE_PROPERTIES Parameter</name>
          <t>The INCLUDE_PROPERTIES parameter (Parameter Type 0x35) is a uint8. It <bcp14>MAY</bcp14> appear
in SUBSCRIBE, TRACK_STATUS, FETCH or SUBSCRIBE_TRACKS. It specifies whether the
OK message sent in response includes Track Properties or whether the resulting PUBLISH
messages include Track Properties in the case of SUBSCRIBE_TRACKS. If INCLUDE_PROPERTIES
is 0, the Track Properties are still present in the message, but they <bcp14>SHOULD</bcp14> be empty.
The allowed values are 0 (do not send Properties) or 1 (send Properties), and the
default is 1. If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14> close the
session with <tt>INVALID_PARAMETER</tt>.</t>
        </section>
      </section>
    </section>
    <section anchor="moqt-properties">
      <name>MOQT Properties</name>
      <t>The following Properties are defined in MOQT. Each Property
specifies whether it can be used with Tracks, Objects, or both.</t>
      <t>Property types in ranges reserved for application-specific use
(0x78-0x7F, 0x3800-0x3FFF) are not defined by MOQT.
See <xref target="properties"/> for usage guidance.</t>
      <section anchor="subgroup-delivery-timeout-ext">
        <name>SUBGROUP_DELIVERY_TIMEOUT</name>
        <t>SUBGROUP_DELIVERY_TIMEOUT (Property Type 0x06) is a Track and Object Property.
It is a variable-length integer.  Its semantics are defined in <xref target="delivery-timeouts"/>.  As an
Object Property on the first object in a subgroup, it overrides the Track-level
value for that subgroup; it is ignored on any other object in the subgroup.</t>
      </section>
      <section anchor="object-delivery-timeout-ext">
        <name>OBJECT_DELIVERY_TIMEOUT</name>
        <t>OBJECT_DELIVERY_TIMEOUT (Property Type 0x02) is a Track and Object Property.
It is a variable-length integer.  Its semantics are defined in <xref target="delivery-timeouts"/>.  As an
Object Property on the first object in a subgroup, it overrides the Track-level
value for that subgroup; it is ignored on any other object in the subgroup.</t>
      </section>
      <section anchor="max-cache-duration">
        <name>MAX CACHE DURATION</name>
        <t>MAX_CACHE_DURATION (Property Type 0x04) is a Track Property.</t>
        <t>It is an integer expressing
the number of milliseconds an Object can be served from a cache. If present, the
relay <bcp14>MUST NOT</bcp14> start forwarding any individual Object received through this
subscription or fetch after the specified number of milliseconds has elapsed
since the beginning of the Object was received.  This means Objects earlier in a
multi-object stream will expire earlier than Objects later in the stream.  The
same limit applies to cached Does Not Exist and Gone states.</t>
        <t>If MAX_CACHE_DURATION is not sent by the publisher, the Objects
can be cached until implementation constraints cause them to be evicted.</t>
      </section>
      <section anchor="publisher-priority">
        <name>DEFAULT PUBLISHER PRIORITY</name>
        <t>DEFAULT PUBLISHER PRIORITY (Property Type 0x0E) is a Track Property
that specifies the priority of a subscription relative to other subscriptions
in the same session.  The value is from 0 to 255 and lower numbers get higher
priority.  See <xref target="priorities"/>. If an endpoint receives a value above 255, it
<bcp14>MUST</bcp14> close the session with <tt>MALFORMED_KEY_VALUE</tt>. Subgroups and
Datagrams for this subscription inherit this priority, unless they specifically
override it.</t>
        <t>If omitted, the Default Publisher Priority is 128.</t>
      </section>
      <section anchor="group-order-pref">
        <name>DEFAULT PUBLISHER GROUP ORDER</name>
        <t>DEFAULT_PUBLISHER_GROUP_ORDER (Property Type 0x22) is a Track Property.</t>
        <t>It is an enum indicating the publisher's preference for prioritizing Objects
from different groups within the
same subscription (see <xref target="priorities"/>). The allowed values are Ascending (0x1) or
Descending (0x2). If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14>
close the session with <tt>MALFORMED_KEY_VALUE</tt>.</t>
        <t>If omitted, the publisher's preference is Ascending (0x1).</t>
      </section>
      <section anchor="dynamic-groups">
        <name>DYNAMIC GROUPS</name>
        <t>DYNAMIC_GROUPS (Property Type 0x30) is a Track Property.
The allowed values are 0 or 1. When the value is 1, it indicates
that the subscriber can request the Original Publisher to start a new Group
by including the NEW_GROUP_REQUEST parameter in REQUEST_UPDATE
for this Track. If an endpoint receives a value larger than 1, it <bcp14>MUST</bcp14> close
the session with <tt>MALFORMED_KEY_VALUE</tt>.</t>
        <t>If omitted, the value is 0.</t>
      </section>
      <section anchor="immutable-properties">
        <name>Immutable Properties</name>
        <t>Immutable Properties (Property Type 0xB) is a Track or Object Property that
contains a sequence of Key-Value-Pairs (see <xref target="moq-key-value-pair"/>) that are
themselves Track or Object Properties, respectively.</t>
        <artwork><![CDATA[
Immutable Properties {
  Type (0xB),
  Length (vi64),
  Key-Value-Pair (..) ...
}
]]></artwork>
        <t>This Property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
Relays. This Property <bcp14>MUST NOT</bcp14> be modified or removed and the serialization
(e.g. variable-length integer encodings) of the Key-Value-Pairs <bcp14>MUST NOT</bcp14>
change). Like other Properties, Relays <bcp14>MUST</bcp14> cache Immutable Properties if the
Object or Track are cached and <bcp14>MUST</bcp14> forward it. Relays <bcp14>MAY</bcp14> decode and view
the Properties in the Key-Value-Pairs.</t>
        <t>Unless specified by a particular Property specification, Properties
<bcp14>MAY</bcp14> appear either in the mutable property list or inside Immutable Properties.
When looking for the value of a property, processors <bcp14>MUST</bcp14> search both the
mutable properties and the contents of Immutable Properties.</t>
        <t>If a Property allows multiple values, the same Property Type <bcp14>MAY</bcp14> appear in
both the mutable list and inside Immutable Properties, unless prohibited by
the Property specification.</t>
        <t>A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of the
following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains an Immutable Properties property that contains another
Immutable Properties key.</t>
          </li>
          <li>
            <t>A Key-Value-Pair cannot be parsed.</t>
          </li>
        </ul>
        <t>The following figure shows an example Object structure with a combination of
mutable and immutable properties and end to end encrypted metadata in the Object
payload.</t>
        <artwork><![CDATA[
                   Object Header                      Object Payload
<------------------------------------------------> <------------------->
+--------+-------+------------+-------+-----------+--------------------+
| Object | Ext 1 | Immutable  | Ext N | [Payload] | Private Properties |
| Fields |       | Properties |       | [Length]  | App Payload        |
+--------+-------+------------+-------+-----------+--------------------+
                  xxxxxxxxxxxx                     xxxxxxxxxxxxxxxxxxxx
                                                   yyyyyyyyyyyyyyyyyyyy
x = e2e Authenticated Data
y = e2e Encrypted Data
EXT 1 and EXT N can be modified or removed by Relays
]]></artwork>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
      <section anchor="prior-group-id-gap">
        <name>Prior Group ID Gap</name>
        <t>Prior Group ID Gap only applies to Objects, not Tracks.</t>
        <t>Prior Group ID Gap (Property Type 0x3C) is a variable-length integer
containing the number of Groups prior to the current Group that do not, and will
never, exist. For example, if the Original Publisher is publishing an Object in
Group 7 and knows it will never publish any Objects in Group 8 or Group 9, it
can include Prior Group ID Gap = 2 in any number of Objects in Group 10, as it
sees fit.  A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of
the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Group ID Gap.</t>
          </li>
          <li>
            <t>A Group contains more than one Object with different values for Prior Group
 ID Gap.</t>
          </li>
          <li>
            <t>An Object has a Prior Group ID Gap larger than the Group ID.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Group ID Gap covering an Object
it previously received.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Group ID within a previously
communicated gap.</t>
          </li>
        </ul>
        <t>Use of this property is optional, as publishers might not know the prior gap size,
or there may not be a gap. If Prior Group ID Gap is not present, the receiver
cannot infer any information about the existence of prior groups (see
<xref target="group-ids"/>).</t>
        <t>This property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This property <bcp14>MAY</bcp14> be removed by a relay when the object in question is
served via FETCH, and the gap that the property communicates is already
communicated implicitly in the FETCH response; it <bcp14>MUST NOT</bcp14> be modified or
removed otherwise.</t>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
      <section anchor="prior-object-id-gap">
        <name>Prior Object ID Gap</name>
        <t>Prior Object ID Gap only applies to Objects, not Tracks.</t>
        <t>Prior Object ID Gap (Property Type 0x3E) is a variable-length integer
containing the number of Objects prior to the current Object that do not, and
will never, exist. For example, if the Original Publisher is publishing Object
10 in Group 3 and knows it will never publish Objects 8 or 9 in this Group, it
can include Prior Object ID Gap = 2.  A Track is considered malformed (see
<xref target="malformed-tracks"/>) if any of the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Object ID Gap.</t>
          </li>
          <li>
            <t>An Object has a Prior Object ID Gap larger than the Object ID.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Object ID Gap covering an Object
it previously received.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with an Object ID within a previously
communicated gap.</t>
          </li>
        </ul>
        <t>Use of this property is optional, as publishers might not know the prior gap size,
or there might not be a gap. If Prior Object ID Gap is not present, the receiver
cannot infer any information about the existence of prior objects (see
<xref target="model-object"/>).</t>
        <t>This property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This property <bcp14>MAY</bcp14> be removed by a relay when the object in question is
served via FETCH, and the gap that the property communicates is already
communicated implicitly in the FETCH response; it <bcp14>MUST NOT</bcp14> be modified or
removed otherwise.</t>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
    </section>
    <section anchor="data-streams">
      <name>Data Streams and Datagrams</name>
      <t>A publisher sends Objects matching a subscription on Data Streams or Datagrams
and sends Objects matching a FETCH request on one Data Stream.</t>
      <t>Unidirectional stream types are defined in <xref target="stream-types"/>. Data streams
use SUBGROUP_HEADER or FETCH_HEADER types.</t>
      <t>All MOQT datagrams start with a variable-length integer indicating the type of
the datagram.  See <xref target="object-datagram"/>.</t>
      <t>An endpoint that receives an unknown datagram type <bcp14>MUST</bcp14> close the session with
<tt>INVALID_STREAM_HEADER</tt>.</t>
      <section anchor="message-object">
        <name>Objects</name>
        <t>An Object contains a range of contiguous bytes from the
specified track, as well as associated metadata required to deliver,
cache, and forward it.  Objects are sent by publishers.</t>
        <section anchor="object-status">
          <name>Object Status</name>
          <t>The Object Status is a field that is only present in objects that are delivered
via a SUBSCRIPTION, and is absent in Objects delivered via a FETCH.  It allows
the publisher to explicitly communicate that a specific range of objects does
not exist.</t>
          <t><tt>Status</tt> can have the following values:</t>
          <ul spacing="normal">
            <li>
              <t>0x0 := Normal object. This status is implicit for any non-zero length object.
       Zero-length objects explicitly encode the Normal status.</t>
            </li>
            <li>
              <t>0x3 := Indicates End of Group. Indicates that no objects with the specified
       Group ID and the Object ID that is greater than or equal to the one
       specified exist in the group identified by the Group ID.</t>
            </li>
            <li>
              <t>0x4 := Indicates End of Track. Indicates that no objects with the Location
       that is equal to or greater than the one specified exist.</t>
            </li>
          </ul>
          <t>All of those <bcp14>SHOULD</bcp14> be cached.</t>
          <t>There is no Object Status value indicating the end of a Subgroup. The end of a
Subgroup is signaled by closing its stream with a FIN
(see <xref target="closing-subgroup-streams"/>).</t>
          <t>If an endpoint receives any other value, it <bcp14>SHOULD</bcp14> close the session with
<tt>INVALID_OBJECT_STATUS</tt> (<xref target="session-termination-codes"/>).
An Object <bcp14>MUST</bcp14> have an empty payload unless its Object Status value is
registered as permitting a payload in the Object Status registry
(<xref target="iana-object-status"/>). Of the values defined in this document, only Normal
(0x0) permits a payload.</t>
        </section>
        <section anchor="object-properties">
          <name>Object Properties</name>
          <t>Any Object with status Normal can have properties (<xref target="properties"/>).
If an endpoint receives properties on an Object with status that is
not Normal, it <bcp14>MUST</bcp14> close the session with <tt>INVALID_OBJECT_STATUS</tt>.</t>
          <t>Object Properties are visible to relays and are intended to be relevant
to MOQT Object distribution. Any Object metadata never intended to be accessed
by the transport or Relays <bcp14>SHOULD</bcp14> be serialized as part of the Object payload
and not as an Object Property.</t>
          <t>Object Properties set by the Original Publisher that are intended to be visible
to relays, but not modified by them, <bcp14>SHOULD</bcp14> be placed in Immutable Properties
(<xref target="immutable-properties"/>), which enables end-to-end authentication schemes.</t>
          <t>Object Properties are serialized as a length in bytes followed by
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).</t>
          <artwork><![CDATA[
Object Properties {
  Properties Length (vi64),
  Properties (..),
}
]]></artwork>
          <t>Object Property types are registered in the IANA table
'MOQ Properties'. See <xref target="iana"/>.</t>
        </section>
      </section>
      <section anchor="datagrams">
        <name>Datagrams</name>
        <t>A single object can be conveyed in a datagram.  The Track Alias field
(<xref target="track-alias"/>) indicates the track this Datagram belongs to; see
<xref target="unknown-track-alias"/> for handling of unknown Track Aliases.</t>
        <t>An Object received in an <tt>OBJECT_DATAGRAM</tt> message has a <tt>Delivery Mode</tt> =
<tt>Datagram</tt>.</t>
        <t>To send an Object with <tt>Delivery Mode</tt> = <tt>Datagram</tt>, determine
the length of the header and payload and send the Object as datagram.  When the
total size is larger than the maximum datagram size for the session, the Object
will be dropped without any explicit notification.</t>
        <t>Each session along the path between the Original Publisher and End Subscriber
might have different maximum datagram sizes. Additionally, Object Properties
(<xref target="object-properties"/>) can be added to Objects as they pass
through the MOQT network, increasing the size of the Object and the chances it
will exceed the maximum datagram size of a downstream session and be dropped.</t>
        <section anchor="object-datagram">
          <name>Object Datagram</name>
          <t>An <tt>OBJECT_DATAGRAM</tt> carries a single object in a datagram.</t>
          <figure anchor="object-datagram-format">
            <name>MOQT OBJECT_DATAGRAM</name>
            <artwork><![CDATA[
OBJECT_DATAGRAM {
  Type Flags (vi64),
  Track Alias (vi64),
  Group ID (vi64),
  [Object ID (vi64),]
  [Publisher Priority (8),]
  [Properties (..),]
  [Object Status (vi64),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Type Flags field in the OBJECT_DATAGRAM is a variable-length integer that
encodes a set of flags. All values defined in this specification fit in a
single-byte encoding (values less than 128). If a received value has bit 4 set,
or has a bit set whose meaning is not specified, the endpoint <bcp14>MUST</bcp14> close the
session with <tt>INVALID_STREAM_HEADER</tt>.</t>
          <t>The four low-order bits and bit 5 of the Type Flags field determine which fields
are present in the datagram:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>PROPERTIES</strong> bit (0x01) indicates when the Properties field is
present. When set to 1, the Object Properties structure defined in
<xref target="object-properties"/> is present. When set to 0, the field is absent.
If an endpoint receives a datagram with the PROPERTIES bit set and an
Properties Length of 0, it <bcp14>MUST</bcp14> close the session with
<tt>MALFORMED_OBJECT</tt>.</t>
            </li>
            <li>
              <t>The <strong>END_OF_GROUP</strong> bit (0x02) indicates End of Group. When set to 1, this
indicates that no Object with the same Group ID and an Object ID greater than
the Object ID in this datagram exists.</t>
            </li>
            <li>
              <t>The <strong>ZERO_OBJECT_ID</strong> bit (0x04) indicates when the Object ID field is
present.  When set to 1, the Object ID field is omitted and the Object ID
is 0. When set to 0, the Object ID field is present.</t>
            </li>
            <li>
              <t>The <strong>DEFAULT_PRIORITY</strong> bit (0x08) indicates when the Priority field is
present. When set to 1, the Priority field is omitted and this Object inherits
the Publisher Priority specified in the control message that established the
subscription. When set to 0, the Priority field is present.</t>
            </li>
            <li>
              <t>The <strong>STATUS</strong> bit (0x20) indicates whether the datagram contains an Object
Status or Object Payload. When set to 1, the Object Status field is present
and there is no Object Payload. When set to 0, the Object Payload is present
and the Object Status field is omitted. There is no explicit length field for
the Object Payload; the entirety of the transport datagram following the
Object header contains the payload.</t>
            </li>
          </ul>
          <t>The following Type Flags values are invalid. If an endpoint receives a datagram
with any of these values, it <bcp14>MUST</bcp14> close the session with
<tt>INVALID_STREAM_HEADER</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>Values with both the STATUS bit (0x20) and END_OF_GROUP bit (0x02) set.</t>
            </li>
            <li>
              <t>Values with bit 4 (0x10) set. This bit is reserved and <bcp14>MUST</bcp14> be zero.</t>
            </li>
            <li>
              <t>Values with a bit set whose meaning is not specified.</t>
            </li>
          </ul>
          <t>If an Object Datagram includes both the STATUS bit and PROPERTIES bit, and the
Object Status is not Normal (0x0), the endpoint <bcp14>MUST</bcp14> close the session with
<tt>INVALID_OBJECT_STATUS</tt>, because only Normal Objects can have Properties.</t>
        </section>
      </section>
      <section anchor="subgroup-streams">
        <name>Subgroup Streams</name>
        <t>When Objects are sent on streams, the stream begins with a Subgroup or Fetch
Header and is followed by one or more sets of serialized Object fields.
If a stream ends gracefully (i.e., the stream terminates with a FIN) in the
middle of a serialized Object, the receiver <bcp14>SHOULD</bcp14> close the session with
<tt>TRUNCATED_OBJECT</tt>.</t>
        <t>A publisher <bcp14>SHOULD NOT</bcp14> open more than one stream at a time with the same Subgroup
Header field values.</t>
        <section anchor="subgroup-header">
          <name>Subgroup Header</name>
          <t>All Objects on a Subgroup stream belong to the track identified by
<tt>Track Alias</tt> (see <xref target="track-alias"/>) and the Subgroup indicated by <tt>Group ID</tt>
and <tt>Subgroup ID</tt> in the SUBGROUP_HEADER.</t>
          <t>See <xref target="unknown-track-alias"/> for handling of subgroups with unknown Track
Aliases.</t>
          <figure anchor="object-header-format">
            <name>MOQT SUBGROUP_HEADER</name>
            <artwork><![CDATA[
SUBGROUP_HEADER {
  Type Flags (vi64),
  Track Alias (vi64),
  Group ID (vi64),
  [Subgroup ID (vi64),]
  [Publisher Priority (8),]
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>SUBGROUP_HEADER</tt> have an
<tt>Delivery Mode</tt> = <tt>Subgroup</tt>.</t>
          <t>The Type Flags field in the SUBGROUP_HEADER is a variable-length integer that
encodes a set of flags. All values defined in this specification fit in a
single-byte encoding (values less than 128).</t>
          <t>Bit 4 is always set to 1. The four low-order bits and bits 5-6 determine which
fields are present in the header:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>PROPERTIES</strong> bit (0x01) indicates when the Properties field is present
in all Objects in this Subgroup. When set to 1, the Object Properties structure
defined in <xref target="object-properties"/> is present in all Objects; Objects with no
properties or non-Normal status set Properties Length to 0. When set to 0, the
field is never present in this Subgroup. Because the value applies to every
Object in the Subgroup, a sender that might include Properties in any later
Object, including a relay that might add or forward them, sets this bit to 1.</t>
            </li>
            <li>
              <t>The <strong>SUBGROUP_ID_MODE</strong> field (bits 1-2, mask 0x06) is a two-bit field that
determines the encoding of the Subgroup ID. To extract this value, perform a
bitwise AND with mask 0x06 and right-shift by 1 bit:  </t>
              <ul spacing="normal">
                <li>
                  <t>0b00: The Subgroup ID field is absent and the Subgroup ID is 0.</t>
                </li>
                <li>
                  <t>0b01: The Subgroup ID field is absent and the Subgroup ID is the Object ID
of the first Object transmitted in this Subgroup.</t>
                </li>
                <li>
                  <t>0b10: The Subgroup ID field is present in the header.</t>
                </li>
                <li>
                  <t>0b11: Reserved for future use.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The <strong>END_OF_GROUP</strong> bit (0x08) indicates that this subgroup contains the
largest Object in the Group. When set to 1, the subscriber can infer the final
Object in the Group when the data stream is terminated by a FIN. In this case,
Objects that have the same Group ID and an Object ID larger than the last
Object received on the stream do not exist. This does not apply when the data
stream is reset.</t>
            </li>
            <li>
              <t>The <strong>DEFAULT_PRIORITY</strong> bit (0x20) indicates when the Priority field is
present. When set to 1, the Priority field is omitted and this Subgroup
inherits the Publisher Priority specified in the control message that
established the subscription. When set to 0, the Priority field is present in
the Subgroup header.</t>
            </li>
            <li>
              <t>The <strong>FIRST_OBJECT</strong> bit (0x40) indicates that the first object in this
subgroup stream is the first object published in the subgroup by the original publisher.</t>
            </li>
          </ul>
          <t>The following Type Flags values are invalid. If an endpoint receives a stream
header with any of these values, it <bcp14>MUST</bcp14> close the session with
<tt>INVALID_STREAM_HEADER</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>Values with SUBGROUP_ID_MODE set to 0b11. This mode
is reserved for future use.</t>
            </li>
            <li>
              <t>Values where bit 4 is not set. Bit 4 <bcp14>MUST</bcp14> be 1 for SUBGROUP_HEADER.</t>
            </li>
            <li>
              <t>Values of 128 or greater (i.e., any value that requires more than a one-byte
variable-length integer encoding).</t>
            </li>
          </ul>
          <t>To send an Object with <tt>Delivery Mode</tt> = <tt>Subgroup</tt>, find the open
stream that is associated with the subscription, <tt>Group ID</tt> and <tt>Subgroup ID</tt>,
or open a new one and send the <tt>SUBGROUP_HEADER</tt>. Then serialize the
following fields.</t>
          <t>The Object Status field is only sent if the Object Payload Length is zero.</t>
          <t>The Object ID Delta + 1 is added to the previous Object ID in the Subgroup
stream if there was one.  The Object ID is the Object ID Delta if it's the first
Object in the Subgroup stream. If the resulting Object ID would be greater
than 2^64 - 1, the endpoint <bcp14>MUST</bcp14> close the session with
<tt>DELTA_ENCODING_OVERFLOW</tt>. For example, a Subgroup of sequential Object IDs
starting at 0 will have 0 for all Object ID Delta values. A consumer cannot
infer information about the existence of Objects between the current and
previous Object ID in the Subgroup (e.g. when Object ID Delta is non-zero)
unless there is a Prior Object ID Gap property (see
<xref target="prior-object-id-gap"/>).</t>
          <figure anchor="object-subgroup-format">
            <name>MOQT Subgroup Object Fields</name>
            <artwork><![CDATA[
{
  Object ID Delta (vi64),
  [Properties (..),]
  Object Payload Length (vi64),
  [Object Status (vi64),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
        </section>
        <section anchor="closing-subgroup-streams">
          <name>Closing Subgroup Streams</name>
          <t>Subscribers will often need to know if they have received all objects in a
Subgroup, particularly if they serve as a relay or cache. QUIC and Webtransport
streams provide signals that can be used for this purpose. Closing Subgroups
promptly frees system resources and often unlocks flow control credit to open
more streams.</t>
          <t>If a sender has delivered all objects in a Subgroup to the QUIC stream, except
any Objects with Locations smaller than the subscription's Start Location, it
<bcp14>MUST</bcp14> close the stream with a FIN.</t>
          <t>If a sender closes the stream before delivering all such objects to the QUIC
stream, it <bcp14>MUST</bcp14> reset the stream. This includes, but is
not limited to:</t>
          <ul spacing="normal">
            <li>
              <t>Either of the delivery timeouts defined in <xref target="delivery-timeouts"/></t>
            </li>
            <li>
              <t>Early termination of subscription due to request cancellation</t>
            </li>
            <li>
              <t>A publisher's decision to end the subscription early</t>
            </li>
            <li>
              <t>A REQUEST_UPDATE moving the subscription's End Group to a smaller Group or
the Start Location to a larger Location</t>
            </li>
            <li>
              <t>Omitting a Subgroup Object because the subscription is paused</t>
            </li>
          </ul>
          <t>When RESET_STREAM_AT is used, the
reliable_size <bcp14>SHOULD</bcp14> include the stream header so the receiver can identify the
corresponding subscription and accurately account for reset data streams when
handling PUBLISH_DONE (see <xref target="message-publish-done"/>).  Publishers that reset
data streams without using RESET_STREAM_AT with an appropriate reliable_size can
cause subscribers to hold on to subscription state until a timeout expires.</t>
          <t>A sender might send all objects in a Subgroup and the FIN on a QUIC stream,
and then reset the stream. In this case, the receiving application would receive
the FIN if and only if all objects were received. If the application receives
all data on the stream and the FIN, it can ignore any subsequent reset.</t>
          <t>If a sender will not deliver any objects from a Subgroup, it <bcp14>MAY</bcp14> send
a SUBGROUP_HEADER on a new stream, with no objects, and then send RESET_STREAM_AT
with a reliable_size equal to the length of the stream header. This explicitly
tells the receiver there is an unsent Subgroup.</t>
          <t>A relay <bcp14>MUST NOT</bcp14> forward an Object on an existing Subgroup stream unless it is
the next Object in that Subgroup.  A relay determines that an Object is the next
Object in the Subgroup if at least one of the following is true:</t>
          <ul spacing="normal">
            <li>
              <t>The Object ID is one greater than the previous Object sent on this Subgroup
stream.</t>
            </li>
            <li>
              <t>The Object was received on the same upstream Subgroup stream as the
previously sent Object on the downstream Subgroup stream, with no other
Objects in between, unless the intervening Objects did not pass the
subscriber's filters.</t>
            </li>
            <li>
              <t>It determined all Object IDs between the current and previous Object IDs
on the Subgroup stream belong to different Subgroups or do not exist,
or do not pass the subscriber's filters.</t>
            </li>
          </ul>
          <t>If the relay does not know if an Object is the next Object, it <bcp14>MUST</bcp14> reset the
Subgroup stream and open a new one to forward it.</t>
          <t>Since SUBSCRIBEs always end on a group boundary, an ending subscription can
always cleanly close all its subgroups. A sender that terminates a stream
early for any other reason (e.g., to handoff to a different sender) <bcp14>MUST</bcp14>
reset the stream. Senders <bcp14>SHOULD</bcp14> terminate a stream on
Group boundaries to avoid doing so.</t>
          <t>An MOQT implementation that processes a stream FIN is assured it has received
all objects in a subgroup from the start of the subscription. If a relay, it
can forward stream FINs to its own subscribers once those objects have been
sent. A relay <bcp14>MAY</bcp14> treat receipt of End of Group or End of Track objects as a
signal to close corresponding streams even if the FIN has not arrived, as
further objects on the stream would be a protocol violation.</t>
          <t>Similarly, an End of Group Object indicates the maximum Object ID in the
Group, so if all Objects in the Group have been received, a FIN can be sent
on any stream where the entire subgroup has been sent.</t>
          <t>Processing a reset means that there might be other
objects in the Subgroup beyond the last one received. A relay might immediately
reset the corresponding downstream stream, or it might attempt to recover the
missing Objects in an effort to send all the Objects in the subgroups and the FIN.
It also might send RESET_STREAM_AT with reliable_size set to the last Object it
has, so as to reliably deliver the Objects it has while signaling that other
Objects might exist.</t>
          <t>A subscriber <bcp14>MAY</bcp14> send a QUIC STOP_SENDING frame for a subgroup stream if the
Group or Subgroup is no longer of interest to it. The publisher <bcp14>SHOULD</bcp14>
respond with a reset. If RESET_STREAM_AT is sent, note that the receiver has
indicated no interest in the objects, so setting a reliable_size beyond the
stream header is of questionable utility.</t>
          <t>Resets and STOP_SENDING on SUBSCRIBE data streams have no impact on other
Subgroups in the Group or the subscription, although applications might cancel all
Subgroups in a Group at once.</t>
          <t>A publisher that receives a STOP_SENDING on a Subgroup stream <bcp14>SHOULD NOT</bcp14> attempt
to open a new stream to deliver additional Objects in that Subgroup.  However,
if the publisher subsequently receives a REQUEST_UPDATE that resumes the
subscription, it <bcp14>MAY</bcp14> open a new stream to deliver Objects in that Subgroup,
as the update indicates the subscriber has renewed interest in forwarded Objects.</t>
          <t>The application <bcp14>SHOULD</bcp14> use a relevant error code when resetting a stream,
as defined in <xref target="stream-reset-codes"/>.</t>
        </section>
      </section>
      <section anchor="fetch-streams">
        <name>Fetch Streams</name>
        <section anchor="fetch-header">
          <name>Fetch Header</name>
          <t>When a stream begins with <tt>FETCH_HEADER</tt>, all objects on the stream belong to the
track requested in the message identified by <tt>Request ID</tt>.</t>
          <figure anchor="fetch-header-format">
            <name>MOQT FETCH_HEADER</name>
            <artwork><![CDATA[
FETCH_HEADER {
  Type (vi64) = 0x5,
  Request ID (vi64),
}
]]></artwork>
          </figure>
          <t>Each Object sent on a FETCH stream after the FETCH_HEADER has the following
format:</t>
          <figure anchor="object-fetch-format">
            <name>MOQT Fetch Object Fields</name>
            <artwork><![CDATA[
{
  Serialization Flags (vi64),
  [Group ID Delta (vi64),]
  [Subgroup ID (vi64),]
  [Object ID Delta (vi64),]
  [Publisher Priority (8),]
  [Properties (..),]
  Object Payload Length (vi64),
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Serialization Flags field defines the serialization of the Object. It is
a variable-length integer. When less than 128, the bits represent flags
described in <xref target="fetch-serialization-flags"/>. When 128 or greater, the value
signals an indicator; the defined values are:</t>
          <t><strong>Reserved Serialization Flags values:</strong></t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Meaning</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x8C</td>
                <td align="left">End of Non-Existent Range</td>
              </tr>
              <tr>
                <td align="left">0x10C</td>
                <td align="left">End of Unknown Range</td>
              </tr>
              <tr>
                <td align="left">0x20C</td>
                <td align="left">End of Timed-Out Range</td>
              </tr>
              <tr>
                <td align="left">0x40C</td>
                <td align="left">End of Gone Range</td>
              </tr>
              <tr>
                <td align="left">0x80</td>
                <td align="left">End of Group</td>
              </tr>
              <tr>
                <td align="left">0x81</td>
                <td align="left">End of Track</td>
              </tr>
            </tbody>
          </table>
          <t>If an endpoint receives any other value greater than 127, it <bcp14>MUST</bcp14> close the
session with <tt>MALFORMED_OBJECT</tt>.</t>
          <section anchor="fetch-serialization-flags">
            <name>Flags</name>
            <t><strong>Subgroup ID encoding (bits 0-1, mask 0x03):</strong> The two least significant
bits of the Serialization Flags form a two-bit field that defines the
encoding of the Subgroup ID.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Value</th>
                  <th align="left">Meaning</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0x00</td>
                  <td align="left">Subgroup ID is zero</td>
                </tr>
                <tr>
                  <td align="left">0x01</td>
                  <td align="left">Subgroup ID is the prior Object's Subgroup ID</td>
                </tr>
                <tr>
                  <td align="left">0x02</td>
                  <td align="left">Subgroup ID is the prior Object's Subgroup ID plus one</td>
                </tr>
                <tr>
                  <td align="left">0x03</td>
                  <td align="left">The Subgroup ID field is present</td>
                </tr>
              </tbody>
            </table>
            <t><strong>Independent flag bits:</strong> Each of the following is an independent boolean;
a set bit (1) indicates the corresponding condition is true.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Bitmask</th>
                  <th align="left">Condition if set</th>
                  <th align="left">Condition if not set (0)</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0x04</td>
                  <td align="left">Object ID Delta is present</td>
                  <td align="left">Object ID is the prior Object's ID plus one</td>
                </tr>
                <tr>
                  <td align="left">0x08</td>
                  <td align="left">Group ID Delta is present</td>
                  <td align="left">Group ID is the prior Object's Group ID</td>
                </tr>
                <tr>
                  <td align="left">0x10</td>
                  <td align="left">Priority field is present</td>
                  <td align="left">Priority is the prior Object's Priority</td>
                </tr>
                <tr>
                  <td align="left">0x20</td>
                  <td align="left">Properties field is present</td>
                  <td align="left">Properties field is not present</td>
                </tr>
                <tr>
                  <td align="left">0x40</td>
                  <td align="left">Datagram: ignore the two least significant bits</td>
                  <td align="left">Decode the Subgroup ID as indicated by the two least significant bits</td>
                </tr>
              </tbody>
            </table>
            <t>The first Object <bcp14>MUST</bcp14> include a Group ID Delta and Object ID Delta, and
these values are the absolute Group ID and Object ID. If the first Object in
the FETCH response uses a flag that references fields in the prior Object,
the Subscriber <bcp14>MUST</bcp14> close the session with <tt>MALFORMED_OBJECT</tt>.</t>
            <t>If the Group ID Delta field is present on an Object other than the first, the
Group ID is computed from the Group ID Delta and the prior Object's Group ID.
If the Group Order is Ascending, the Group ID is the prior Object's Group ID
plus the Group ID Delta + 1.  If the Group Order is Descending, the Group ID is
the prior Object's Group ID minus the (Group ID Delta + 1). If the computed
Group ID would be less than 0 or greater than 2^64-1, the Subscriber <bcp14>MUST</bcp14>
close the Session with <tt>DELTA_ENCODING_OVERFLOW</tt>.</t>
            <t>When the Group ID Delta field is present, the Object ID is the value of Object ID Delta if
present. When the Group ID Delta field is not present, the Object ID is the prior Object's ID
plus the Object ID Delta + 2 if present. If Object ID Delta is not present, the Object ID is the
prior Object's ID plus one, regardless of which group it belongs to. If the computed Object ID
would be greater than 2^64-1, the Subscriber <bcp14>MUST</bcp14> close the Session with
<tt>DELTA_ENCODING_OVERFLOW</tt>.</t>
            <t>The Object Properties structure is defined in <xref target="object-properties"/>.</t>
            <t>When encoding an Object with a Delivery Mode of "Datagram" (see
<xref target="object-properties"/>), the object has no Subgroup ID. The publisher <bcp14>MUST</bcp14> SET bit 0x40 to '1'.
When 0x40 is set, it <bcp14>SHOULD</bcp14> set the two least significant bits to zero and the subscriber
<bcp14>MUST</bcp14> ignore the bits.</t>
          </section>
        </section>
        <section anchor="end-of-range">
          <name>End of Range</name>
          <t>When the Serialization Flags field indicates an End of Range (0x8C, 0x10C,
0x20C, or 0x40C), the Group ID Delta and Object ID Delta fields are always
present. Subgroup ID, Priority and Properties are not present. All Objects with
Locations between the last serialized Object, if any, and the Location decoded
from this indicator, inclusive, either do not exist (when Serialization Flags is
0x8C), are Unknown (0x10C), are timed out (0x20C), or are Gone (0x40C).</t>
          <section anchor="end-of-range-id-decoding">
            <name>ID Decoding</name>
            <t>If this End of Range indicator is the first entry after the FETCH_HEADER, both
fields encode absolute IDs. Otherwise, the prior Group ID and prior Object ID
are the decoded IDs of the most recent preceding Object or End of Range
indicator.</t>
            <t>For subsequent indicators, the Group ID is the prior Group ID plus Group ID
Delta for Ascending Group Order, or minus Group ID Delta for Descending Group
Order. If Group ID Delta is zero, the Object ID is the prior Object ID plus
Object ID Delta + 1. When Group ID Delta is nonzero, the Object ID Delta field
contains the absolute Object ID in the new Group.</t>
            <t>If either decoded ID is less than zero or greater than 2^64-1, the Subscriber
<bcp14>MUST</bcp14> close the Session with <tt>DELTA_ENCODING_OVERFLOW</tt>.</t>
          </section>
          <section anchor="prior-object-fields">
            <name>Prior Object Fields</name>
            <t>When Serialization Flags is 0x80 (End of Group) or 0x81 (End of Track), no
other fields are present.  The prior Object is the last Object in its Group, or
in the Track, respectively.  End of Track also indicates End of Group.  The
prior Object ID becomes 2^64-1.</t>
            <t>When an Object follows an End of Range indicator and uses flags that reference
the "prior Object", the prior Object fields are determined as follows:</t>
            <ul spacing="normal">
              <li>
                <t>Prior Group ID and prior Object ID: The decoded values from the End of Range
indicator.</t>
              </li>
              <li>
                <t>Prior Subgroup ID: The Subgroup ID from the last actual Object before the
End of Range indicator. If there was no prior Object, an endpoint that
receives a flag referencing the prior Subgroup ID <bcp14>MUST</bcp14> close the session
with <tt>MALFORMED_OBJECT</tt>.</t>
              </li>
              <li>
                <t>Prior Priority: The Priority from the last actual Object before the End of
Range indicator. If there was no prior Object, an endpoint that receives a
flag referencing the prior Priority <bcp14>MUST</bcp14> close the session with
<tt>MALFORMED_OBJECT</tt>.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
      <section anchor="padding">
        <name>Padding</name>
        <t>An endpoint <bcp14>MAY</bcp14> send padding on unidirectional streams or datagrams.  Padding
does not carry Objects or any other application data.  An endpoint can use
padding to probe for additional bandwidth while minimizing the impact on the
delivery of application data.</t>
        <t>To avoid interfering with the delivery of Objects, senders <bcp14>SHOULD</bcp14> send padding
streams at a lower priority than any control stream or Object data.</t>
        <section anchor="padding-streams">
          <name>Padding Streams</name>
          <t>An endpoint <bcp14>MAY</bcp14> open a unidirectional stream with a stream type of 0x132B3E28 to send
padding data. The stream begins with the stream type, followed by zero or more
bytes that <bcp14>MUST</bcp14> all be set to zero.</t>
          <figure anchor="padding-format">
            <name>MOQT Padding Stream</name>
            <artwork><![CDATA[
PADDING STREAM {
  Type (vi64) = 0x132B3E28,
  Padding Data (..) = 0x00..
}
]]></artwork>
          </figure>
          <t>The receiver <bcp14>MUST</bcp14> discard all data received on a padding stream to prevent
exhausting flow control.</t>
          <t>Either the sender or the receiver <bcp14>MAY</bcp14> cancel a padding stream at any time
without affecting any MOQT application state.</t>
        </section>
        <section anchor="padding-datagrams">
          <name>Padding Datagrams</name>
          <t>An endpoint <bcp14>MAY</bcp14> send a datagram with a type of 0x132B3E29 to send padding data.
The datagram contains the type followed by zero or more bytes that <bcp14>MUST</bcp14> all be
set to zero.</t>
          <figure anchor="padding-datagram-format">
            <name>MOQT Padding Datagram</name>
            <artwork><![CDATA[
PADDING DATAGRAM {
  Type (vi64) = 0x132B3E29,
  Padding Data (..) = 0x00..
}
]]></artwork>
          </figure>
          <t>The receiver <bcp14>MUST</bcp14> discard all data received in a padding datagram.</t>
        </section>
      </section>
    </section>
    <section anchor="error-handling">
      <name>Error Handling</name>
      <section anchor="malformed-tracks">
        <name>Malformed Tracks</name>
        <t>There are multiple ways a publisher can transmit a Track that does not conform
to MOQT constraints. Such a Track is considered malformed.  Some example
conditions that constitute a malformed track when detected by a receiver
include:</t>
        <ol spacing="normal" type="1"><li>
            <t>An Object with a particular Subgroup ID is received, but its
 Publisher Priority is different from that of the previous Object with the same
 Subgroup ID.</t>
          </li>
          <li>
            <t>An Object is received whose Object ID is larger than the final Object in the
Subgroup.  The final Object in a Subgroup is the last Object received on a
Subgroup stream before a FIN.</t>
          </li>
          <li>
            <t>A Subgroup is received over multiple transport streams terminated by FIN with
different final Objects.</t>
          </li>
          <li>
            <t>An Object is received in a Group whose Object
ID is larger than the final Object in the Group.  The final Object in a Group
is the Object with Status END_OF_GROUP, or the last Object before a FIN in a
Subgroup which has the END_OF_GROUP bit set.  If the end of a Group is
implicitly determined via a gap in a FETCH response, the final Object in the
Group remains unknown.</t>
          </li>
          <li>
            <t>An Object is received whose Group and Object ID are larger than
the final Object in the Track.  The final Object in a Track is the Object
with Status END_OF_TRACK.</t>
          </li>
          <li>
            <t>The same Object is received more than once with different Payload or
other immutable properties.</t>
          </li>
          <li>
            <t>An Object is received with a different Delivery Mode than previously
observed.</t>
          </li>
          <li>
            <t>A supported Property is received outside its scope, such as a Track-only
Property received as an Object Property (see <xref target="properties"/>).</t>
          </li>
          <li>
            <t>A Track or Object contains more than one instance of a Property that does
not allow multiple instances (see <xref target="properties"/>).</t>
          </li>
          <li>
            <t>An Object is received after it has been recorded as not existing, or is
signalled as not existing after it was received (see <xref target="object-states"/>).</t>
          </li>
        </ol>
        <t>The above list of conditions is not considered exhaustive.</t>
        <t>When a subscriber detects a Malformed Track, it <bcp14>MUST</bcp14> cancel any corresponding
subscription or fetches for that Track from that publisher
(see <xref target="request-cancellation"/>), and <bcp14>SHOULD</bcp14> deliver an error to the application.
If a relay detects a Malformed Track, it <bcp14>MUST</bcp14> immediately terminate downstream
subscriptions with PUBLISH_DONE and reset any fetch streams with
Status Code <tt>MALFORMED_TRACK</tt>. Object(s) triggering Malformed Track status
<bcp14>MUST NOT</bcp14> be cached.</t>
      </section>
      <section anchor="session-termination-codes">
        <name>Session Termination Codes</name>
        <t>When terminating the Session (<xref target="session-termination"/>), the application <bcp14>MAY</bcp14> use
any error message and <bcp14>SHOULD</bcp14> use a relevant code, as defined below:</t>
        <dl>
          <dt>NO_ERROR (0x0):</dt>
          <dd>
            <t>The session is being terminated without an error.</t>
          </dd>
          <dt>INTERNAL_ERROR (0x1):</dt>
          <dd>
            <t>An implementation specific error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x2):</dt>
          <dd>
            <t>The client is not authorized to establish a session.</t>
          </dd>
          <dt>PROTOCOL_VIOLATION (0x3):</dt>
          <dd>
            <t>The remote endpoint performed an action that was disallowed by the
specification and no more specific code applies.</t>
          </dd>
        </dl>
        <t>Codes from 0x200 to 0x4FF are organized into ranges by category:</t>
        <ul spacing="normal">
          <li>
            <t>0x200-0x2FF: Data stream and datagram errors</t>
          </li>
          <li>
            <t>0x300-0x3FF: Control stream and control message errors</t>
          </li>
          <li>
            <t>0x400-0x4FF: Errors that can occur in either</t>
          </li>
        </ul>
        <t>The values reserved for greasing (<xref target="grease"/>) that fall within these ranges are
not assigned to a category.  An endpoint that receives any other unrecognized
code within one of these ranges can use the range to identify the category of
the error.</t>
        <dl>
          <dt>INVALID_REQUEST_ID (0x4):</dt>
          <dd>
            <t>The endpoint received a Request ID with an incorrect least significant
bit for the sender, or a duplicate Request ID. See <xref target="request-id"/>.</t>
          </dd>
          <dt>DUPLICATE_TRACK_ALIAS (0x5):</dt>
          <dd>
            <t>The endpoint attempted to use a Track Alias that was already in use.</t>
          </dd>
          <dt>MALFORMED_KEY_VALUE (0x6):</dt>
          <dd>
            <t>A Key-Value-Pair (<xref target="moq-key-value-pair"/>), such as a Setup Option or a
Property, has a Value that does not match the definition of its Type.</t>
          </dd>
          <dt>INVALID_PATH (0x8):</dt>
          <dd>
            <t>The PATH parameter was used by a server, on a WebTransport session, or the
server does not support the path.</t>
          </dd>
          <dt>MALFORMED_PATH (0x9):</dt>
          <dd>
            <t>The PATH parameter does not conform to the rules in <xref target="path"/>.</t>
          </dd>
          <dt>GOAWAY_TIMEOUT (0x10):</dt>
          <dd>
            <t>The session was closed because the peer took too long to close the session
in response to a GOAWAY (<xref target="message-goaway"/>) message. See session migration
(<xref target="session-migration"/>).</t>
          </dd>
          <dt>CONTROL_MESSAGE_TIMEOUT (0x11):</dt>
          <dd>
            <t>The session was closed because the peer took too long to respond to a
control message.</t>
          </dd>
          <dt>DATA_STREAM_TIMEOUT (0x12):</dt>
          <dd>
            <t>The session was closed because the peer took too long to send data expected
on an open Data Stream (see <xref target="data-streams"/>). This includes fields of a
stream header or an object header within a data stream. If an endpoint
times out waiting for a new object header on an open subgroup stream, it
<bcp14>MAY</bcp14> send a STOP_SENDING on that stream or terminate the subscription.</t>
          </dd>
          <dt>AUTH_TOKEN_CACHE_OVERFLOW (0x13):</dt>
          <dd>
            <t>The Session limit <xref target="max-auth-token-cache-size"/> of the size of all
registered Authorization tokens has been exceeded.</t>
          </dd>
          <dt>DUPLICATE_AUTH_TOKEN_ALIAS (0x14):</dt>
          <dd>
            <t>Authorization Token attempted to register an Alias that was in use (see
<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x16):</dt>
          <dd>
            <t>Invalid Auth Token serialization (see <xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>UNKNOWN_AUTH_TOKEN_ALIAS (0x17):</dt>
          <dd>
            <t>No registered token found for the provided Alias (see
<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x18):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>INVALID_AUTHORITY (0x19):</dt>
          <dd>
            <t>The specified AUTHORITY does not correspond to this server or cannot be
used in this context.</t>
          </dd>
          <dt>MALFORMED_AUTHORITY (0x1A):</dt>
          <dd>
            <t>The AUTHORITY value is syntactically invalid.</t>
          </dd>
          <dt>TOO_MANY_REQUEST_UPDATES (0x1B):</dt>
          <dd>
            <t>The endpoint received a REQUEST_UPDATE that exceeded the per-stream limit
communicated via the MAX_REQUEST_UPDATES Setup Option
(<xref target="max-request-updates"/>).</t>
          </dd>
          <dt>INVALID_STREAM_HEADER (0x200):</dt>
          <dd>
            <t>A data stream or datagram has an unknown type or invalid Type Flags.</t>
          </dd>
          <dt>MALFORMED_OBJECT (0x201):</dt>
          <dd>
            <t>The serialization of an Object on a data stream or in a datagram cannot be
decoded, for example a flag references a prior Object that does not exist.</t>
          </dd>
          <dt>INVALID_OBJECT_STATUS (0x202):</dt>
          <dd>
            <t>An Object has an invalid Object Status, or has Properties when its status is
not Normal.</t>
          </dd>
          <dt>TRUNCATED_OBJECT (0x203):</dt>
          <dd>
            <t>A data stream ended with a FIN in the middle of an Object.</t>
          </dd>
          <dt>MALFORMED_MESSAGE (0x300):</dt>
          <dd>
            <t>A control message cannot be parsed or is missing a required element, for
example its length does not match its contents.</t>
          </dd>
          <dt>INVALID_FIELD (0x301):</dt>
          <dd>
            <t>A control message was parsed, but a field has a value that is not allowed.</t>
          </dd>
          <dt>INVALID_TRACK_NAMESPACE (0x302):</dt>
          <dd>
            <t>A Track Namespace does not conform to <xref target="track-namespace-structure"/>.</t>
          </dd>
          <dt>UNEXPECTED_MESSAGE (0x303):</dt>
          <dd>
            <t>A control message of an unknown type was received, or a message was received
on the wrong stream, in the wrong order, or more times than allowed.</t>
          </dd>
          <dt>ROLE_VIOLATION (0x304):</dt>
          <dd>
            <t>The peer sent a message or field that is not allowed for its role, for
example a server receiving a non-empty New Session URI.</t>
          </dd>
          <dt>INVALID_PARAMETER (0x305):</dt>
          <dd>
            <t>A Message Parameter (<xref target="message-params"/>) is unknown, duplicated, not allowed
in the message, or has a value outside its allowed range.</t>
          </dd>
          <dt>CLOSED_CONTROL_STREAM (0x306):</dt>
          <dd>
            <t>The peer closed the control stream (<xref target="session-init"/>).</t>
          </dd>
          <dt>DELTA_ENCODING_OVERFLOW (0x400):</dt>
          <dd>
            <t>A value decoded from a delta encoding is less than 0 or greater than
2^64 - 1.</t>
          </dd>
          <dt>FIELD_LENGTH_EXCEEDED (0x401):</dt>
          <dd>
            <t>A field or structure is longer than its maximum allowed length.</t>
          </dd>
        </dl>
        <t>When more than one code applies, an endpoint uses DELTA_ENCODING_OVERFLOW or
FIELD_LENGTH_EXCEEDED in preference to the other codes.</t>
      </section>
      <section anchor="request-error-codes">
        <name>Request Error Codes</name>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in REQUEST_ERROR
(<xref target="message-request-error"/>), as defined below and assigned in
<xref target="iana-request-error"/>. Most codepoints have identical meanings for various
request types, but some have request-specific meanings.</t>
        <dl>
          <dt>INTERNAL_ERROR:</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED:</dt>
          <dd>
            <t>The subscriber is not authorized to perform the requested action on the given
track.  This might be retryable if the authorization token is not yet valid.</t>
          </dd>
          <dt>TIMEOUT:</dt>
          <dd>
            <t>The subscription could not be completed before an implementation specific
timeout. For example, a relay could not establish an upstream subscription
within the timeout.</t>
          </dd>
          <dt>NOT_SUPPORTED:</dt>
          <dd>
            <t>The endpoint does not support the type of request.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN:</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN:</dt>
          <dd>
            <t>Authorization token has expired (<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>GOING_AWAY:</dt>
          <dd>
            <t>The endpoint has received a GOAWAY and <bcp14>MAY</bcp14> reject new requests.</t>
          </dd>
          <dt>EXCESSIVE_LOAD:</dt>
          <dd>
            <t>The responder is overloaded and cannot process the request at this time. The
sender <bcp14>SHOULD</bcp14> use the Retry Interval to indicate when the request can be retried.</t>
          </dd>
          <dt>UNAVAILABLE:</dt>
          <dd>
            <t>The responder cannot fulfill this request at this time, but might be able to
later; for example, a relay lacks stream credit to forward it upstream (see
<xref target="request-stream-credit"/>).  The sender <bcp14>SHOULD</bcp14> use the Retry Interval to
indicate when the request can be retried.</t>
          </dd>
          <dt>UNSUPPORTED_EXTENSION:</dt>
          <dd>
            <t>The track contains a Mandatory Track Property
(see <xref target="mandatory-track-properties"/>) that the endpoint does not understand.
The UNSUPPORTED_PROPERTY Error Detail (<xref target="error-detail-unsupported-property"/>)
identifies which property.</t>
          </dd>
          <dt>REDIRECT:</dt>
          <dd>
            <t>The request cannot be fulfilled by this endpoint, but could succeed at the
location specified in the REDIRECT Error Detail (<xref target="error-detail-redirect"/>).
The requester <bcp14>SHOULD</bcp14> establish a new session to the provided URI (if present) and retry the request using the
Redirect target. A Retry Interval of 0 indicates the original request <bcp14>SHOULD NOT</bcp14> be retried as sent;
it does not prevent the requester from following a Redirect to a different
URI or Redirect target. This error code can appear in
response to SUBSCRIBE, FETCH, TRACK_STATUS, PUBLISH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS. Relays are not required to follow
redirects from upstream
and <bcp14>MAY</bcp14> forward a REDIRECT response to matching downstream requests. A relay
<bcp14>MAY</bcp14> cache a REDIRECT response for up to Retry Interval
milliseconds and use it to respond to subsequent matching requests without
forwarding them upstream.</t>
          </dd>
        </dl>
        <t>Below are errors for use by the publisher. They can appear in response to
SUBSCRIBE, FETCH, TRACK_STATUS, SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS,
unless otherwise noted.</t>
        <dl>
          <dt>DOES_NOT_EXIST:</dt>
          <dd>
            <t>The track or namespace is not available at the publisher.</t>
          </dd>
          <dt>INVALID_RANGE:</dt>
          <dd>
            <t>In response to SUBSCRIBE or FETCH, specified Filter or range of Locations
cannot be satisfied.</t>
          </dd>
          <dt>INVALID_FILTER:</dt>
          <dd>
            <t>A filter parameter is invalid.</t>
          </dd>
          <dt>MALFORMED_TRACK:</dt>
          <dd>
            <t>In response to a FETCH, a relay publisher detected the track was
malformed (see <xref target="malformed-tracks"/>).</t>
          </dd>
        </dl>
        <t>The following are errors for use by the subscriber. They can appear in response
to PUBLISH or PUBLISH_NAMESPACE, unless otherwise noted.</t>
        <dl>
          <dt>UNINTERESTED:</dt>
          <dd>
            <t>The subscriber is not interested in the track or namespace.</t>
          </dd>
        </dl>
        <t>Errors below can only be used in response to one message type.</t>
        <dl>
          <dt>NAMESPACE_TOO_LARGE:</dt>
          <dd>
            <t>In response to SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS, the namespace prefix
matches more publishers than the relay is willing to enumerate.</t>
          </dd>
          <dt>CONFLICTING_FILTERS:</dt>
          <dd>
            <t>In response to SUBSCRIBE_TRACKS, the filter parameters conflict among
too many subscribers to aggregate the subscription upstream or otherwise
efficiently service it.</t>
          </dd>
        </dl>
      </section>
      <section anchor="publish-done-codes">
        <name>Publish Done Codes</name>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant status code in PUBLISH_DONE
(<xref target="message-publish-done"/>), as defined below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The subscriber is no longer authorized to subscribe to the given track.</t>
          </dd>
          <dt>TRACK_ENDED (0x2):</dt>
          <dd>
            <t>The track is no longer being published.</t>
          </dd>
          <dt>GOING_AWAY (0x4):</dt>
          <dd>
            <t>The subscriber or publisher issued a GOAWAY message.</t>
          </dd>
          <dt>TOO_FAR_BEHIND (0x5):</dt>
          <dd>
            <t>The publisher's queue of objects to be sent to the given subscriber exceeds
its implementation defined limit.</t>
          </dd>
          <dt>EXPIRED (0x6):</dt>
          <dd>
            <t>The publisher reached the timeout specified in SUBSCRIBE_OK.</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x7):</dt>
          <dd>
            <t>The authorization token that authorized the subscription has expired
(see <xref target="message-publish-done"/>).</t>
          </dd>
          <dt>MALFORMED_TRACK (0x12):</dt>
          <dd>
            <t>A relay publisher detected that the track was malformed (see
<xref target="malformed-tracks"/>).</t>
          </dd>
          <dt>UPDATE_FAILED (0x8):</dt>
          <dd>
            <t>REQUEST_UPDATE failed on this subscription (see
<xref target="message-request-update"/>).</t>
          </dd>
          <dt>EXCESSIVE_LOAD (0x9):</dt>
          <dd>
            <t>The publisher is overloaded and is terminating the subscription.</t>
          </dd>
        </dl>
      </section>
      <section anchor="stream-reset-codes">
        <name>Stream Reset Error Codes</name>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code when resetting or sending
STOP_SENDING on any stream.</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific error.</t>
          </dd>
          <dt>CANCELLED (0x1):</dt>
          <dd>
            <t>The stream was cancelled by either endpoint. For Subscriptions,
PUBLISH_DONE (<xref target="message-publish-done"/>) may have a more detailed status code.</t>
          </dd>
          <dt>DELIVERY_TIMEOUT (0x2):</dt>
          <dd>
            <t>A delivery timeout (<xref target="delivery-timeouts"/>) was exceeded for this stream.</t>
          </dd>
          <dt>SESSION_CLOSED (0x3):</dt>
          <dd>
            <t>The session is being closed.</t>
          </dd>
          <dt>GOING_AWAY (0x4):</dt>
          <dd>
            <t>The endpoint is rejecting this request because it has sent or received a GOAWAY.</t>
          </dd>
          <dt>TOO_FAR_BEHIND (0x5):</dt>
          <dd>
            <t>The corresponding subscription has exceeded the publisher's resource limits and
is being terminated (see <xref target="delivery-timeouts"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x7):</dt>
          <dd>
            <t>The authorization token for the request has expired.</t>
          </dd>
          <dt>EXCESSIVE_LOAD (0x9):</dt>
          <dd>
            <t>The endpoint is overloaded and is resetting this stream.</t>
          </dd>
          <dt>MALFORMED_TRACK (0x12):</dt>
          <dd>
            <t>A relay publisher detected that the track was malformed (see
<xref target="malformed-tracks"/>).</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="grease">
      <name>Grease</name>
      <t>To ensure that implementations correctly handle unknown values and do not
fail when encountering protocol extensions they do not understand, this document
reserves a range of values for the purpose of greasing; see <xref section="3.3" sectionFormat="of" target="RFC9170"/>.</t>
      <t>Grease values follow the pattern <tt>0x7f * N + 0x9D</tt> for non-negative
integer values of N (that is, 0x9D, 0x11C, ..., 0x3fffffffffffffde).</t>
      <t>The following registries include GREASE reservations:</t>
      <ul spacing="normal">
        <li>
          <t>Setup Options (<xref target="iana-setup-options"/>)</t>
        </li>
        <li>
          <t>Properties (<xref target="iana-properties"/>)</t>
        </li>
        <li>
          <t>Session Termination Error Codes (<xref target="iana-session-termination"/>)</t>
        </li>
        <li>
          <t>REQUEST_ERROR Codes (<xref target="iana-request-error"/>)</t>
        </li>
        <li>
          <t>Error Detail Types (<xref target="iana-error-details"/>)</t>
        </li>
        <li>
          <t>PUBLISH_DONE Codes (<xref target="iana-publish-done"/>)</t>
        </li>
        <li>
          <t>Stream Reset Error Codes (<xref target="iana-reset-stream"/>)</t>
        </li>
        <li>
          <t>MOQT Auth Token Type</t>
        </li>
      </ul>
      <t>Because new values in these registries can be defined without negotiation,
implementations <bcp14>MUST</bcp14> handle unknown values gracefully. Endpoints <bcp14>MUST NOT</bcp14>
close the session solely because they received an unknown value. The
following rules apply:</t>
      <t>Setup Options with reserved identifiers have no semantics and can carry
arbitrary values. Endpoints <bcp14>MUST</bcp14> ignore unknown Setup Options as specified
in <xref target="message-setup"/>.</t>
      <t>Unknown Properties <bcp14>MUST</bcp14> be handled as specified in <xref target="properties"/>.</t>
      <t>Unknown Error Detail types <bcp14>MUST</bcp14> be ignored as specified in <xref target="error-details"/>.</t>
      <t>Receipt of an unknown error code in any error context (Session Termination,
REQUEST_ERROR, PUBLISH_DONE, or Data Stream Reset) <bcp14>MUST</bcp14> be treated as
equivalent to <tt>INTERNAL_ERROR</tt> for that context. An endpoint <bcp14>MUST NOT</bcp14> close
the session because it received an unknown error code in a REQUEST_ERROR
or PUBLISH_DONE.</t>
    </section>
    <section anchor="transport-considerations">
      <name>Transport Considerations</name>
      <section anchor="congestion-control-considerations">
        <name>Congestion Control Considerations</name>
        <t>MOQT does not specify a congestion controller, but there are important attributes
to consider when selecting a congestion controller for use with an application
built on top of MOQT.</t>
        <section anchor="bufferbloat">
          <name>Bufferbloat</name>
          <t>Traditional AIMD congestion controllers (ex. CUBIC <xref target="RFC9438"/> and Reno <xref target="RFC6582"/>)
are prone to Bufferbloat. Bufferbloat occurs when elements along the path build up
a substantial queue of packets, commonly more than doubling the round trip time.
These queued packets cause head-of-line blocking and latency, even when there is
no packet loss.</t>
        </section>
        <section anchor="application-limited">
          <name>Application-Limited</name>
          <t>The average bitrate for latency sensitive content needs to be less than the available
bandwidth, otherwise data will be queued and/or dropped. As such,
many MOQT applications will typically be limited by the available data to send, and
not the congestion controller. Many congestion control algorithms
only increase the congestion window or bandwidth estimate if fully utilized. This
combination can lead to underestimating the available network bandwidth. As a result,
applications might need to periodically ensure the congestion controller is not
app-limited for at least a full round trip to ensure the available bandwidth can be
measured.</t>
          <t>Some applications might have APIs to allow sending duplicate data or forward error
correction to probe for more bandwidth while also limiting the impact of probing
in case it causes packet loss. Subscribers wanting to switch to an alternate
representation of a Track can subscribe to it at a lower priority, or subscribe
to additional Tracks at the lowest (255) priority to fill the congestion window
during probing intervals while minimizing the impact on higher priority
media. Publishers can send padding (<xref target="padding"/>) to probe for additional
bandwidth without requiring additional subscriptions.
Network-assisted bandwidth estimation mechanisms such as SCONE
<xref target="I-D.ietf-scone-protocol"/> can provide receivers with sustainable bandwidth hints,
which subscribers can use to inform track selection decisions and potentially avoid
unnecessary probing.</t>
        </section>
        <section anchor="consistent-throughput">
          <name>Consistent Throughput</name>
          <t>Congestion control algorithms are commonly optimized for throughput, not consistency.
For example, BBR's PROBE_RTT state halves the sending rate for more than a round trip
in order to obtain an accurate minimum RTT. Similarly, Reno halves its congestion
window upon detecting loss.  In both cases, the large reduction in sending rate might
cause issues with latency sensitive applications.</t>
        </section>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>MOQT is a protocol used hop-by-hop between original
publishers to relay, (possibly) relay to relay, and relay to end
subscribers. Thus, the security considerations need to consider first
what happens between two Endpoints, but also consider the impacts end to
end over several hops of MOQT.</t>
      <t>MOQT uses a trust model where on each hop the Endpoints need to be
securely identified, authorized to use resources of the peer, provide
confidentiality and integrity to prevent third party attacks and limit
monitoring and leakage of privacy sensitive information. The relays
within the chain from original publisher to end subscribers will have
access to Track names, Track Properties, Object Properties, as well as the object's content
unless it is end-to-end encrypted <xref target="sec-media"/>.</t>
      <t>Publishers, including Relays, require authorization to prevent unauthorized
subscriptions to content. Subscription requests can carry
authorization tokens (see <xref target="sec-authorization"/>) to prove the
subscriber's right to access specific tracks or namespaces. Relays
that aggregate subscriptions from multiple downstream subscribers <bcp14>MUST</bcp14>
ensure each subscriber is independently authorized.</t>
      <section anchor="subscription-amplification">
        <name>Subscription Amplification</name>
        <t>A malicious subscriber could attempt to overwhelm a publisher or relay
by requesting subscriptions to many tracks simultaneously. Relays
<bcp14>SHOULD</bcp14> implement rate limiting on subscription requests and <bcp14>MAY</bcp14> reject
excessive subscriptions with REQUEST_ERROR using the EXCESSIVE_LOAD error code.
Publishers <bcp14>SHOULD</bcp14> monitor
the number of active subscriptions and enforce limits to prevent
resource exhaustion from a single subscriber or session.</t>
        <t>TODO: Describe Cache Poisoning attacks</t>
      </section>
      <section anchor="communication-security">
        <name>Communication Security</name>
        <t>MOQT depends on a secure transport to provide confidentiality,
integrity and endpoint authentication between subscriber and
publisher. Implementations use QUIC or WebTransport to fulfill
the basic communication security requirements and these
implementations <bcp14>SHOULD</bcp14> follow best practices for TLS 1.3 and QUIC.
Relays <bcp14>MUST</bcp14> use authentication to prevent impersonation
(<xref target="preventing-impersonation"/>).</t>
        <t>Note that the basic security protection offered by QUIC or TCP/TLS
does not prevent traffic pattern analysis. Object sizes, sizes of
request messages, etc can make it possible for a third party observer
to identify media content, user patterns and media stream origin.</t>
      </section>
      <section anchor="sec-authorization">
        <name>Authorization</name>
        <t>MOQT supports authorization via mutual TLS (mTLS) for endpoint
identification and via token-based schemes for fine-grained,
application-defined access control. The two mechanisms can be used together.</t>
        <section anchor="sec-mtls">
          <name>Mutual TLS</name>
          <t>In mutual TLS, both peers present an X.509 certificate during the TLS 1.3
handshake (<xref target="RFC8446"/>), carried in the underlying transport. An endpoint that
verifies a server certificate does so following <xref target="RFC9525"/>.  An application
that authenticates clients via mTLS defines how a client certificate maps to
identity.</t>
          <t>Once a peer is authenticated, an application <bcp14>MAY</bcp14> use attributes in the peer's
certificate as an input to authorization decisions; the granularity and policy
of such authorization is out of scope for this document.
### Authorization Tokens {#sec-tokens}</t>
          <t>MOQT has functionality to carry Authorization tokens as message
parameters. These tokens can vary based on the application
requirements. Two variants of authorization tokens have already
been defined for MOQT, and more are expected in the future. The
current tokens are Privacy Pass Authentication for Media over QUIC
<xref target="PPA"/> and Authentication scheme for MOQT using Common Access Tokens
<xref target="CAT"/>.</t>
          <t>Tokens are expected to contain information about which actions and
which resources the endpoint providing the token is authorized to
perform and access. Relays will verify the
token to ensure that the request is authorized.</t>
        </section>
        <section anchor="replay-attacks">
          <name>Replay Attacks</name>
          <t>Replay protection for authorization tokens is the responsibility of
the specific token scheme used. Token schemes such as <xref target="CAT"/> and
<xref target="PPA"/> include requirements for relays when processing tokens and
requests.</t>
        </section>
        <section anchor="preventing-impersonation">
          <name>Preventing Impersonation</name>
          <t>A relay <bcp14>MUST</bcp14> ensure that a client cannot publish to namespaces or
tracks belonging to another identity. Impersonation occurs when a
client publishes objects that appear to originate from a different
publisher — for example, by targeting a namespace containing another
user's identifier.</t>
          <t>To prevent impersonation, a relay <bcp14>MUST</bcp14> verify that the
authenticated identity or token scope permits publishing to the
specific namespace. The mapping from authenticated identity to
permitted namespaces is determined by the authorization framework
in use.</t>
          <t>When using bearer token-based authentication (e.g., <xref target="CAT"/>), a token
that is bound to a client-held key via a confirmation claim prevents
a stolen token from being replayed by a different party.</t>
          <t>When unlinkable access is used (e.g., <xref target="PPA"/>), the token's scope
extensions determine which namespaces the bearer can publish to.
Impersonation is still prevented because the token does not grant
access beyond its defined scope.</t>
          <t>A relay that does not enforce these checks allows any connected
client to inject content into arbitrary namespaces, breaking the
integrity of content delivery.</t>
        </section>
      </section>
      <section anchor="sec-media">
        <name>Media Security</name>
        <t>MOQT uses secure transports that provide confidentiality and integrity
protection. However, media objects are accessible to relays,
and are subject to both intentional and accidental modification,
unless they are additionally end-to-end protected.</t>
        <t>The media objects transported by MOQT in various tracks from various
original publishers are subject to several considerations. The first
is source authenticity, i.e. to know that the received media objects
are what the original publisher actually published. In addition to
the media objects, it can also be important to authenticate some
Track and Object Properties. For example, timestamps are crucial to
understand where on the timeline this media fragment belongs.</t>
        <t>The second aspect is content confidentiality. Beyond direct relay
access to media objects, object sizes and traffic patterns enable
analysis of content. Track namespace and track name can also be
analyzed and correlated between end subscribers by relays.</t>
        <t>Consistent with the principle of confidential operation by default,
publishers can apply end-to-end object encryption, for example using Secure Objects
(<xref target="I-D.ietf-moq-secure-objects"/>), so that relays retain access only to
the metadata required for forwarding. Such end-to-end security
mechanisms are external to this specification and additionally provide
source authenticity. MOQT's object model enables both the object data
and Object Properties to be confidentiality and integrity protected, or
integrity protected only.</t>
        <t>Secure key distribution for end-to-end encryption is specific to the
encryption system and deployment, and outside the scope of this document.</t>
      </section>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Live content requires significant bandwidth and resources.  Failure to
set limits will quickly cause resource exhaustion.</t>
        <t>MOQT uses stream limits and flow control to impose resource limits at
the network layer.  Endpoints <bcp14>SHOULD</bcp14> set flow control limits based on the
anticipated bitrate.</t>
        <t>Endpoints <bcp14>MAY</bcp14> impose a MAX STREAM count limit which would restrict the
number of concurrent streams which an application could have in
flight.</t>
        <t>The publisher prioritizes and transmits streams out of order.  Streams
might be starved indefinitely during congestion.  The publisher and
subscriber <bcp14>MUST</bcp14> cancel a stream, preferably the one with the lowest
priority, after reaching a resource limit.</t>
        <t>A larger MAX_CONTROL_MESSAGE_SIZE (<xref target="max-control-message-size"/>) allows larger
Parameters, such as Authorization Tokens, but an endpoint that buffers complete
control messages commits that much memory per stream.  Such an endpoint needs
to grant enough flow control for a complete message on each stream, or the
endpoints can deadlock.</t>
      </section>
      <section anchor="security-timeouts">
        <name>Timeouts</name>
        <t>Implementations are advised to use timeouts to prevent resource
exhaustion attacks by a peer that does not send expected data within
an expected time.  Each implementation is expected to set its own timeouts.</t>
        <t>Places where an endpoint waits on its peer include, but are not limited to:</t>
        <ul spacing="normal">
          <li>
            <t>A response to a request</t>
          </li>
          <li>
            <t>The rest of a stream header or Object on a data stream, including a stream
whose Track Alias is not yet known (see <xref target="unknown-track-alias"/>)</t>
          </li>
          <li>
            <t>The next Object or FIN on an open Subgroup or FETCH stream</t>
          </li>
          <li>
            <t>The next Subgroup or Datagram in a subscription</t>
          </li>
          <li>
            <t>The data stream for a FETCH</t>
          </li>
          <li>
            <t>The data streams counted in PUBLISH_DONE (<xref target="message-publish-done"/>)</t>
          </li>
          <li>
            <t>Session closure after GOAWAY (<xref target="message-goaway"/>)</t>
          </li>
        </ul>
        <t>Appropriate values depend on the deployment and the applications using it,
which a relay often cannot observe, so implementations typically make them
configurable.  Shorter timeouts release resources sooner, but can terminate
slow peers that are behaving correctly.  Longer timeouts let a misbehaving peer
hold resources longer.  Delivery timeouts (<xref target="delivery-timeouts"/>) are chosen by
peers, so an endpoint does not rely on them to bound how long it waits.  When a
timeout fires, the endpoint can take the narrowest action available, such as
cancelling one request or stream instead of closing the session, and use the
most specific error code so the peer knows what failed.</t>
        <section anchor="idle-connection-handling">
          <name>Idle Connection Handling</name>
          <t>The transport connection (e.g., QUIC) underlying a MOQT session can close due to
idle timeout if no data is exchanged, either because there are no established
subscriptions or the established subscriptions are not publishing Objects
frequently.  This includes publisher sessions that have issued a
PUBLISH_NAMESPACE and are waiting for subscribers.</t>
          <t>Implementations that want to keep idle sessions open have several options:</t>
          <ul spacing="normal">
            <li>
              <t>Use transport-layer keep-alive mechanisms, such as QUIC PING frames, to
prevent idle timeout closure.</t>
            </li>
            <li>
              <t>Send periodic control messages, for example REQUEST_UPDATE with no
modified Message Parameters.</t>
            </li>
            <li>
              <t>Accept that idle connections can close and implement reconnection logic when
needed.</t>
            </li>
          </ul>
          <t>The choice of mechanism is implementation-specific.</t>
        </section>
      </section>
      <section anchor="relay-security-considerations">
        <name>Relay security considerations</name>
        <section anchor="state-maintenance">
          <name>State maintenance</name>
          <t>A Relay <bcp14>SHOULD</bcp14> have mechanisms to prevent malicious endpoints from flooding it
with PUBLISH_NAMESPACE, SUBSCRIBE_NAMESPACE, or SUBSCRIBE_TRACKS requests that
could bloat data structures. It could use QUIC stream limits to limit the number
of such requests, or could have application-specific policies that can reject
incoming requests that cause the state maintenance for the session to be
excessive.</t>
        </section>
        <section anchor="subscribenamespace-and-subscribetracks-with-short-prefixes">
          <name>SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS with short prefixes</name>
          <t>A Relay can use authorization rules in order to prevent subscriptions closer
to the root of a large prefix tree. Otherwise, if an entity sends a relay a
SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS message with a short prefix, it can
cause the relay to send a large volume of NAMESPACE or PUBLISH messages. As
changes occur in the tree of namespaces, the relay would have to send matching
NAMESPACE/NAMESPACE_DONE messages or initiate new PUBLISH streams.</t>
        </section>
      </section>
      <section anchor="impl-fingerprinting">
        <name>Implementation Identification Fingerprinting</name>
        <t>The MOQT_IMPLEMENTATION option (<xref target="moqt-implementation"/>) can reveal information
that contributes to fingerprinting, a set of techniques for identifying a
specific endpoint over time through its unique set of characteristics.</t>
        <t>Detailed implementation information, including specific version numbers,
build identifiers, or platform details, can create a unique fingerprint that
enables tracking endpoints across sessions without their awareness. When
combined with other session characteristics, even minimal implementation
identification can contribute to distinguishing one endpoint from another.</t>
        <t>To mitigate fingerprinting risks:</t>
        <ul spacing="normal">
          <li>
            <t>Implementations <bcp14>SHOULD</bcp14> send only the minimum information necessary for
interoperability debugging. A short implementation name and major version
number are typically sufficient.</t>
          </li>
          <li>
            <t>Implementations <bcp14>SHOULD NOT</bcp14> include detailed system information, build
numbers, or other attributes that could uniquely identify a specific
instance or user.</t>
          </li>
          <li>
            <t>Privacy-conscious deployments <bcp14>MAY</bcp14> omit the MOQT_IMPLEMENTATION option
entirely or send a generic value.</t>
          </li>
          <li>
            <t>Implementations <bcp14>MAY</bcp14> provide users with the ability to configure or disable
the MOQT_IMPLEMENTATION option.</t>
          </li>
        </ul>
        <t>Operators are advised that detailed implementation identification
facilitates the same privacy concerns as persistent identifiers, since it
enables correlation of sessions across time.</t>
      </section>
      <section anchor="logging-untrusted-strings">
        <name>Logging of Untrusted String Fields</name>
        <t>The Reason Phrase (<xref target="reason-phrase"/>) and MOQT_IMPLEMENTATION option
(<xref target="moqt-implementation"/>) carry sender-controlled text that is commonly written
to logs. Even though these fields are UTF-8 encoded, an endpoint that logs or
renders them <bcp14>SHOULD</bcp14> sanitize them first (for example, by escaping bytes outside
the printable ASCII range), since unsanitized values can enable log injection or
terminal escape sequence injection.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TODO: fill out currently missing registries:</t>
      <ul spacing="normal">
        <li>
          <t>MOQT ALPN values</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
        <li>
          <t>Session-Level Track Names</t>
        </li>
      </ul>
      <section anchor="uri-scheme-registrations">
        <name>URI Scheme Registrations</name>
        <t>This document requests the registration of the following URI schemes in the
"Uniform Resource Identifier (URI) Schemes" registry, per <xref target="RFC7595"/>:</t>
        <section anchor="moqt-uri-scheme-registration">
          <name>"moqt" URI Scheme Registration</name>
          <t>Scheme name: moqt</t>
          <t>Status: Permanent</t>
          <t>Applications/protocols that use this scheme name: Media over QUIC Transport
(MOQT) over native QUIC or WebTransport, as defined in this document.</t>
          <t>Contact: IETF MoQ Working Group (moq@ietf.org)</t>
          <t>Change controller: IETF</t>
          <t>References: This document</t>
        </section>
      </section>
      <section anchor="iana-media-type">
        <name>Media Type Registration</name>
        <t>This document registers the following media type in the "Media Types"
registry <xref target="RFC6838"/>:</t>
        <t>Type name: application</t>
        <t>Subtype name: moqt</t>
        <t>Required parameters: N/A</t>
        <t>Optional parameters: N/A</t>
        <t>Encoding considerations: This media type is used to identify resources
accessed via the <tt>moqt</tt> URI scheme. It is not used to label the
content of MOQT objects, which are defined by separate media types in
application-specific specifications.</t>
        <t>Security considerations: See the Security Considerations section of
this document.</t>
        <t>Interoperability considerations: N/A</t>
        <t>Published specification: This document</t>
        <t>Applications that use this media type: Implementations of the Media
over QUIC Transport (MOQT) protocol.</t>
        <t>Fragment identifier considerations: Fragment identifiers for
<tt>application/moqt</tt> follow the syntax defined in <xref target="moqt-fragment"/>.</t>
        <t>Additional information: N/A</t>
        <t>Contact: IETF MoQ Working Group (moq@ietf.org)</t>
        <t>Change controller: IETF</t>
      </section>
      <section anchor="iana-fragment-types">
        <name>MOQT URI Fragment Types</name>
        <t>This document establishes the "MOQT URI Fragment Types" registry. This
registry governs fragment type identifiers used in <tt>moqt</tt> URI fragments
as defined in <xref target="moqt-fragment"/>.</t>
        <t>New fragment type identifiers are registered using the Specification
Required policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <t>Each entry in the registry contains the following fields:</t>
        <t>| Fragment Type | Description | Specification |
|:--------------|:------------|:--------------|</t>
        <t>This registry is initially empty.</t>
      </section>
      <section anchor="iana-setup-options">
        <name>Setup Options</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x01</td>
              <td align="left">PATH</td>
              <td align="left">
                <xref target="path"/></td>
            </tr>
            <tr>
              <td align="right">0x03</td>
              <td align="left">AUTHORIZATION_TOKEN</td>
              <td align="left">
                <xref target="setup-auth-token"/></td>
            </tr>
            <tr>
              <td align="right">0x04</td>
              <td align="left">MAX_AUTH_TOKEN_CACHE_SIZE</td>
              <td align="left">
                <xref target="max-auth-token-cache-size"/></td>
            </tr>
            <tr>
              <td align="right">0x05</td>
              <td align="left">AUTHORITY</td>
              <td align="left">
                <xref target="authority"/></td>
            </tr>
            <tr>
              <td align="right">0x06</td>
              <td align="left">MAX_FILTER_RANGES</td>
              <td align="left">
                <xref target="max-filter-ranges"/></td>
            </tr>
            <tr>
              <td align="right">0x07</td>
              <td align="left">MOQT_IMPLEMENTATION</td>
              <td align="left">
                <xref target="moqt-implementation"/></td>
            </tr>
            <tr>
              <td align="right">0x08</td>
              <td align="left">MAX_REQUEST_UPDATES</td>
              <td align="left">
                <xref target="max-request-updates"/></td>
            </tr>
            <tr>
              <td align="right">0x09</td>
              <td align="left">MAX_CONTROL_MESSAGE_SIZE</td>
              <td align="left">
                <xref target="max-control-message-size"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown Setup Options as specified in
<xref target="message-setup"/>.</t>
        <t>New Setup Option types are registered using the Specification Required
policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).  Provisional registrations are
permitted to allow experimentation and avoid codepoint collisions
between independent implementations.  There is no reserved range for
private or application-specific use; implementations that need custom
Setup Options <bcp14>SHOULD</bcp14> request a provisional registration.</t>
      </section>
      <section anchor="authorization-token-alias-type">
        <name>Authorization Token Alias Type</name>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">DELETE</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">REGISTER</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">USE_ALIAS</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">USE_VALUE</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-auth-token-type">
        <name>MOQT Auth Token Type</name>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Reserved</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="message-parameters">
        <name>Message Parameters</name>
        <table>
          <thead>
            <tr>
              <th align="left">Parameter Type</th>
              <th align="left">Parameter Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x02</td>
              <td align="left">OBJECT_DELIVERY_TIMEOUT</td>
              <td align="left">
                <xref target="object-delivery-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">AUTHORIZATION_TOKEN</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="left">0x04</td>
              <td align="left">RENDEZVOUS_TIMEOUT</td>
              <td align="left">
                <xref target="rendezvous-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x06</td>
              <td align="left">SUBGROUP_DELIVERY_TIMEOUT</td>
              <td align="left">
                <xref target="subgroup-delivery-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x08</td>
              <td align="left">EXPIRES</td>
              <td align="left">
                <xref target="expires"/></td>
            </tr>
            <tr>
              <td align="left">0x09</td>
              <td align="left">LARGEST_OBJECT</td>
              <td align="left">
                <xref target="largest-param"/></td>
            </tr>
            <tr>
              <td align="left">0x0A</td>
              <td align="left">FILL_TIMEOUT</td>
              <td align="left">
                <xref target="fill-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x11</td>
              <td align="left">PAUSED</td>
              <td align="left">
                <xref target="paused-parameter"/></td>
            </tr>
            <tr>
              <td align="left">0x20</td>
              <td align="left">SUBSCRIBER_PRIORITY</td>
              <td align="left">
                <xref target="subscriber-priority"/></td>
            </tr>
            <tr>
              <td align="left">0x21</td>
              <td align="left">LOCATION_FILTER</td>
              <td align="left">
                <xref target="location-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x22</td>
              <td align="left">GROUP_ORDER</td>
              <td align="left">
                <xref target="group-order"/></td>
            </tr>
            <tr>
              <td align="left">0x23</td>
              <td align="left">FILL_PARAMETERS</td>
              <td align="left">
                <xref target="fill-parameters"/></td>
            </tr>
            <tr>
              <td align="left">0x25</td>
              <td align="left">SUBGROUP_FILTER</td>
              <td align="left">
                <xref target="subgroup-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x26</td>
              <td align="left">OBJECTID_FILTER</td>
              <td align="left">
                <xref target="objectid-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x27</td>
              <td align="left">PRIORITY_FILTER</td>
              <td align="left">
                <xref target="priority-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x28</td>
              <td align="left">OBJECT_PROPERTY_FILTER</td>
              <td align="left">
                <xref target="object-property-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x29</td>
              <td align="left">TRACK_PROPERTY_FILTER</td>
              <td align="left">
                <xref target="track-property-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x32</td>
              <td align="left">NEW_GROUP_REQUEST</td>
              <td align="left">
                <xref target="new-group-request"/></td>
            </tr>
            <tr>
              <td align="left">0x34</td>
              <td align="left">TRACK_NAMESPACE_PREFIX</td>
              <td align="left">
                <xref target="track-namespace-prefix-param"/></td>
            </tr>
            <tr>
              <td align="left">0x35</td>
              <td align="left">INCLUDE_PROPERTIES</td>
              <td align="left">
                <xref target="include-properties-param"/></td>
            </tr>
            <tr>
              <td align="left">0x36</td>
              <td align="left">SUBSCRIBE_TRACKS_ID</td>
              <td align="left">
                <xref target="subscribe-tracks-id"/></td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>Message Parameters - List which params can be repeated in the table.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-properties">
        <name>Properties</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x02</td>
              <td align="left">OBJECT_DELIVERY_TIMEOUT</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="object-delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x04</td>
              <td align="left">MAX_CACHE_DURATION</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="max-cache-duration"/></td>
            </tr>
            <tr>
              <td align="right">0x06</td>
              <td align="left">SUBGROUP_DELIVERY_TIMEOUT</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="subgroup-delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x0B</td>
              <td align="left">IMMUTABLE_PROPERTIES</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="immutable-properties"/></td>
            </tr>
            <tr>
              <td align="right">0x0E</td>
              <td align="left">DEFAULT_PUBLISHER_PRIORITY</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="publisher-priority"/></td>
            </tr>
            <tr>
              <td align="right">0x22</td>
              <td align="left">DEFAULT_PUBLISHER_GROUP_ORDER</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="group-order-pref"/></td>
            </tr>
            <tr>
              <td align="right">0x30</td>
              <td align="left">DYNAMIC_GROUPS</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="dynamic-groups"/></td>
            </tr>
            <tr>
              <td align="right">0x3C</td>
              <td align="left">PRIOR_GROUP_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-group-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x3E</td>
              <td align="left">PRIOR_OBJECT_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-object-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">Any</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>The following table contains provisional registrations for other active drafts in the moq wg.
These entries share the same Property Type space as the table above.</t>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x10</td>
              <td align="left">TIMESTAMP</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x08</td>
              <td align="left">TIMESCALE</td>
              <td align="left">Track, Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x09</td>
              <td align="left">VIDEO_FRAME_MARKING</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0C</td>
              <td align="left">AUDIO_LEVEL</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0D</td>
              <td align="left">VIDEO_CONFIG</td>
              <td align="left">Track, Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0F</td>
              <td align="left">AUDIO_CONFIG</td>
              <td align="left">Track, Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0A</td>
              <td align="left">ENCRYPTED_LIST</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-secure-objects</td>
            </tr>
            <tr>
              <td align="right">0x32</td>
              <td align="left">PADDING</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-secure-objects</td>
            </tr>
          </tbody>
        </table>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown Property types, skipping them according
to the Key-Value-Pair encoding; odd types use their length field, even
types are skipped by parsing a variable-length integer value.</t>
        <ul spacing="normal">
          <li>
            <t>MOQ Properties - we wish to define the following registration policies:
            </t>
            <ul spacing="normal">
              <li>
                <t>0x00 to 0x77: Standards Action or IESG Approval (1-byte encoding)</t>
              </li>
              <li>
                <t>0x78 to 0x7F: Reserved for application-specific use (1-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x80 to 0x37FF: Specification Required (2-byte encoding)</t>
              </li>
              <li>
                <t>0x3800 to 0x3FFF: Reserved for application-specific use (2-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x4000 to 0x7FFF: Reserved for Mandatory Track Properties
(see <xref target="mandatory-track-properties"/>). Properties registered in this range
<bcp14>MUST</bcp14> have Track scope; Object scope properties <bcp14>MUST NOT</bcp14> be registered in
this range.</t>
              </li>
              <li>
                <t>0x8000 and above: First Come First Served</t>
              </li>
            </ul>
            <t>
Code points reserved for application-specific use will never be allocated
by IANA. Applications using these values do not need to coordinate with
IANA.  Note that applications consuming tracks from uncoordinated sources may
encounter different semantics for the same code points, creating potential
collision risks.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-object-status">
        <name>Object Status</name>
        <t>This document establishes a registry for Object Status values (see
<xref target="object-status"/>). The "Payload" column indicates whether an Object with that
status is permitted to carry a non-empty payload.</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Payload</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Normal</td>
              <td align="left">Yes</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">End of Group</td>
              <td align="left">No</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">End of Track</td>
              <td align="left">No</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
          </tbody>
        </table>
        <t>New Object Status values are registered using the Specification Required
policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>). Each registration <bcp14>MUST</bcp14> indicate whether the
status permits a payload.</t>
      </section>
      <section anchor="iana-session-level-tracks">
        <name>Session-Level Track Names</name>
        <t>This document establishes a registry for session-level track names
under the <tt>.session</tt> namespace (see <xref target="session-level-tracks"/>). The
registration policy is Specification Required (per <xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <t>Each registration must include:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Track Namespace</td>
              <td align="left">The track namespace under the <tt>.session</tt> namespace, can be empty</td>
            </tr>
            <tr>
              <td align="left">Track Name</td>
              <td align="left">The track name (bytes) within the full namespace</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">Brief description of the track's purpose</td>
            </tr>
            <tr>
              <td align="left">Change Controller</td>
              <td align="left">Who may update the registration</td>
            </tr>
            <tr>
              <td align="left">Specification</td>
              <td align="left">Reference to the defining specification</td>
            </tr>
          </tbody>
        </table>
        <t>This document does not define any initial entries.</t>
      </section>
      <section anchor="iana-error-details">
        <name>Error Detail Types</name>
        <t>This document establishes the "MOQT Error Detail Types" registry, governing
the Type field of Error Details in REQUEST_ERROR (<xref target="error-details"/>).</t>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x01</td>
              <td align="left">REDIRECT</td>
              <td align="left">
                <xref target="error-detail-redirect"/></td>
            </tr>
            <tr>
              <td align="right">0x02</td>
              <td align="left">UNSUPPORTED_PROPERTY</td>
              <td align="left">
                <xref target="error-detail-unsupported-property"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>New Error Detail types are registered using the Specification Required
policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).  Provisional registrations are
permitted to allow experimentation and avoid codepoint collisions
between independent implementations.</t>
      </section>
      <section anchor="iana-error-codes">
        <name>Error Codes</name>
        <section anchor="iana-session-termination">
          <name>Session Termination Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">NO_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">PROTOCOL_VIOLATION</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_REQUEST_ID</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_TRACK_ALIAS</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_KEY_VALUE</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_PATH</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_PATH</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOAWAY_TIMEOUT</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">CONTROL_MESSAGE_TIMEOUT</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">DATA_STREAM_TIMEOUT</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">AUTH_TOKEN_CACHE_OVERFLOW</td>
                <td align="center">0x13</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x14</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x16</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x17</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x18</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_AUTHORITY</td>
                <td align="center">0x19</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTHORITY</td>
                <td align="center">0x1A</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">TOO_MANY_REQUEST_UPDATES</td>
                <td align="center">0x1B</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_STREAM_HEADER</td>
                <td align="center">0x200</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_OBJECT</td>
                <td align="center">0x201</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_OBJECT_STATUS</td>
                <td align="center">0x202</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">TRUNCATED_OBJECT</td>
                <td align="center">0x203</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_MESSAGE</td>
                <td align="center">0x300</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_FIELD</td>
                <td align="center">0x301</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_TRACK_NAMESPACE</td>
                <td align="center">0x302</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNEXPECTED_MESSAGE</td>
                <td align="center">0x303</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">ROLE_VIOLATION</td>
                <td align="center">0x304</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_PARAMETER</td>
                <td align="center">0x305</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">CLOSED_CONTROL_STREAM</td>
                <td align="center">0x306</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">DELTA_ENCODING_OVERFLOW</td>
                <td align="center">0x400</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">FIELD_LENGTH_EXCEEDED</td>
                <td align="center">0x401</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-request-error">
          <name>REQUEST_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNAVAILABLE</td>
                <td align="center">0xA</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">DOES_NOT_EXIST</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_RANGE</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNINTERESTED</td>
                <td align="center">0x20</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">NAMESPACE_TOO_LARGE</td>
                <td align="center">0x31</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNSUPPORTED_EXTENSION</td>
                <td align="center">0x33</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">REDIRECT</td>
                <td align="center">0x34</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">CONFLICTING_FILTERS</td>
                <td align="center">0x35</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_FILTER</td>
                <td align="center">0x36</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-publish-done">
          <name>PUBLISH_DONE Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">TRACK_ENDED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">UPDATE_FAILED</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-reset-stream">
          <name>Stream Reset Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">CANCELLED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">DELIVERY_TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">SESSION_CLOSED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>The original design behind this protocol was inspired by three independent
proposals: WARP <xref target="I-D.draft-lcurley-warp"/> by Luke Curley, RUSH
<xref target="I-D.draft-kpugin-rush"/> by Kirill Pugin, Nitin Garg, Alan Frindell, Jordi
Cenzano and Jake Weissman, and QUICR <xref target="I-D.draft-jennings-moq-quicr-proto"/> by
Cullen Jennings, Suhas Nandakumar and Christian Huitema.  The authors of those
documents merged their proposals to create the first draft of moq-transport.
The IETF MoQ Working Group received an enormous amount of support from many
people. The following people provided substantive contributions to this
document:</t>
      <ul spacing="normal">
        <li>
          <t>Ali Begen</t>
        </li>
        <li>
          <t>Charles Krasic</t>
        </li>
        <li>
          <t>Christian Huitema</t>
        </li>
        <li>
          <t>Cullen Jennings</t>
        </li>
        <li>
          <t>James Hurley</t>
        </li>
        <li>
          <t>Jordi Cenzano</t>
        </li>
        <li>
          <t>Kirill Pugin</t>
        </li>
        <li>
          <t>Luke Curley</t>
        </li>
        <li>
          <t>Martin Duke</t>
        </li>
        <li>
          <t>Mike English</t>
        </li>
        <li>
          <t>Mo Zanaty</t>
        </li>
        <li>
          <t>Will Law</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="use-of-generative-ai">
      <name>Use of Generative AI</name>
      <t>Generative AI tools were used to assist with drafting and editing text for this
document. All AI-generated content was reviewed and approved by the editors.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="WebTransport">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   WebTransport over HTTP/3 is a binding of the WebTransport protocol
   framework [OVERVIEW] to HTTP/3 [HTTP3].  It provides support for
   unidirectional streams, bidirectional streams, and datagrams, all
   multiplexed within the same HTTP/3 connection.  WebTransport enables
   application clients constrained by the Web security model to
   communicate with a remote application server using a secure
   multiplexed transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-16"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="I-D.draft-ietf-quic-reliable-stream-reset">
          <front>
            <title>QUIC Stream Resets with Partial Delivery</title>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="6" month="September" year="2026"/>
            <abstract>
              <t>   QUIC defines a RESET_STREAM frame to abort sending on a stream.  When
   a sender resets a stream, it also stops retransmitting STREAM frames
   for this stream in the event of packet loss.  On the receiving side,
   there is no guarantee that any data sent on that stream is delivered.

   This document defines a new QUIC frame, the RESET_STREAM_AT frame,
   that allows resetting a stream, while guaranteeing delivery of stream
   data up to a certain byte offset.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-reliable-stream-reset-11"/>
        </reference>
        <reference anchor="I-D.ietf-webtrans-overview">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with an abstract model that allows them to be used interchangeably.

   This document defines the overall requirements on the protocols used
   in WebTransport, as well as the common features of the protocols,
   support for some of which is optional.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-13"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC9221">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC7595">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes. It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CAT">
          <front>
            <title>Authorization scheme for MOQT using Common Access Tokens</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <author fullname="Chris Lemmons" initials="C." surname="Lemmons">
              <organization>Comcast</organization>
            </author>
            <author fullname="Gwendal Simon" initials="G." surname="Simon">
              <organization>Synamedia</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="18" month="June" year="2026"/>
            <abstract>
              <t>   A token-based authorization scheme for use with Media Over QUIC
   Transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-c4m-01"/>
        </reference>
        <reference anchor="PPA">
          <front>
            <title>Privacy Pass Authentication for Media over QUIC (MoQ)</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="1" month="November" year="2026"/>
            <abstract>
              <t>   This document specifies the use of Privacy Pass architecture and
   issuance protocols for authorization in Media over QUIC (MoQ)
   transport protocol.  It defines how Privacy Pass tokens can be
   integrated with MoQ's authorization framework to provide privacy-
   preserving authentication for subscriptions, fetches, publications,
   and relay operations while supporting fine-grained access control
   through prefix-based track namespace and track name matching rules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-privacy-pass-auth-04"/>
        </reference>
        <reference anchor="I-D.ietf-moq-secure-objects">
          <front>
            <title>End-to-End Secure Objects for Media over QUIC Transport</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document specifies an end-to-end authenticated encryption scheme
   for application objects transmitted via Media over QUIC (MoQ)
   Transport.  The scheme enables original publishers that share a
   symmetric key with end subscribers, to ensuring that MoQ relays are
   unable to decrypt object contents.  Additionally, subscribers can
   verify the integrity and authenticity of received objects, confirming
   that the content has not been modified in transit.  Additionally it
   allows MoQ parameters to be protected so the publisher can select if
   they are readable and/or modifiable by relays.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-secure-objects-01"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC9580">
          <front>
            <title>OpenPGP</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
            <author fullname="D. Huigens" initials="D." surname="Huigens"/>
            <author fullname="J. Winter" initials="J." surname="Winter"/>
            <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
              <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
              <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9580"/>
          <seriesInfo name="DOI" value="10.17487/RFC9580"/>
        </reference>
        <reference anchor="RFC1035">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
        <reference anchor="RFC3596">
          <front>
            <title>DNS Extensions to Support IP Version 6</title>
            <author fullname="S. Thomson" initials="S." surname="Thomson"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="V. Ksinant" initials="V." surname="Ksinant"/>
            <author fullname="M. Souissi" initials="M." surname="Souissi"/>
            <date month="October" year="2003"/>
            <abstract>
              <t>This document defines the changes that need to be made to the Domain Name System (DNS) to support hosts running IP version 6 (IPv6). The changes include a resource record type to store an IPv6 address, a domain to support lookups based on an IPv6 address, and updated definitions of existing query types that return Internet addresses as part of additional section processing. The extensions are designed to be compatible with existing applications and, in particular, DNS implementations themselves. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="88"/>
          <seriesInfo name="RFC" value="3596"/>
          <seriesInfo name="DOI" value="10.17487/RFC3596"/>
        </reference>
        <reference anchor="RFC9460">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="I-D.ietf-webtrans-http2">
          <front>
            <title>WebTransport over HTTP/2</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Woo Xie" initials="W." surname="Xie">
              <organization>Meta</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   WebTransport defines a set of low-level communications features
   designed for client-server interactions that are initiated by Web
   clients.  This document describes a protocol that can provide the
   capabilities of WebTransport over HTTP/2.  This protocol enables the
   use of WebTransport when a UDP-based protocol is not available.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http2-15"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack. This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data. Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC9170">
          <front>
            <title>Long-Term Viability of Protocol Extension Mechanisms</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The ability to change protocols depends on exercising the extension and version-negotiation mechanisms that support change. This document explores how regular use of new protocol features can ensure that it remains possible to deploy changes to a protocol. Examples are given where lack of use caused changes to be more difficult or costly.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9170"/>
          <seriesInfo name="DOI" value="10.17487/RFC9170"/>
        </reference>
        <reference anchor="RFC9438">
          <front>
            <title>CUBIC for Fast and Long-Distance Networks</title>
            <author fullname="L. Xu" initials="L." surname="Xu"/>
            <author fullname="S. Ha" initials="S." surname="Ha"/>
            <author fullname="I. Rhee" initials="I." surname="Rhee"/>
            <author fullname="V. Goel" initials="V." surname="Goel"/>
            <author fullname="L. Eggert" initials="L." role="editor" surname="Eggert"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>CUBIC is a standard TCP congestion control algorithm that uses a cubic function instead of a linear congestion window increase function to improve scalability and stability over fast and long-distance networks. CUBIC has been adopted as the default TCP congestion control algorithm by the Linux, Windows, and Apple stacks.</t>
              <t>This document updates the specification of CUBIC to include algorithmic improvements based on these implementations and recent academic work. Based on the extensive deployment experience with CUBIC, this document also moves the specification to the Standards Track and obsoletes RFC 8312. This document also updates RFC 5681, to allow for CUBIC's occasionally more aggressive sending behavior.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9438"/>
          <seriesInfo name="DOI" value="10.17487/RFC9438"/>
        </reference>
        <reference anchor="RFC6582">
          <front>
            <title>The NewReno Modification to TCP's Fast Recovery Algorithm</title>
            <author fullname="T. Henderson" initials="T." surname="Henderson"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="A. Gurtov" initials="A." surname="Gurtov"/>
            <author fullname="Y. Nishida" initials="Y." surname="Nishida"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>RFC 5681 documents the following four intertwined TCP congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. RFC 5681 explicitly allows certain modifications of these algorithms, including modifications that use the TCP Selective Acknowledgment (SACK) option (RFC 2883), and modifications that respond to "partial acknowledgments" (ACKs that cover new data, but not all the data outstanding when loss was detected) in the absence of SACK. This document describes a specific algorithm for responding to partial acknowledgments, referred to as "NewReno". This response to partial acknowledgments was first proposed by Janey Hoe. This document obsoletes RFC 3782. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6582"/>
          <seriesInfo name="DOI" value="10.17487/RFC6582"/>
        </reference>
        <reference anchor="I-D.ietf-scone-protocol">
          <front>
            <title>Standard Communication with Network Elements (SCONE) Protocol</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Matt Joras" initials="M." surname="Joras">
              <organization>Meta</organization>
            </author>
            <author fullname="Marcus Ihlar" initials="L. M." surname="Ihlar">
              <organization>Ericsson</organization>
            </author>
            <date day="28" month="October" year="2026"/>
            <abstract>
              <t>   This document describes a protocol where on-path network elements can
   communicate their perspective on the maximum sustainable throughput
   for QUIC flows to endpoints.  This throughput advice suggests an
   upper bound on long-term average throughput, independent of and
   complementary to real-time congestion control signals.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scone-protocol-10"/>
        </reference>
        <reference anchor="RFC9525">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>Many application technologies enable secure communication between two entities by means of Transport Layer Security (TLS) with Internet Public Key Infrastructure using X.509 (PKIX) certificates. This document specifies procedures for representing and verifying the identity of application services in such interactions.</t>
              <t>This document obsoletes RFC 6125.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9525"/>
          <seriesInfo name="DOI" value="10.17487/RFC9525"/>
        </reference>
        <reference anchor="I-D.draft-lcurley-warp">
          <front>
            <title>Warp - Live Media Transport over QUIC</title>
            <author fullname="Luke Curley" initials="L." surname="Curley">
              <organization>Twitch</organization>
            </author>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document defines the core behavior for Warp, a live media
   transport protocol over QUIC.  Media is split into objects based on
   the underlying media encoding and transmitted independently over QUIC
   streams.  QUIC streams are prioritized based on the delivery order,
   allowing less important objects to be starved or dropped during
   congestion.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lcurley-warp-04"/>
        </reference>
        <reference anchor="I-D.draft-kpugin-rush">
          <front>
            <title>RUSH - Reliable (unreliable) streaming protocol</title>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Nitin Garg" initials="N." surname="Garg">
              <organization>Meta</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Jorge Cenzano Ferret" initials="J. C." surname="Ferret">
              <organization>Meta</organization>
            </author>
            <author fullname="Jake Weissman" initials="J." surname="Weissman">
              <organization>Meta</organization>
            </author>
            <date day="21" month="April" year="2025"/>
            <abstract>
              <t>   RUSH is an application-level protocol for ingesting live video.  This
   document describes the protocol and how it maps onto QUIC.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the mailing list (), which
   is archived at .

   Source for this draft and an issue tracker can be found at
   https://github.com/afrind/draft-rush.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kpugin-rush-03"/>
        </reference>
        <reference anchor="I-D.draft-jennings-moq-quicr-proto">
          <front>
            <title>QuicR - Media Delivery Protocol over QUIC</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="11" month="July" year="2022"/>
            <abstract>
              <t>   Recently new use cases have emerged requiring higher scalability of
   media delivery for interactive realtime applications and much lower
   latency for streaming applications and a combination thereof.

   draft-jennings-moq-arch specifies architectural aspects of QuicR, a
   media delivery protocol based on publish/subscribe metaphor and Relay
   based delivery tree, that enables a wide range of realtime
   applications with different resiliency and latency needs.

   This specification defines the protocol aspects of the QuicR media
   delivery architecture.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jennings-moq-quicr-proto-01"/>
        </reference>
      </references>
    </references>
    <?line 6217?>

<section anchor="change-log">
      <name>Change Log</name>
      <t>RFC Editor's Note: Please remove this section prior to publication of a final version of this document.</t>
      <t>Issue and pull request numbers are listed with a leading octothorp.</t>
      <section anchor="since-draft-ietf-moq-transport-22">
        <name>Since draft-ietf-moq-transport-22</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Encode FILL_PARAMETERS as a count of Parameters instead of a length (#2015)</t>
          </li>
          <li>
            <t>Use a varint control message Length and add MAX_CONTROL_MESSAGE_SIZE (#2017)</t>
          </li>
          <li>
            <t>Remove End Location and End Of Track from FETCH_OK, making it a REQUEST_OK
(#2009)</t>
          </li>
          <li>
            <t>A relative Location filter in FETCH is an <tt>INVALID_RANGE</tt> error (#1960)</t>
          </li>
          <li>
            <t>Rename the FORWARD parameter to PAUSED, with a new ID and inverted
semantics (#2002)</t>
          </li>
          <li>
            <t>Process and respond to REQUEST_UPDATEs in order (#1938)</t>
          </li>
          <li>
            <t>Prohibit coalescing REQUEST_UPDATEs that contain FILL_PARAMETERS (#2042)</t>
          </li>
          <li>
            <t>Fix how a relay computes LARGEST_OBJECT for downstream requests (#1978)</t>
          </li>
          <li>
            <t>Allow overlapping namespace subscriptions and add SUBSCRIBE_TRACKS_ID (#2018)</t>
          </li>
          <li>
            <t>Define the effects of updating a SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS
prefix (#2019)</t>
          </li>
          <li>
            <t>Restrict SUBSCRIBE_TRACKS to an explicit list of parameters (#1995)</t>
          </li>
          <li>
            <t>Allow duplicate PUBLISH_NAMESPACE for the same prefix (#2021)</t>
          </li>
          <li>
            <t>Add Parameters to NAMESPACE (#1858)</t>
          </li>
          <li>
            <t>Allow FILL_PARAMETERS in SUBSCRIBE_TRACKS and PUBLISH (#2007)</t>
          </li>
          <li>
            <t>Allow EXPIRES in every OK message (#1994)</t>
          </li>
          <li>
            <t>Replace <tt>PROTOCOL_VIOLATION</tt> with specific session error codes (#1773)</t>
          </li>
          <li>
            <t>Add Error Details to REQUEST_ERROR, including REDIRECT (#2010)</t>
          </li>
          <li>
            <t>Add the UNSUPPORTED_PROPERTY Error Detail (#2011)</t>
          </li>
          <li>
            <t>Handle unknown Mandatory Track Properties in TRACK_STATUS_OK (#2016)</t>
          </li>
          <li>
            <t>Add <tt>EXPIRED_AUTH_TOKEN</tt> PUBLISH_DONE code (#1970)</t>
          </li>
          <li>
            <t>Add <tt>UNAVAILABLE</tt> request error code, for relays without stream credit
(#2041)</t>
          </li>
          <li>
            <t>Only the receiver of a request can send GOAWAY on its request stream (#1966)</t>
          </li>
          <li>
            <t>Receivers are not required to detect every duplicate Request ID (#1993)</t>
          </li>
          <li>
            <t>Track Names <bcp14>MUST NOT</bcp14> be empty (#1954)</t>
          </li>
          <li>
            <t>Allow NEW_GROUP_REQUEST before DYNAMIC_GROUPS is known (#2008)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add a Gone Object state and End of Gone Range (#2022)</t>
          </li>
          <li>
            <t>Delta encode FETCH End of Range indicators (#2031)</t>
          </li>
          <li>
            <t>Add 2 to the Object ID Delta for FETCH Objects within a Group (#2006)</t>
          </li>
          <li>
            <t>Mark the end of a complete Group in FETCH with End of Group (#2013)</t>
          </li>
          <li>
            <t>Remove the <tt>UNKNOWN_OBJECT_STATUS</tt> stream reset code (#2004)</t>
          </li>
          <li>
            <t>A supported Property received outside its scope makes the Track malformed
(#2039)</t>
          </li>
          <li>
            <t>Define whether Properties can appear more than once by default (#2044)</t>
          </li>
          <li>
            <t>Set the SUBGROUP_HEADER PROPERTIES bit if any later Object might include
Properties (#1915)</t>
          </li>
          <li>
            <t>Grease values are not Mandatory Track Properties (#2037)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Describe where timeouts apply and the tradeoffs in setting them (#2040)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-21">
        <name>Since draft-ietf-moq-transport-21</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>LOCATION_FILTER carries an explicit Location Filter Type that selects which
fields follow, replacing the length-inferred encoding (#1913, #1953)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Restructure Publisher and Namespace Discovery, add a Namespace Prefix
Matching section, and move SUBSCRIBE_TRACKS to Publishing and Receiving
Tracks (#1946)</t>
          </li>
          <li>
            <t>Add a Fetch semantics section covering object delivery, gaps (including
Descending Group Order), and relay handling (#1895)</t>
          </li>
          <li>
            <t>Rename Forwarding Preference to Delivery Mode, established by the Original
Publisher (#1886, #1891, #1914)</t>
          </li>
          <li>
            <t>Describe the Forward State as a subscription being paused (#1940)</t>
          </li>
          <li>
            <t>Define Subscription and Fetch (#1884, #1925)</t>
          </li>
          <li>
            <t>Add per-request shorthand names for REQUEST_OK and REQUEST_ERROR, e.g.
SUBSCRIBE_ERROR (#1912)</t>
          </li>
          <li>
            <t>List the allowed parameters in each control message (#1916)</t>
          </li>
          <li>
            <t>Clarify that Largest Object can still be arriving and use it consistently
(#1911, #1918)</t>
          </li>
          <li>
            <t>Clarify that FETCH_OK End Location is inclusive (#1910)</t>
          </li>
          <li>
            <t>Clarify how extensions declare support in SETUP (#1921)</t>
          </li>
          <li>
            <t>Scope the auth token cache overflow rule to non-SETUP registrations (#1927)</t>
          </li>
          <li>
            <t>Relay-to-relay communication is out of scope (#1931)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-20">
        <name>Since draft-ietf-moq-transport-20</name>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add a Document Structure section (#1903)</t>
          </li>
          <li>
            <t>Move-only restructuring across the document (#1877)</t>
          </li>
          <li>
            <t>Restructure and reorder Publishing and Receiving Tracks (#1885, #1893)</t>
          </li>
          <li>
            <t>Move Error Handling and Grease ahead of the considerations sections (#1899)</t>
          </li>
          <li>
            <t>Promote each Setup Option to its own section (#1896)</t>
          </li>
          <li>
            <t>Collect Session Termination, Request Error, and Publish Done codes into
Error Handling (#1879, #1880, #1881)</t>
          </li>
          <li>
            <t>Extract common wire format sections: Authorization Token Compression, Track
Namespace, Location Filter, and Range Filter (#1882, #1887, #1888, #1892)</t>
          </li>
          <li>
            <t>Remove the Connection URL, Stream Cancellation, and Examples sections (#1878)</t>
          </li>
          <li>
            <t>Restructuring pull requests that also made editorial clarifications are
included as moves only; the clarifications are deferred (#1887, #1888, #1892)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-19">
        <name>Since draft-ietf-moq-transport-19</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Replace Joining FETCH with fill fetch streams (#1673)
            </t>
            <ul spacing="normal">
              <li>
                <t>Add the FILL_PARAMETERS parameter, whose presence on a subscription
requests a fill; it carries a sequence of Parameters (#1868)</t>
              </li>
              <li>
                <t>Remove the Joining variant of FETCH and the "standalone" moniker</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Restructure the Location Filter to match the other filter parameters, and
carry the FETCH range in LOCATION_FILTER instead of message fields (#1809)</t>
          </li>
          <li>
            <t>Add PUBLISH_STATE_NOTIFY message (#1820)</t>
          </li>
          <li>
            <t>Add INCLUDE_PROPERTIES parameter (#1813, #1847)</t>
          </li>
          <li>
            <t>PUBLISH can carry Subscription Parameters, and AUTHORIZATION TOKEN is never
copied from SUBSCRIBE_TRACKS (#1834)</t>
          </li>
          <li>
            <t>Subscription parameters appear in REQUEST_UPDATE, not PUBLISH_OK (#1790)</t>
          </li>
          <li>
            <t>Allow FORWARD on a REQUEST_UPDATE for SUBSCRIBE_TRACKS (#1812)</t>
          </li>
          <li>
            <t>Remove PUBLISH_DONE status code SUBSCRIPTION_ENDED; a subscription does not
end because Largest Object passes the end of the Location Filter (#1833)</t>
          </li>
          <li>
            <t>Change the maximum Stream Count in PUBLISH_DONE to 2^64 - 1 (#1831)</t>
          </li>
          <li>
            <t>Remove the requirement for a publisher to retain Largest Location (#1872)</t>
          </li>
          <li>
            <t>Remove the VERSION_NEGOTIATION_FAILED session error (#1867)</t>
          </li>
          <li>
            <t>A relay <bcp14>MUST</bcp14> send an upstream FETCH to at least one publisher (#1804)</t>
          </li>
          <li>
            <t>Discuss the tradeoffs of aggregating downstream filters onto an upstream
subscription (#1735)</t>
          </li>
          <li>
            <t>Resolve REDIRECT ambiguity with empty Track Namespace and Track Name (#1824)</t>
          </li>
          <li>
            <t>Clarify Retry Interval of 0 with REDIRECT (#1785)</t>
          </li>
          <li>
            <t>Define host resolution for moqt URIs (#1817)</t>
          </li>
          <li>
            <t>Exclude the URI query component from the MOQT scope (#1855)</t>
          </li>
          <li>
            <t>SUBSCRIBE_TRACKS Parameters are the publisher's initial Subscription
parameters and are explicitly communicated in the resulting PUBLISH
(#1815, #1869)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Describe OBJECT_DATAGRAM and SUBGROUP_HEADER types as Type Flags bitfields;
a set bit with no specified meaning is a <tt>PROTOCOL_VIOLATION</tt> (#1774)</t>
          </li>
          <li>
            <t>Add <tt>End of Timed-Out Range</tt> for Objects abandoned when Fill Timeout
expires (#1822)</t>
          </li>
          <li>
            <t>OBJECT_DELIVERY_TIMEOUT starts at the last header byte instead of the first
payload byte (#1844)</t>
          </li>
          <li>
            <t>Define scheduling between fill-delivered and subscription-delivered Objects
(#1673)</t>
          </li>
          <li>
            <t>Beware re-using a Track Alias for concurrent subscriptions (#1856)</t>
          </li>
        </ul>
        <t><strong>Security Considerations</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add a Preventing Impersonation section (#1737, #1789)</t>
          </li>
          <li>
            <t>Expand mutual TLS and authorization guidance (#1786)</t>
          </li>
          <li>
            <t>Add moqt URI scheme security considerations (#1772)</t>
          </li>
          <li>
            <t>Add a security consideration for logging untrusted string fields (#1823)</t>
          </li>
          <li>
            <t>Recommend end-to-end object encryption for confidentiality from relays
(#1755)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify the Range Filters section for readability (#1851)</t>
          </li>
          <li>
            <t>Note that the recommended name encoding is not guaranteed filename-safe
(#1863)</t>
          </li>
          <li>
            <t>Fix LOC and Secure Objects entries in the provisional Property registry
(#1807, #1818, #1848)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-18">
        <name>Since draft-ietf-moq-transport-18</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add Range Filters that can filter Objects from Subscriptions and
SUBSCRIBE_TRACKS (#1765)</t>
          </li>
          <li>
            <t>Add MAX_REQUEST_UPDATES Setup Option and TOO_MANY_REQUEST_UPDATES error
(#1613)</t>
          </li>
          <li>
            <t>Allow multiple concurrent subscriptions per Track (#1775)</t>
          </li>
          <li>
            <t>Move GROUP_ORDER from PUBLISH_OK to SUBSCRIBE_TRACKS (#1777)</t>
          </li>
          <li>
            <t>Rename PUBLISH_BLOCKED to PUBLISH_SKIPPED (#1779)</t>
          </li>
          <li>
            <t>Remove Request ID from GOAWAY (#1623)</t>
          </li>
          <li>
            <t>Clarify session vs. per-request GOAWAY migration (#1787)</t>
          </li>
          <li>
            <t>Define FIN vs. RST/STOP_SENDING semantics on request streams (#1698)</t>
          </li>
          <li>
            <t>Unexpected REQUEST_UPDATE is a session error (#1784)</t>
          </li>
          <li>
            <t>Update Forward State handling for relays (#1782)</t>
          </li>
          <li>
            <t>Clarify authorization trust model for namespace subscriptions (#1656)</t>
          </li>
          <li>
            <t>Clarify namespace discovery and NAMESPACE sending (#1710)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delivery timeouts are both Track and Object Properties (#1476)</t>
          </li>
          <li>
            <t>Make the Object Status payload rule extensible via IANA registry (#1760)</t>
          </li>
          <li>
            <t>Datagrams take precedence in cross-forwarding-preference scheduling ties
(#1780)</t>
          </li>
          <li>
            <t>Remove relay exception for reordering or dropping objects (#1762)</t>
          </li>
          <li>
            <t>Specify relay processing rules for known Track Properties (#1771)</t>
          </li>
          <li>
            <t>Recommend Immutable Properties for relay-visible, unmodifiable data (#1759)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename control Message Payload field to Message Body (#1756)</t>
          </li>
          <li>
            <t>Clarify Group and Subgroup terminology and object model (#1708)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-17">
        <name>Since draft-ietf-moq-transport-17</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Unified moqt:// URI scheme for QUIC and WebTransport (#1486)</t>
          </li>
          <li>
            <t>Add fragment identifier support for moqt URIs (#1571)</t>
          </li>
          <li>
            <t>Split SUBSCRIBE_NAMESPACE into SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS
(#1542)</t>
          </li>
          <li>
            <t>Remove Required Request ID (#1615)</t>
          </li>
          <li>
            <t>Add REDIRECT for request errors and established subscriptions (#1534)</t>
          </li>
          <li>
            <t>Allow GOAWAY on request streams to migrate individual requests (#1617)</t>
          </li>
          <li>
            <t>Add Request ID to GOAWAY (#1559)</t>
          </li>
          <li>
            <t>Remove PUBLISH_OK message type, make it a REQUEST_OK alias (#1611)</t>
          </li>
          <li>
            <t>Generalize stream reset codes to all request streams, add new codes,
align with PUBLISH_DONE (#1606)</t>
          </li>
          <li>
            <t>Add Track Properties to REQUEST_OK (#1576)</t>
          </li>
          <li>
            <t>Add support for mandatory-to-understand track extensions (#1509)</t>
          </li>
          <li>
            <t>Exclude your own tracks from SUBSCRIBE_NAMESPACE (#1596)</t>
          </li>
          <li>
            <t>Add Session-Level Tracks reserved namespace (#1562)</t>
          </li>
          <li>
            <t>Allow coalescing REQUEST_UPDATE processing (#1540)</t>
          </li>
          <li>
            <t>SUBSCRIBE takes precedence over SUBSCRIBE_NAMESPACE at relay (#1533)</t>
          </li>
          <li>
            <t>Don't close the Session for unknown errors (#1561)</t>
          </li>
          <li>
            <t>Clarify REQUEST_UPDATE failure behavior for all request types (#1539)</t>
          </li>
          <li>
            <t>Clarify SUBSCRIBE_NAMESPACE stream closure semantics (#1541)</t>
          </li>
          <li>
            <t>FETCH to a track with no objects returns INVALID_RANGE (#1537)</t>
          </li>
          <li>
            <t>Clarify FETCH_OK End Location semantics (#1536)</t>
          </li>
          <li>
            <t>Clarify definition of scope (#1629)</t>
          </li>
          <li>
            <t>Clarify Joining Fetch behavior:
            </t>
            <ul spacing="normal">
              <li>
                <t>Joining FETCH is unaffected by forward changing to 0 (#1620)</t>
              </li>
              <li>
                <t>Joining Fetch forward state mismatch is a request error (#1609)</t>
              </li>
              <li>
                <t>Clarify Joining Fetch ordering with Forward State transitions (#1577)</t>
              </li>
            </ul>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Make Object ID and Group ID delta encoded in Fetch responses (#1586)</t>
          </li>
          <li>
            <t>Add FIRST_OBJECT bit to SUBGROUP_HEADER type (#1618)</t>
          </li>
          <li>
            <t>Split DELIVERY_TIMEOUT into two types of timeout (#1605)</t>
          </li>
          <li>
            <t>FILL_TIMEOUT parameter (#1490)</t>
          </li>
          <li>
            <t>Forbid relays from lying about LARGEST_OBJECT (#1621)</t>
          </li>
          <li>
            <t>Allow publisher to reopen subgroup after REQUEST_UPDATE forward 0-&gt;1
(#1583)</t>
          </li>
          <li>
            <t>Allow 7-byte varint and non-minimal encodings (#1595)</t>
          </li>
          <li>
            <t>Padding streams and datagrams (#1475)</t>
          </li>
          <li>
            <t>Close session when delta encoding wraps (#1560)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify Object existence and cross-source contradictions (#1566)</t>
          </li>
          <li>
            <t>Clarify immutable track properties (#1535)</t>
          </li>
          <li>
            <t>Improve Startup Latency and 0-RTT guidance (#1544)</t>
          </li>
          <li>
            <t>Improve Security Considerations section (#1625)</t>
          </li>
          <li>
            <t>Rewrite abstract and introduction (#1556)</t>
          </li>
          <li>
            <t>Define textual aliases for REQUEST_OK by request type (#1610)</t>
          </li>
          <li>
            <t>Add IANA registry for Setup Options (#1564)</t>
          </li>
          <li>
            <t>Add provisional registry for LOC properties (#1624)</t>
          </li>
          <li>
            <t>Update MOQ Properties registration policies (#1525)</t>
          </li>
          <li>
            <t>Add stream type column to message type table (#1555)</t>
          </li>
          <li>
            <t>Fix grease examples to match 0x7f multiplier (#1569)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-16">
        <name>Since draft-ietf-moq-transport-16</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Change control stream from bidi to a pair of uni streams (#1510)</t>
          </li>
          <li>
            <t>Collapse CLIENT_SETUP and SERVER_SETUP into a single SETUP message (#1510)</t>
          </li>
          <li>
            <t>Move requests to bidirectional streams; remove cancel messages (#1389)</t>
          </li>
          <li>
            <t>Remove MAX_REQUEST_ID/REQUESTS_BLOCKED (#1471)</t>
          </li>
          <li>
            <t>New variable-length integer encoding (#1016)</t>
          </li>
          <li>
            <t>Encode Message Parameters as Type-Value pairs (#1462)</t>
          </li>
          <li>
            <t>Add GREASE for Setup Options, Properties, and error code registries (#1460)</t>
          </li>
          <li>
            <t>Add RENDEZVOUS_TIMEOUT parameter for SUBSCRIBE (#1447)</t>
          </li>
          <li>
            <t>Add PUBLISH_BLOCKED message for SUBSCRIBE_NAMESPACE flow control (#1452)</t>
          </li>
          <li>
            <t>Add Timeout field to GOAWAY message (#1497)</t>
          </li>
          <li>
            <t>Add GOING_AWAY to REQUEST_ERROR codes (#1434)</t>
          </li>
          <li>
            <t>Add EXCESSIVE_LOAD error code (#1479)</t>
          </li>
          <li>
            <t>Add NAMESPACE_TOO_LARGE error and stream reset for large namespaces (#1496)</t>
          </li>
          <li>
            <t>Add TOO_FAR_BEHIND stream reset code (#1445)</t>
          </li>
          <li>
            <t>Add REQUEST_UPDATE to list of REQUEST_ERROR causes (#1466)</t>
          </li>
          <li>
            <t>Enforce REQUEST_OK/ERROR as first message on the response stream (#1499)</t>
          </li>
          <li>
            <t>Allow joining FETCH for PUBLISH and REQUEST_UPDATE with forward=1 (#1335)</t>
          </li>
          <li>
            <t>Allow DELIVERY_TIMEOUT value of 0 to mean no timeout (#1450)</t>
          </li>
          <li>
            <t>Allow zero-element namespaces (#1472)</t>
          </li>
          <li>
            <t>Clarify EXPIRES parameter update mechanism (#1448)</t>
          </li>
          <li>
            <t>Remove TRACK_STATUS from REQUEST_UPDATE (#1436)</t>
          </li>
          <li>
            <t>Define how to use auth token cache safely with multiple streams (#1430)</t>
          </li>
          <li>
            <t>Constrain encoding/parsing of track namespace and names (#1512)</t>
          </li>
          <li>
            <t>Reserve Property type ranges for application-specific use (#1473)</t>
          </li>
          <li>
            <t>Make EndGroup in Subscription Filters a delta (#1470)</t>
          </li>
          <li>
            <t>Copy DELIVERY_TIMEOUT min requirement from parameter to property (#1427)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify prior Object semantics after End of Range indicators in FETCH (#1513)</t>
          </li>
          <li>
            <t>Clarify datagram status and properties cases (#1444)</t>
          </li>
          <li>
            <t>Clarify Stream Count includes empty subgroups (#1449)</t>
          </li>
          <li>
            <t>Clarify language for malformed tracks in a subgroup with END_OF_GROUP (#1464)</t>
          </li>
          <li>
            <t>Properties can appear in mutable list or inside Immutable Properties (#1442)</t>
          </li>
          <li>
            <t>Clarify immutable property preservation requirements (#1441)</t>
          </li>
          <li>
            <t>Clarification for Track Alias uniqueness (#1418)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Setup Parameters to Setup Options (#1461)</t>
          </li>
          <li>
            <t>Rename Extension Headers to Properties (#1504)</t>
          </li>
          <li>
            <t>Add security/privacy considerations for MOQT_IMPLEMENTATION (#1511)</t>
          </li>
          <li>
            <t>Add editorial text on bandwidth probing techniques (#1477)</t>
          </li>
          <li>
            <t>Explain idle connection handling (#1443)</t>
          </li>
          <li>
            <t>Fix "SUBSCRIBE_NAMESPACE with short prefixes" (#1502)</t>
          </li>
          <li>
            <t>Add generative AI disclosure per IRTF guidelines</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-15">
        <name>Since draft-ietf-moq-transport-15</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Key-Value-Pairs for Parameters and Headers (#1315)</t>
          </li>
          <li>
            <t>Use Request ID in PUBLISH_NAMESPACE_{DONE/CANCEL} (#1329)</t>
          </li>
          <li>
            <t>Remove delivery related params from TRACK_STATUS for Subscribers (#1325)</t>
          </li>
          <li>
            <t>PUBLISH does not imply PUBLISH_NAMESPACE (#1364)</t>
          </li>
          <li>
            <t>Allow Start Location to decrease in SUBSCRIBE_UPDATE (#1323)</t>
          </li>
          <li>
            <t>Change SUBSCRIBE_UPDATE to REQUEST_UPDATE and expand ability to update (#1332)</t>
          </li>
          <li>
            <t>Put SUBSCRIBE_NAMESPACE on a stream, make Namespaces and PUBLISH independent
(#1344)</t>
          </li>
          <li>
            <t>Require NAMESPACE before NAMESPACE_DONE (#1392)</t>
          </li>
          <li>
            <t>Allow the '*' or the empty namespace in SUBSCRIBE_NAMESPACE (#1393)</t>
          </li>
          <li>
            <t>Relays match SUBSCRIBE to both Tracks and Namespaces (#1397)</t>
          </li>
          <li>
            <t>Clarify sending requests after sending GOAWAY (#1398)</t>
          </li>
          <li>
            <t>Add Retry Interval to REQUEST_ERROR (#1339)</t>
          </li>
          <li>
            <t>Add Extension Headers to PUBLISH, SUBSCRIBE_OK, and FETCH_OK (#1374)</t>
          </li>
          <li>
            <t>Move track properties to extensions, scope parameters (#1390)</t>
          </li>
          <li>
            <t>Add LARGEST_OBJECT parameter to TRACK_STATUS (#1367)</t>
          </li>
          <li>
            <t>Duplicate subscription processing (#1341)</t>
          </li>
          <li>
            <t>Address Track Name/Namespace edge cases (#1399)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Enable mixing datagrams with streams in one track (#1350)</t>
          </li>
          <li>
            <t>Clarify datagrams and subgroups (#1382)</t>
          </li>
          <li>
            <t>Redo the way we deal with missing Objects and Object Status (#1342)</t>
          </li>
          <li>
            <t>Allow unknown ranges in a FETCH response (#1331)</t>
          </li>
          <li>
            <t>Do not reopen subgroups after delivery timeout or STOP_SENDING (#1396)</t>
          </li>
          <li>
            <t>Clarify handling of unknown extensions (#1395)</t>
          </li>
          <li>
            <t>Clarify Delivery Timeout for datagrams (#1406)</t>
          </li>
          <li>
            <t>Disallow DELIVERY_TIMEOUT=0 (#1330)</t>
          </li>
          <li>
            <t>Malformed track due to multiple priorities for one subgroup (#1317)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Subscribers can migrate networks too (#1410)</t>
          </li>
          <li>
            <t>Rename Version Specific Parameters to Message Parameters (#1411)</t>
          </li>
          <li>
            <t>Clarify valid joining fetch subscription states (#1363)</t>
          </li>
          <li>
            <t>Formatting names for logs (#1355)</t>
          </li>
          <li>
            <t>A Publisher might not use the congestion window (#1408)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-14">
        <name>Since draft-ietf-moq-transport-14</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Always use ALPN for version negotiation (#499)</t>
          </li>
          <li>
            <t>Consolidate all the Error Message types (#1159)</t>
          </li>
          <li>
            <t>Change MOQT IMPLEMENTATION code point to 0x7 (#1191)</t>
          </li>
          <li>
            <t>Add Forward to SUBSCRIBE_NAMESPACE (#1220)</t>
          </li>
          <li>
            <t>Parameters for Group Order, Subscribe Priority and Subscription Filter (redo) (#1273)</t>
          </li>
          <li>
            <t>REQUEST_OK message (#1274)</t>
          </li>
          <li>
            <t>Subscribe Update Acknowledgements (#1275)</t>
          </li>
          <li>
            <t>Disallow DELETE and USE_ALIAS in CLIENT_SETUP (#1277)</t>
          </li>
          <li>
            <t>Remove Expires field from SUBSCRIBE_OK (#1282)</t>
          </li>
          <li>
            <t>Make Forward a Parameter (#1283)</t>
          </li>
          <li>
            <t>Allow SUBSCRIBE_UPDATE to increase the end location (#1288)</t>
          </li>
          <li>
            <t>Add default port for raw QUIC (#1289)</t>
          </li>
          <li>
            <t>Unsubscribe Namespace should be linked to Subscribe Namespace (#1292)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Fetch Object serialization optimization (#949)</t>
          </li>
          <li>
            <t>Make default PUBLISHER PRIORITY a parameter, optional in Subgroup/Datagram (#1056)</t>
          </li>
          <li>
            <t>Allow datagram status with object ID=0 (#1197)</t>
          </li>
          <li>
            <t>Disallow object extension headers in all non-Normal status objects (#1266)</t>
          </li>
          <li>
            <t>Objects for malformed track must not be cached (#1290)</t>
          </li>
          <li>
            <t>Remove NO_OBJECTS fetch error code (#1303)</t>
          </li>
          <li>
            <t>Clarify what happens when max_cache_duration parameter is omitted (#1287)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Request ID field in MAX_REQUEST_ID (#1250)</t>
          </li>
          <li>
            <t>Define and draw subscription state machine (#1296)</t>
          </li>
          <li>
            <t>Omitting a subgroup object necessitates reset (#1295)</t>
          </li>
          <li>
            <t>Define duplication rules for header extensions (#1293)</t>
          </li>
          <li>
            <t>Clarify joining fetch end location (#1286)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-13">
        <name>Since draft-ietf-moq-transport-13</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add an AUTHORITY parameter (#1058)</t>
          </li>
          <li>
            <t>Add a free-form SETUP parameter identifying the implementation (#1114)</t>
          </li>
          <li>
            <t>Add a Request ID to SUBSCRIBE_UDPATE (#1106)</t>
          </li>
          <li>
            <t>Indicate which params can appear PUBLISH* messages (#1071)</t>
          </li>
          <li>
            <t>Add TRACK_STATUS to the list of request types affected by GOAWAY (#1105)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Object IDs within Subgroups (#1042)</t>
          </li>
          <li>
            <t>Use a bit in Datagram Type to convey Object ID = 0 (#1055)</t>
          </li>
          <li>
            <t>Corrected missed code point updates to Object Datagram Status (#1082)</t>
          </li>
          <li>
            <t>Merge OBJECT_DATAGRAM and OBJECT_DATAGRAM_STATUS description (#1179)</t>
          </li>
          <li>
            <t>Objects are not schedulable if flow-control blocked (#1054)</t>
          </li>
          <li>
            <t>Clarify DELIVERY_TIMEOUT reordering computation (#1120)</t>
          </li>
          <li>
            <t>Receiving unrequested Objects (#1112)</t>
          </li>
          <li>
            <t>Clarify End of Track (#1111)</t>
          </li>
          <li>
            <t>Malformed tracks apply to FETCH (#1083)</t>
          </li>
          <li>
            <t>Remove early FIN from the definition of malformed tracks (#1096)</t>
          </li>
          <li>
            <t>Prior Object ID Gap Extension header (#939)</t>
          </li>
          <li>
            <t>Add Extension containing immutable extensions (#1025)</t>
          </li>
        </ul>
        <t><strong>Relay Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain FETCH routing for relays (#1165)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> for multi-publisher relay handling (#1115)</t>
          </li>
          <li>
            <t>Filters don't (usually) determine the end of subscription (#1113)</t>
          </li>
          <li>
            <t>Allow self-subscriptions (#1110)</t>
          </li>
          <li>
            <t>Explain Namespace Prefix Matching in more detail (#1116)</t>
          </li>
        </ul>
        <t><strong>Explanatory</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain Modularity of MOQT (#1107)</t>
          </li>
          <li>
            <t>Explain how to resume publishing after losing state (#1087)</t>
          </li>
        </ul>
        <t><strong>Major Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename ANNOUNCE to PUBLISH_NAMESPACE (#1104)</t>
          </li>
          <li>
            <t>Rename SUBSCRIBE_DONE to PUBLISH_DONE (#1108)</t>
          </li>
          <li>
            <t>Major FETCH Reorganization (#1173)</t>
          </li>
          <li>
            <t>Reformat Error Codes (#1091)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-12">
        <name>Since draft-ietf-moq-transport-12</name>
        <ul spacing="normal">
          <li>
            <t>TRACK_STATUS_REQUEST and TRACK_STATUS have changed to directly mirror
SUBSCRIBE/OK/ERROR (#1015)</t>
          </li>
          <li>
            <t>SUBSCRIBE_ANNOUNCES was renamed back to SUBSCRIBE_NAMESPACE (#1049)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-11">
        <name>Since draft-ietf-moq-transport-11</name>
        <ul spacing="normal">
          <li>
            <t>Move Track Alias from SUBSCRIBE to SUBSCRIBE_OK (#977)</t>
          </li>
          <li>
            <t>Expand cases FETCH_OK returns Invalid Range (#946) and clarify fields (#936)</t>
          </li>
          <li>
            <t>Add an error code to FETCH_ERROR when an Object status is unknown (#825)</t>
          </li>
          <li>
            <t>Rename Latest Object to Largest Object (#1024) and clarify what to
do when it's incomplete (#937)</t>
          </li>
          <li>
            <t>Explain Malformed Tracks and what to do with them (#938)</t>
          </li>
          <li>
            <t>Allow End of Group to be indicated in a normal Object (#1011)</t>
          </li>
          <li>
            <t>Relays <bcp14>MUST</bcp14> have an upstream subscription to send SUBSCRIBE_OK (#1017)</t>
          </li>
          <li>
            <t>Allow AUTHORIZATION TOKEN in CLIENT_SETUP, SERVER_SETUP and
other fixes (#1013)</t>
          </li>
          <li>
            <t>Add PUBLISH for publisher initiated subscriptions (#995) and
fix the PUBLISH codepoints (#1048, #1051)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-10">
        <name>Since draft-ietf-moq-transport-10</name>
        <ul spacing="normal">
          <li>
            <t>Added Common Structure definitions - Location, Key-Value-Pair and Reason
Phrase</t>
          </li>
          <li>
            <t>Limit lengths of all variable length fields, including Track Namespace and Name</t>
          </li>
          <li>
            <t>Control Message length is now 16 bits instead of variable length</t>
          </li>
          <li>
            <t>Subscribe ID became Request ID, and was added to most control messages. Request ID
is used to correlate OK/ERROR responses for ANNOUNCE, SUBSCRIBE_NAMESPACE,
and TRACK_STATUS.  Like Subscribe ID, Request IDs are flow controlled.</t>
          </li>
          <li>
            <t>Explain rules for caching in more detail</t>
          </li>
          <li>
            <t>Changed the SETUP parameter format for even number parameters to match the
Object Header Extension format</t>
          </li>
          <li>
            <t>Rotated SETUP code points</t>
          </li>
          <li>
            <t>Added Parameters to TRACK_STATUS and TRACK_STATUS_REQUEST</t>
          </li>
          <li>
            <t>Clarified how subscribe filters work</t>
          </li>
          <li>
            <t>Added Next Group Filter to SUBSCRIBE</t>
          </li>
          <li>
            <t>Added Forward flag to SUBSCRIBE</t>
          </li>
          <li>
            <t>Renamed FETCH_OK field to End and clarified how to set it</t>
          </li>
          <li>
            <t>Added Absolute Joining Fetch</t>
          </li>
          <li>
            <t>Clarified No Error vs Invalid Range FETCH_ERROR cases</t>
          </li>
          <li>
            <t>Use bits in SUBGROUP_HEADER and DATAGRAM* types to compress subgroup ID and
extensions</t>
          </li>
          <li>
            <t>Coalesced END_OF_GROUP and END_OF_TRACK_AND_GROUP status</t>
          </li>
          <li>
            <t>Objects that Do Not Exist cannot have extensions when sent on the wire</t>
          </li>
          <li>
            <t>Specified error codes for resetting data streams</t>
          </li>
          <li>
            <t>Defined an Object Header Extension for communicating a known Group ID gap</t>
          </li>
          <li>
            <t>Replaced AUTHORIZATION_INFO with AUTHORIZATION_TOKEN, which has more structure,
compression, and additional Auth related error codes (#760)</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8y9+3rc1pUn+v9+Coz0hyWnqqyLncRSLk2LlMxpSWRIykkm
k2OCVSgS7SqgAqBEMbL6WeZZzpOddd9rAyiKTs+cc/x9nRYLwL6uvfa6/tZ0
Og1d2a2KZ9m9N8WizLP6fdFkf3p3+CI7a/Kq3dRNdy/kFxdN8f5Ztq7/Me30
57Co51W+hk8XTb7spmXRLafJG9MnT8Mi7+CNj/t7Zwefwhz+uKybm2dZ2y1C
KDfNs6xrtm335NGjbx89CXlT5M+y7N6fi4ssrxbZYdUVTVV0fizt9mJdtm1Z
V2c3G2j68ODsZbium58um3q7sXkc6TzuhZ+KG3i+eBayabaOk/zHtpyH90W1
LeBJtvPrLOuon3t/hj7K6jJ7hW/i7+u8XMHvMOV/w7nP6uYSf86b+RX8fNV1
m/bZV1/hW/hT+b6Y6Wtf4Q9fXTT1dVt8Bd9/hd9dlt3V9oIbnF5ffpUsJb6w
gtVrO980vTjjD2dlnX7y1a5tmV1169W9ENoO1vjHfFVXML2bog3tOm+6H/+x
raGfZ1lVh035LPtbV88nWQvfNcWyhX/drPkfsP3rfLOBJfl7CPm2u6obXMgp
/F+WlRW0cDrL3kIX+U9baJh+Zno53V7lbf8RLEtelf/MO9jZZ9mLsp3X9HvB
y9xW/Pq/zfHJbF6vQ9rZD7Psh7wtV2Xx3nX1Qznv6iZ9kvb0qq4vV4Xv6j2+
/P79v13Sk5GuDmfZ6XXRda6fw7xyv32uhxJ2Al/2XeDjpsaTCBQIY+71uTfL
XjZltShWK9ft3gr6TX5Pu35TdLnvOF/iu/+2hp93dFrVzRo+fk+HAk/As+zk
5YtvHz16BH/DubSTCHOe7hNFT6+LCyKuKRLmUzjX1dK38mLvzL2MpDj/Grs+
Pt7r/b5pyvf5/Ga6ydt2iiQFbyUvtMV82xTT+uI/innXPgthOp1m+UUL3c+7
EM6uyhbpcrsuqi5bFMuyKtpsJ2PLHrw5+tPZw0mWZ5vtxapsr74C7tLOm/Ki
CJumBsqvV1l3lXdZs61a1wQyJ78YswxbylYFvJFfQp/dVZEti7yD0cJ3ywB/
t0VmRxDP0XZ+lcExgLEX+RrPU97llw39E9ahbsquLODf2NUGzmWZr0JTrMr8
Aii5u5Ee6w10CMc1u6i7q2xTl1U37eop/YM+7a6AXV1eAREBKyXu1xUZtJPf
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
GvJ/0zEsGEDmjTtsQfXWqarbugeDNz7VarLGipLEi01zNwqT3OeUbjD1esJ6
HzJClhC9KK4kd+ENi+ljRxxBjSuSbhV59cqdAxKzrOjRkiCTSGeM7DwbhDCR
a+9Pgu7iM9w4Y4hwukTfSWZaB/eVG151fc0KSFgabvsl02s2r5Fz/OyTMELd
1hBIVI4bGbSEVorPlduYwwpDrxiYDmMooe7FoIQJzoyJbyF4W+ZA+McVq7LG
jendeL5wJGfCtlTx9lBQt4s8yYEuc/h8zfWPueS3vfwrZmum5dIuwMC6LMlb
BBeuF8zu7qEGxQt4j/5YqB9tfptG51skcytjwwlky9gdidIlKg7VPlXPDk2b
lm8kqPNn0v+KOrueT2eB9LtObmTvGQE936y6coaTO/JjRbqfO+0eNiE2dNR/
L+JtooNCvFP3QSbEEk67FK0iiliqj9/Ppl/vDls8ge57MsuEzFyHgIty5gFW
YUMA41tKzTuuQXDFFONcMqScCZW2Opc9b8GlcEJmVdxLLzguy8dKlJmxXmZB
NdJNIHHDuztniUIlNucsXlGLf5crokKNBYkZhiLD7iuV6AfZ3YhHY+aSxM71
NYHKZlVQMYODrU6937XVykB+7wz2yuqorapzrPmIe9lPh+4NVBTlcuq1pJjR
W49ehYs6xif94XY0Vs8B219ucXg19EnunE8HTQrNaeEkKMznFyenH84Hx+Su
cxKCLnZf/C8OGVyHfYpyKibr013UdLWxXYurGES7XCSddIkU1pPJ0uZeT4S7
3EmfFlONWS/cuS1DlMNWfM4CXMZ1xH9+ZNkjeJLdR2Y+6myWJ+zWLDb2RvDJ
K+0E0tHmznwZIVeOYpMCeYhmsbIF+yKTC8eX+nh3X7AexOsWtIDotLcUwXTH
fUxm281tXA+aV5wNfdrRcZPKckUbhWt6WKRVWiItHUwT9mSwWXLyMnEjRVaD
YQUg77jk5cQHLVaif6wewPeTidA2TBbe9hlHFcYSn4Qau/M7FrhZPHli9DzZ
00Xdc0Yly3Au/5QI9qRWpdMgyge4ccJulIvU4+U0NmEtRJlZsqoLn1Kal9Mp
eRYpvf7BG7Wyk73FW7dSaeBRTWdm3CLghQG0+K3/k0fCoWZDgMFx7cc23OJH
S77xsROZw/FFGiHlMkbKhfLNcU2iJN3+Yyg99VEc3RHnR2B0hnM6/1u++mWT
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
JOFWEfc36ACKL+AKV+kF329aJcntz7X/Y2vDHYYet9JLZKGpuy2VmEIFFVSE
hctRe+07BjmYytWf3SmnCTkevHV7UbY0B+ZjBxMO6Xbw7EoJaWbcnuTze7Fx
+ZyQF29GLnXy3k1stTkcB9ZjndUwl1s9GGFkht/cOEWGvYzG5cmHlCQt+wj1
k+TdtatIe2pdFPO6Gn8ug3uruLsc3cyJNRRCkf0laeYZHQ+TNoZDuWG1ubOS
kvZAREop4q7Hq9yecaP1tnc2jaJ9S9WDiMR1HGpHEjcfcU+yiGBn/OALs7PD
83Z2mDt5OWWfcDUplcVe+ceDvraziY81TocRsso44VfiO0/UGB1j8taat6TE
jtqnY6s8BtoZN7L5GOslO5nV6J0ea1dbu1/nTPIWjnLJ9C/6b92dpBVEIkeE
pD4xP1x+MC5uavJIsPT9wXWEizmQk0JK4xhiwLuywB1DkYh2pytcqhvBLSl5
rqO7ctg9cWoz9JmPJq3YtUR1NitUPKCqVgd09UptPpIsTJrF+wrHcRFjDtVz
RGVMNunpLEnJOaTnmyvHB2uxepwwjGfoIxsbZiMSRfBwPubC6Jx4BR4qsYol
rmfPk/lJaznlXnd4lb8pHzjtrDsXQgdb2O4antdQJTMKQ2Djbr1kxaaVCNga
EKdc44W+EVclNyr09jp0q+2dXT5M9/AxzKlqc35xxA76uJaMkwZDlCbAkfXu
BD2bSrq9oCgR74614IRofw7TIJT5uafMz5ky3+oJa+JQpDPGNWUXFwzWuY1K
3EI+sIObV2mbJMPzNlowcctIQw9uFPacF0OlXcbi4WYKNALiK+fOl+wcCK4n
oaS+mRdUDJPICdzOg+ukWxfXpYiMrXWNijkViw98VAXZk+iI6LHUPMZ9ysmm
0uYqa9w91rg3dpbTuHeW0Lhp1eP58hWWRKfUbrMqlYbhIpdIUGm2t7zbpY2g
NTImcV0tSoLB3S3nlb3VrGfdkbi+Z4qj9sNJOeB8krHHN719bOmkMCijzrmL
uXU4aqdjQ+jzb9wC/+T0DPL2qVb80+Hp6WCf39k1qooJg+CbWhbSDYvPjG5g
VVo+1yuRx0peuBvdTL02tL2zbSQj1c+kt87OL74/vzg5/XDulEQi3gkuReKk
iKI7bETtwrh8P/EFSxPFdcS2T6JNbe9ALr/nPPDYj+edjCZehVfW7FhjSQap
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
KyKL6P8BqXVaiI+1BAA=

-->

</rfc>
