<?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.30 (Ruby 3.4.7) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-16" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-16"/>
    <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 59?>

<t>This document defines the core behavior for Media over QUIC Transport
(MOQT), a media transport protocol designed to operate over QUIC and
WebTransport, which have similar functionality. MOQT allows a producer of
media to publish data and have it consumed via subscription by a
multiplicity of endpoints. It supports intermediate content distribution
networks and is designed for high scale and low latency distribution.</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 68?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media Over QUIC Transport (MOQT) is a protocol that is optimized
for the QUIC protocol <xref target="QUIC"/>, either directly or via WebTransport
<xref target="WebTransport"/>, for the dissemination of media. MOQT utilizes a
publish/subscribe workflow in which producers of media publish data in
response to subscription requests from a multiplicity of endpoints. MOQT
supports wide range of use-cases with different resiliency and latency
(live, interactive) needs without compromising the scalability and cost
effectiveness associated with content delivery networks.</t>
      <t>MOQT is a generic protocol designed to work in concert with multiple
MoQ Streaming Formats. These MoQ Streaming Formats define how content is
encoded, packaged, and mapped to MOQT objects, along with policies for
discovery and subscription.</t>
      <ul spacing="normal">
        <li>
          <t><xref target="model"/> describes the data model employed by MOQT.</t>
        </li>
        <li>
          <t><xref target="session"/> covers aspects of setting up an MOQT session.</t>
        </li>
        <li>
          <t><xref target="priorities"/> covers mechanisms for prioritizing subscriptions.</t>
        </li>
        <li>
          <t><xref target="relays-moq"/> covers behavior at the relay entities.</t>
        </li>
        <li>
          <t><xref target="message"/> covers how control messages are encoded on the wire.</t>
        </li>
        <li>
          <t><xref target="data-streams"/> covers how data messages are encoded on the wire.</t>
        </li>
      </ul>
      <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
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.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>The party accepting an incoming Transport Session.</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 temporal sequence of objects. A group represents a join point in a
track. See (<xref target="model-group"/>).</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>
        </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.</t>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>This document uses the conventions detailed in (<xref section="1.3" sectionFormat="comma" target="RFC9000"/>)
when describing the binary encoding.</t>
        <t>To reduce unnecessary use of bandwidth, variable length integers <bcp14>SHOULD</bcp14>
be encoded using the least number of bytes possible to represent the
required value.</t>
        <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 (i),
  Object (i)
}
]]></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 designed to carry 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 a <tt>PROTOCOL_VIOLATION</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 (i),
  [Length (i),]
  Value (..)
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Delta Type: an unsigned integer, encoded as a varint, 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 a
<tt>PROTOCOL_VIOLATION</tt>.</t>
            </li>
            <li>
              <t>Value: A single varint encoded value 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 error code <tt>KEY_VALUE_FORMATTING_ERROR</tt>.</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 the error condition, where appropriate.</t>
          <artwork><![CDATA[
Reason Phrase {
  Reason Phrase Length (i),
  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 a <tt>PROTOCOL_VIOLATION</tt></t>
            </li>
            <li>
              <t>Reason Phrase Value: Additional diagnostic information about the 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>
      <section anchor="representing-namespace-and-track-names">
        <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, so they 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 as is,
while all other bytes are encoded as a period (.) symbol followed by
exactly two lower case hex digits.</t>
          </li>
        </ul>
        <t>The goal of this format is to have a format that is both filename and
URL safe. It allows many common names to be rendered in an easily human
readable form while still supporting binary values.</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>
    <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>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. A relay <bcp14>MUST NOT</bcp14> combine, split, or otherwise modify object
payloads.</t>
        <t>Objects within a Group are in ascending order by Object ID.</t>
        <t>From the perspective of a subscriber or a cache, an Object can be in three
possible states:</t>
        <ol spacing="normal" type="1"><li>
            <t>The Object is known to not exist. This state is permanent. MOQT has multiple
ways to communicate that a certain range of objects does not exist,
including the Object Status field, and the use of gaps in FETCH responses.</t>
          </li>
          <li>
            <t>The Object is known to exist. From this state, it can transition to not
existing, but not vice versa.</t>
          </li>
          <li>
            <t>The state of the Object is unknown, either because it has not been yet
received, or it has not been produced yet.</t>
          </li>
        </ol>
        <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 include extension headers indicating the group/object gaps; MOQT
implementers should take that into account when selecting appropriate data
structures.</t>
      </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,
typically with a one-to-one mapping between Subgroups and streams.</t>
        <t>When an Object's forwarding preference (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>Every Object within a Group belongs to exactly one Subgroup or Datagram.</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>
      </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, 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 cannot 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 range 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 1 and 32 Track Namespace Fields,
encoded as follows:</t>
          <artwork><![CDATA[
Track Namespace {
  Number of Track Namespace Fields (i),
  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 (i),
  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 a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>The structured nature of Track Namespace allows relays and applications to
manipulate prefixes of a namespace. If an endpoint receives a Track Namespace
consisting of 0 or greater than 32 Track Namespace Fields, it <bcp14>MUST</bcp14> close the
session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>Track Name is a sequence of bytes, possibly empty, that identifies an individual
track within the namespace.</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 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="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 is received in a FETCH response with the same Group ID as the
previous Object, but whose Object ID is not strictly larger than the previous
object.</t>
            </li>
            <li>
              <t>In a FETCH response, 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 in an Ascending FETCH response whose Group ID is smaller
than the previous Object in the response.</t>
            </li>
            <li>
              <t>An Object is received in a Descending FETCH response whose Group ID is larger
than the previous Object in the resopnse.</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 sent in a FETCH that requested the entire
Group.</t>
            </li>
            <li>
              <t>An Object is received on a Track 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 or the last Object sent in a FETCH whose response indicated
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 Forwarding Preference than previously
observed.</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> UNSUBSCRIBE any
subscription and FETCH_CANCEL any fetch for that Track from that publisher, 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="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>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="extension-headers">
        <name>Extension Headers</name>
        <t>Tracks and Objects can have additional relay-visible fields, known as Extension
Headers, which do not require negotiation, and can be used to alter
MoQT Object distribution.</t>
        <t>Extension Headers are defined in <xref target="moqt-extension-headers"/> as well as external
specifications and are registered in an IANA table <xref target="iana"/>. These
specifications define the type and value of the header, along with any rules
concerning processing, modification, caching and forwarding.</t>
        <t>If unsupported by the relay, Extension Headers <bcp14>MUST NOT</bcp14> be modified, <bcp14>MUST</bcp14> be
cached as part of the Track or Object and <bcp14>MUST</bcp14> be forwarded by relays.  If a
Track or Object arrives with a different set of unknown extensions 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 extensions received in different messages.</t>
        <t>If supported by the relay and subject to the processing rules specified in the
definition of the extension, Extension Headers <bcp14>MAY</bcp14> be modified, added, removed,
and/or cached by relays.</t>
        <t>Extension Headers are serialized as Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).</t>
        <t>Header types are registered in the IANA table 'MOQ Extension Headers'.
See <xref target="iana"/>.</t>
      </section>
    </section>
    <section anchor="session">
      <name>Sessions</name>
      <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. 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. The
RESET_STREAM_AT <xref target="I-D.draft-ietf-quic-reliable-stream-reset"/>
extension to QUIC can be used by MOQT, but the protocol is also
designed to work correctly when the extension is not supported.</t>
        <t>There is no definition of the protocol over other transports,
such as TCP, and applications using MoQ 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>[[RFC editor: please remove the remainder of this section before publication.]]</t>
        <t>The ALPN value <xref target="RFC7301"/> for the final version of this specification
is <tt>moqt</tt>.  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 CLIENT_SETUP and SERVER_SETUP messages.</t>
        <section anchor="webtransport">
          <name>WebTransport</name>
          <t>An MOQT server that is accessible via WebTransport can be identified
using an HTTPS URI (<xref section="4.2.2" sectionFormat="comma" target="RFC9110"/>).  An MOQT session can be
established by sending an extended CONNECT request to the host and the
path indicated by the URI, as described in
(<xref section="3" sectionFormat="comma" target="WebTransport"/>).</t>
        </section>
        <section anchor="quic">
          <name>QUIC</name>
          <t>An MOQT server that is accessible via native QUIC can be identified by a
URI with a "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>This protocol does not specify any semantics on the <tt>path-abempty</tt> and
<tt>query</tt> portions of the URI.  The contents of those are left up to the
application.</t>
          <t>The client can establish a connection to an MOQT server identified by a given
URI by setting up a QUIC connection to the host and port identified by the
<tt>authority</tt> section of the URI. The <tt>authority</tt>, <tt>path-abempty</tt> and <tt>query</tt>
portions of the URI are also transmitted in SETUP parameters (see
<xref target="setup-params"/>). If the port is omitted in the URI, a default port of 443 is
used for setting up the QUIC connection.</t>
        </section>
        <section anchor="connection-url">
          <name>Connection URL</name>
          <t>Each track <bcp14>MAY</bcp14> have one or more associated connection URLs specifying
network hosts through which a track may be accessed. The syntax of the
Connection URL and the associated connection setup procedures are
specific to the underlying transport protocol usage (see <xref target="session"/>).</t>
        </section>
      </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, or new framing for
Data Streams and Datagrams.</t>
        <t>The client and server <bcp14>MUST</bcp14> include all Setup Parameters <xref target="setup-params"/>
required for the negotiated MOQT version in CLIENT_SETUP and SERVER_SETUP.</t>
        <t>Clients request the use of extensions by specifying Parameters in CLIENT_SETUP.
The Server responds with Parameters in the SERVER_SETUP to indicate any
extensions it supports.</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 anchor="session-init">
        <name>Session initialization</name>
        <t>The first stream opened is a client-initiated bidirectional control stream where
the endpoints exchange Setup messages (<xref target="message-setup"/>), followed by other
messages defined in <xref target="message"/>.</t>
        <t>This specification only specifies two uses of bidirectional streams, the control
stream, which begins with CLIENT_SETUP, and SUBSCRIBE_NAMESPACE. 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 a Protocol Violation. Objects are sent on
unidirectional streams.</t>
        <t>A unidirectional stream containing Objects or bidirectional stream(s) containing a
SUBSCRIBE_NAMESPACE could arrive prior to the control stream, in which case the
data <bcp14>SHOULD</bcp14> be buffered until the control stream arrives and setup is complete.
If an implementation does not want to buffer, it <bcp14>MAY</bcp14> reset other bidirectional
streams before the session and control stream are established.</t>
        <t>The control stream <bcp14>MUST NOT</bcp14> be closed at the underlying transport layer during the
session's lifetime.  Doing so results in the session being closed as a
<tt>PROTOCOL_VIOLATION</tt>.</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>When terminating the Session, 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.</t>
          </dd>
          <dt>INVALID_REQUEST_ID (0x4):</dt>
          <dd>
            <t>The session was closed because the endpoint used a Request ID that was
smaller than or equal to a previously received request ID, or the least-
significant bit of the request ID was incorrect for the endpoint.</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>KEY_VALUE_FORMATTING_ERROR (0x6):</dt>
          <dd>
            <t>The key-value pair has a formatting error.</t>
          </dd>
          <dt>TOO_MANY_REQUESTS (0x7):</dt>
          <dd>
            <t>The session was closed because the endpoint used a Request ID equal to or
larger than the current Maximum Request ID.</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="authorization-token"/>).</t>
          </dd>
          <dt>VERSION_NEGOTIATION_FAILED (0x15):</dt>
          <dd>
            <t>The client didn't offer a version supported by the server.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x16):</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>UNKNOWN_AUTH_TOKEN_ALIAS (0x17):</dt>
          <dd>
            <t>No registered token found for the provided Alias (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x18):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</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>
        </dl>
        <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>
      <section anchor="session-migration">
        <name>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>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 server <bcp14>SHOULD</bcp14> close the session with <tt>GOAWAY_TIMEOUT</tt> after a
sufficient 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 any UNSUBSCRIBE messages to 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 server closes the session with a
<tt>GOAWAY_TIMEOUT</tt> if the client doesn't close the session quickly enough.</t>
      </section>
      <section anchor="congestion-control">
        <name>Congestion Control</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>
        </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 it's 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="modularity">
      <name>Modularity</name>
      <t>MOQT defines all messages necessary to implement both simple publishing or
subscribing endpoints as well as highly functional 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 anchor="publishing-and-retrieving-tracks">
      <name>Publishing and Retrieving Tracks</name>
      <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 or REQUEST_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 REQUEST_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 using
UNSUBSCRIBE, the publisher terminates a subscription in the <tt>Pending
(Publisher)</tt> or <tt>Established</tt> states using PUBLISH_DONE.</t>
        <t>This diagram shows the subscription state machine:</t>
        <artwork><![CDATA[
                              +--------+
                              |  Idle  |
                              +--------+
                                |    |
                      SUBSCRIBE |    | PUBLISH
                    (subscriber)|    | (publisher)
                                V    V
                   +--------------+ +--------------+
                   | Pending      | | Pending      |
              +----| (Subscriber) | | (Publisher)  |----+
              |    +--------------+ +--------------+    |
              |                 |    |                  |
REQUEST_ERROR |    SUBSCRIBE_OK |    | PUBLISH_OK       | REQUEST_ERROR
(publisher)   |      (publisher)|    | (subscriber)     | (subscriber)
              |                 V    V                  |
              |            +-------------+              |
              |            | Established | ------+
              |            |             |       | REQUEST_UPDATE
              |            +-------------+ <-----+
              |                 |    |                  |
              +---- UNSUBSCRIBE |    | PUBLISH_DONE ----+
              |     (subscriber)|    | (publisher)      |
              |                 V    V                  |
              |            +-------------+              |
              +----------->| Terminated  | <------------+
                           +-------------+
]]></artwork>
        <t>A publisher <bcp14>MUST</bcp14> send exactly one SUBSCRIBE_OK or REQUEST_ERROR in response to
a SUBSCRIBE. A subscriber <bcp14>MUST</bcp14> send exactly one PUBLISH_OK or REQUEST_ERROR in
response to a PUBLISH. The peer <bcp14>SHOULD</bcp14> close the session with a protocol error
if it receives more than one.</t>
        <t>A publisher <bcp14>MUST</bcp14> save the Largest Location communicated in PUBLISH or
SUBSCRIBE_OK when establishing a subscription. This value can be used in a
Joining FETCH (see <xref target="joining-fetches"/>) at any time while the subscription is
active.</t>
        <t>All <tt>Established</tt> subscriptions have a Forward State which is either 0 or 1.
The publisher does not send Objects if the Forward State is 0, and does send them
if the Forward State is 1.  The initiator of the subscription sets the initial
Forward State in either PUBLISH or SUBSCRIBE.  The subscriber can send PUBLISH_OK
or REQUEST_UPDATE to update the Forward State. Control messages, such as
PUBLISH_DONE (<xref target="message-publish-done"/>) are sent regardless of the forward state.</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>For a given Track, an endpoint can have at most one subscription to a Track
acting as the publisher and at most one acting as a subscriber.  If an endpoint
receives a message attempting to establish a second subscription to a Track
with the same role, it <bcp14>MUST</bcp14> fail that request with a <tt>DUPLICATE_SUBSCRIPTION</tt>
error.</t>
        <t>If a publisher receives a SUBSCRIBE request for a Track with an existing
subscription in <tt>Pending (publisher)</tt> state, it <bcp14>MUST</bcp14> fail that request with
a <tt>DUPLICATE_SUBSCRIPTION</tt> error. If a subscriber receives a PUBLISH for a Track
with a subscription in the <tt>Pending (Subscriber)</tt> state, it <bcp14>MUST</bcp14> ensure the
subscription it initiated transitions to the <tt>Terminated</tt> state before sending
PUBLISH_OK.</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 REQUEST_ERROR or sets Forward State=0 in PUBLISH_OK. 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>
        <section anchor="subscription-state-management">
          <name>Subscription State Management</name>
          <t>A subscriber keeps subscription state until it sends UNSUBSCRIBE, or after
receipt of a PUBLISH_DONE or REQUEST_ERROR. Note that PUBLISH_DONE does not
usually indicate that state can immediately be destroyed, see
<xref target="message-publish-done"/>.</t>
          <t>The Publisher can destroy subscription state as soon as it has received
UNSUBSCRIBE. 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 destroy relevant state. Objects <bcp14>MUST NOT</bcp14> be sent for requests that
end with an error.</t>
        </section>
        <section anchor="subscription-filters">
          <name>Subscription Filters</name>
          <t>Subscribers can specify a filter on a subscription indicating to the publisher
which Objects to send.  Subscriptions without a filter pass all Objects
published or received via upstream subscriptions.</t>
          <t>All filters have a Start Location and an optional End Group.  Only objects
published or received via a subscription having Locations greater than or
equal to Start Location and strictly less than or equal to the End Group (when
present) pass the filter.</t>
          <t>Some filters are defined to be relative to the <tt>Largest Object</tt>. 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.</t>
          <t>A Subscription Filter has the following structure:</t>
          <artwork><![CDATA[
Subscription Filter {
  Filter Type (i),
  [Start Location (Location),]
  [End Group (i),]
}
]]></artwork>
          <t>Filter Type can have one of the following values:</t>
          <t>Largest Object (0x2): The filter Start Location is <tt>{Largest Object.Group,
Largest Object.Object + 1}</tt> and <tt>Largest Object</tt> is communicated in
SUBSCRIBE_OK. If no content has been delivered yet, the filter Start Location is
{0, 0}. There is no End Group - the subscription is open ended.  Note that due
to network reordering or prioritization, relays can receive Objects with
Locations smaller than  <tt>Largest Object</tt> after the SUBSCRIBE is processed, but
these Objects do not pass the Largest Object filter.</t>
          <t>Next Group Start (0x1): The filter Start Location is <tt>{Largest Object.Group + 1,
0}</tt> and <tt>Largest Object</tt> is communicated in SUBSCRIBE_OK. If no content has been
delivered yet, the filter Start Location is {0, 0}.  There is no End Group -
the subscription is open ended. For scenarios where the subscriber intends to
start from more than one group in the future, it can use an AbsoluteStart filter
instead.</t>
          <t>AbsoluteStart (0x3): The filter Start Location is specified explicitly. The
specified <tt>Start Location</tt> <bcp14>MAY</bcp14> be less than the <tt>Largest Object</tt> observed at the
publisher. There is no End Group - the subscription is open ended.  An
AbsoluteStart filter with <tt>Start</tt> = {0, 0} is equivalent to an unfiltered
subscription.</t>
          <t>AbsoluteRange (0x4): The filter Start Location and End Group are specified
explicitly. The specified <tt>Start Location</tt> <bcp14>MAY</bcp14> be less than the <tt>Largest Object</tt>
observed at the publisher. If the specified <tt>End Group</tt> is the same group
specified in <tt>Start Location</tt>, the remainder of that Group passes the
filter. <tt>End Group</tt> <bcp14>MUST</bcp14> specify the same or a larger Group than specified in
<tt>Start Location</tt>.</t>
          <t>An endpoint that receives a filter type other than the above <bcp14>MUST</bcp14> close the
session with <tt>PROTOCOL_VIOLATION</tt>.</t>
        </section>
        <section anchor="joining-an-ongoing-track">
          <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 at a past Group, the subscriber sends a SUBSCRIBE with Filter
Type <tt>Largest Object</tt> followed by a Joining FETCH (see <xref target="joining-fetches"/>) for
the intended start Group, which can be relative.  To join a Track at the next
Group, the subscriber sends a SUBSCRIBE with Filter Type <tt>Next Group Start</tt>.</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 issue a Joining FETCH.  Publishers indicate a
Track supports dynamic group creation using the DYNAMIC_GROUPS parameter
(<xref target="dynamic-groups"/>).</t>
            <t>One possible subscriber pattern is to SUBSCRIBE to a Track using Filter Type
<tt>Largest Object</tt> and observe the <tt>Largest Location</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 Largest Location's Group, plus one (see
<xref target="new-group-request"/>).</t>
            <t>Another possible subscriber pattern is to send a SUBSCRIBE with Filter Type
<tt>Next Group Start</tt> 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>
      <section anchor="fetch-state-management">
        <name>Fetch State Management</name>
        <t>The publisher <bcp14>MUST</bcp14> send exactly one FETCH_OK or REQUEST_ERROR in response to a
FETCH.</t>
        <t>A subscriber keeps FETCH state until it sends FETCH_CANCEL, receives
REQUEST_ERROR, or receives a FIN or RESET_STREAM for the FETCH data stream. If the
data stream is already open, it <bcp14>MAY</bcp14> send STOP_SENDING for the data stream along
with FETCH_CANCEL, but <bcp14>MUST</bcp14> send FETCH_CANCEL.</t>
        <t>The Publisher can destroy fetch state as soon as it has received a
FETCH_CANCEL. It <bcp14>MUST</bcp14> reset any open streams associated with the FETCH. It can
also destroy state after closing the FETCH data stream.</t>
        <t>It can destroy all FETCH state after closing the data stream with a FIN.</t>
        <t>A REQUEST_ERROR indicates that both endpoints can immediately destroy 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="track-discovery">
      <name>Namespace Discovery</name>
      <t>Discovery of MOQT servers is always done out-of-band. Namespace discovery can be
done in the context of an established MOQT session.</t>
      <t>Given sufficient out of band information, it is valid for a subscriber to send a
SUBSCRIBE or FETCH message to a publisher (including a relay) without any
previous MOQT messages besides SETUP. However, SUBSCRIBE_NAMESPACE, PUBLISH and
PUBLISH_NAMESPACE messages provide an in-band means of discovery of publishers
for a namespace.</t>
      <t>The syntax of these messages is described in <xref target="message"/>.</t>
      <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
recipient of this message will send any relevant NAMESPACE,
NAMESPACE_DONE or PUBLISH messages for that namespace, or more specific
part of that namespace.  This includes echoing back published Tracks and/or Track
Namespaces under the SUBSCRIBE_NAMESPACE prefix to the endpoint that sent them.
If an endpoint accepts its own PUBLISH, this behaves as self-subscription described
in <xref target="subscriptions"/>.</t>
        <t>The subscriber sends SUBSCRIBE_NAMESPACE on a new bidirectional stream and the
publisher <bcp14>MUST</bcp14> send a single REQUEST_OK or REQUEST_ERROR as the first message on the
bidirectional stream in response to a SUBSCRIBE_NAMESPACE. The subscriber
<bcp14>SHOULD</bcp14> close the session with a protocol error if it detects receiving more
than one.</t>
        <t>The receiver of a REQUEST_OK or REQUEST_ERROR ought to
forward the result to the application, so the application can decide which other
publishers to contact, if any.</t>
        <t>A SUBSCRIBE_NAMESPACE can be cancelled by closing the stream with
either a FIN or RESET_STREAM. Cancelling does not prohibit original publishers
from sending further PUBLISH_NAMESPACE or 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>
      <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 that namespace. A subscriber <bcp14>MAY</bcp14> send SUBSCRIBE or FETCH for tracks
in a namespace without having received a PUBLISH_NAMESPACE for it.</t>
        <t>If a publisher is authoritative for a given namespace, or is a relay that has
received an authorized PUBLISH_NAMESPACE for that namespace from an upstream
publisher, it <bcp14>MUST</bcp14> send a PUBLISH_NAMESPACE to any subscriber that has
subscribed via SUBSCRIBE_NAMESPACE for that namespace, or a prefix of that
namespace. A publisher <bcp14>MAY</bcp14> send the PUBLISH_NAMESPACE to any other subscriber.</t>
        <t>An endpoint <bcp14>SHOULD</bcp14> report the reception of a REQUEST_OK or
REQUEST_ERROR to the application to inform the search for additional
subscribers for a namespace, or to abandon the attempt to publish under this
namespace. This might be especially useful in upload or chat applications. A
subscriber <bcp14>MUST</bcp14> send exactly one REQUEST_OK or REQUEST_ERROR
in response to a PUBLISH_NAMESPACE. The publisher <bcp14>SHOULD</bcp14> close the session with
a protocol error if it receives more than one.</t>
        <t>A PUBLISH_NAMESPACE_DONE message withdraws a previous PUBLISH_NAMESPACE,
although it is not a protocol error for the subscriber to send a SUBSCRIBE or
FETCH message for a track in a namespace after receiving an
PUBLISH_NAMESPACE_DONE.</t>
        <t>A subscriber can send PUBLISH_NAMESPACE_CANCEL to revoke acceptance of an
PUBLISH_NAMESPACE, for example due to expiration of authorization
credentials. The message enables the publisher to PUBLISH_NAMESPACE again with
refreshed authorization, or discard associated state. After receiving an
PUBLISH_NAMESPACE_CANCEL, the publisher does not send PUBLISH_NAMESPACE_DONE.</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 and other phenomena. In particular, PUBLISH_NAMESPACE <bcp14>SHOULD NOT</bcp14>
be used to find paths through richly connected networks of relays.</t>
        <t>A subscriber <bcp14>MAY</bcp14> send a SUBSCRIBE or FETCH for a track to any publisher. If it
has accepted a PUBLISH_NAMESPACE with a namespace that exactly matches the
namespace for that track, it <bcp14>SHOULD</bcp14> only request it from the senders of those
PUBLISH_NAMESPACE messages.</t>
      </section>
    </section>
    <section anchor="priorities">
      <name>Priorities</name>
      <t>MoQ 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 forwarding preference 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
response to SUBSCRIBE, 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 specified in the SUBSCRIBE or FETCH message, and can be
updated via REQUEST_UPDATE message.  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 can be specified in the parameters of PUBLISH, or
SUBSCRIBE_OK. Publisher priority can also be specified in a subgroup header or
datagram (see <xref target="data-streams"/>).</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 message; the
publisher's preference is used if the subscriber did not express one (by
setting Group Order field to value 0x0).  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 response to the same request have the same subscriber
and publisher priority, but belong to two different groups of the same track,
<strong>the group order</strong> of the associated subscription is used to
decide the one that is scheduled to be sent first.</t>
          </li>
          <li>
            <t>If two objects in response to the same request have the same subscriber
and publisher priority and belong to the same group of the same track, the
one with <strong>the lowest Subgroup ID</strong> (for objects with forwarding preference
Subgroup), or <strong>the lowest Object ID</strong> (for objects with forwarding preference
Datagram) is scheduled to be sent first.  If the two objects have
different Forwarding Preferences the order is implementation dependent.</t>
          </li>
        </ol>
        <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 stream <bcp14>SHOULD</bcp14> be prioritized higher than all
subscribed Objects.</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. Relays' 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>MoQ 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 MoQ 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="relays-moq">
      <name>Relays</name>
      <t>Relays are leveraged to enable distribution scale in the MoQ
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 MoQ Object metadata.</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.  The only Object
fields that can be updated are the following:</t>
        <ol spacing="normal" type="1"><li>
            <t>Object can transition from existing to not existing in cases where the
object is no longer available.</t>
          </li>
          <li>
            <t>Object Extension Headers can be added, removed or updated, subject
to the constraints of the specific header extension.</t>
          </li>
        </ol>
        <t>An endpoint that receives a duplicate Object with a different Forwarding
Preference, 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 extension could be removed in FETCH,
where it's redundant.</t>
        <t>Note that due to reordering, an implementation can receive an Object after
receiving an indication that the Object in question does not exist.  The
endpoint <bcp14>SHOULD NOT</bcp14> cache or forward the object in this case.</t>
        <t>A cache <bcp14>MUST</bcp14> store all properties of an Object defined in
<xref target="object-properties"/>, with the exception of any extensions
(<xref target="object-extensions"/>) that specify otherwise.</t>
      </section>
      <section anchor="forward-handling">
        <name>Forward Handling</name>
        <t>Relays <bcp14>SHOULD</bcp14> set the <tt>Forward</tt> flag to 1 when a new subscription needs to be
sent upstream, regardless of the value of the <tt>Forward</tt> field from the
downstream subscription. Subscriptions that are not forwarded consume resources
from the publisher, so a publisher might deprioritize, reject, or close those
subscriptions to ensure other subscriptions can be delivered.</t>
      </section>
      <section anchor="multiple-publishers">
        <name>Multiple Publishers</name>
        <t>A Relay can receive PUBLISH_NAMESPACE for the same Track Namespace 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,
UNSUBSCRIBE or PUBLISH_NAMESPACE_CANCEL 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="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>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-timeout"/>).</t>
        <t>A relay <bcp14>MUST NOT</bcp14> reorder or drop objects received on a multi-object stream when
forwarding to subscribers, unless it has application specific information.</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.
Because MOQT restricts widening a subscription, relays that
aggregate upstream subscriptions can subscribe using the Largest Object
filter to avoid churn as downstream subscribers with disparate filters
subscribe and unsubscribe from a Track.</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 stopped with an UNSUBSCRIBE.</t>
        </section>
      </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>
respond with PUBLISH_OK in Forward State=0 until there are known subscribers for
new Tracks.</t>
          </li>
          <li>
            <t>Send a PUBLISH_NAMESPACE message for a Track Namespace to the relay. This
enables the relay to send SUBSCRIBE or FETCH messages to publishers for Tracks
in this Namespace 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 namespace 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
sends a PUBLISH_NAMESPACE_DONE. A subscriber indicates it will no longer
subcribe to Tracks in a namespace it previously responded REQUEST_OK
to by sending a PUBLISH_NAMESPACE_CANCEL.</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 is further used to decide which publishers receive a
SUBSCRIBE and which subscribers receive a PUBLISH. In this process, the fields
in the Track Namespace are matched sequentially, requiring an exact match for
each field. If the published or subscribed Track Namespace has the same or fewer
fields than the Track Namespace in the message, it qualifies as a match.</t>
        <t>For example:
A SUBSCRIBE message with namespace=(foo, bar) and name=x will match sessions
that sent PUBLISH_NAMESPACE messages with namespace=(foo) or namespace=(foo,
bar).  It will not match a session with namespace=(foobar).</t>
        <t>Relays <bcp14>MUST</bcp14> send SUBSCRIBE messages to all matching publishers. This includes
matching both Established subscriptions on the Full Track Name and Namespace
Prefix Matching against published Namespaces.  Relays <bcp14>MUST</bcp14> forward
PUBLISH_NAMESPACE or PUBLISH messages to all matching subscribers.</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>MAY</bcp14> send the FETCH to any of them.</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 has Forward State=1 and the upstream subscriptions are in Forward
State=0, the Relay <bcp14>MUST</bcp14> send REQUEST_UPDATE with Forward=1 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 has Forward=1,
then the Relay <bcp14>MUST</bcp14> use Forward=1 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 subscribed (via SUBSCRIBE_NAMESPACE)
to the Track's namespace or prefix thereof.</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.  When it 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 has
Forward State=1, the Relay <bcp14>MUST</bcp14> use Forward State=1 in the reply.</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 Extension Headers associated with a Track when sending any PUBLISH,
SUBSCRIBE_OK, REQUEST_OK when in response to a TRACK_STATUS, or FETCH_OK, unless allowed by
the extension's specification (see <xref target="extension-headers"/>).</t>
      </section>
      <section anchor="relay-object-handling">
        <name>Relay Object Handling</name>
        <t>MOQT encodes the delivery information via Object headers
(<xref target="message-object"/>).  A relay <bcp14>MUST NOT</bcp14> modify Object properties
when forwarding, except for Object Extension Headers as specified in
<xref target="extension-headers"/>.</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.  A relay <bcp14>SHOULD</bcp14>
prioritize sending Objects based on <xref target="priorities"/>.</t>
      </section>
    </section>
    <section anchor="message">
      <name>Control Messages</name>
      <t>MOQT uses a single bidirectional stream to exchange control messages, as
defined in <xref target="session-init"/>.  Every single message on the control stream is
formatted as follows:</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Control Message</name>
        <artwork><![CDATA[
MOQT Control Message {
  Message Type (i),
  Message Length (16),
  Message Payload (..),
}
]]></artwork>
      </figure>
      <t>The following Message Types are defined:</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x01</td>
            <td align="left">RESERVED (SETUP for version 00)</td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">RESERVED (CLIENT_SETUP for versions &lt;= 10)</td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">RESERVED (SERVER_SETUP for versions &lt;= 10)</td>
          </tr>
          <tr>
            <td align="right">0x20</td>
            <td align="left">CLIENT_SETUP (<xref target="message-setup"/>)</td>
          </tr>
          <tr>
            <td align="right">0x21</td>
            <td align="left">SERVER_SETUP (<xref target="message-setup"/>)</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
          </tr>
          <tr>
            <td align="right">0x15</td>
            <td align="left">MAX_REQUEST_ID (<xref target="message-max-request-id"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1A</td>
            <td align="left">REQUESTS_BLOCKED (<xref target="message-requests-blocked"/>)</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">REQUEST_OK (<xref target="message-request-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">REQUEST_ERROR  (<xref target="message-request-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x3</td>
            <td align="left">SUBSCRIBE (<xref target="message-subscribe-req"/>)</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">REQUEST_UPDATE (<xref target="message-request-update"/>)</td>
          </tr>
          <tr>
            <td align="right">0xA</td>
            <td align="left">UNSUBSCRIBE (<xref target="message-unsubscribe"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1D</td>
            <td align="left">PUBLISH  (<xref target="message-publish"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1E</td>
            <td align="left">PUBLISH_OK (<xref target="message-publish-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">PUBLISH_DONE (<xref target="message-publish-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0x16</td>
            <td align="left">FETCH (<xref target="message-fetch"/>)</td>
          </tr>
          <tr>
            <td align="right">0x18</td>
            <td align="left">FETCH_OK (<xref target="message-fetch-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x17</td>
            <td align="left">FETCH_CANCEL (<xref target="message-fetch-cancel"/>)</td>
          </tr>
          <tr>
            <td align="right">0xD</td>
            <td align="left">TRACK_STATUS (<xref target="message-track-status"/>)</td>
          </tr>
          <tr>
            <td align="right">0x6</td>
            <td align="left">PUBLISH_NAMESPACE  (<xref target="message-pub-ns"/>)</td>
          </tr>
          <tr>
            <td align="right">0x8</td>
            <td align="left">NAMESPACE  (<xref target="message-namespace"/>)</td>
          </tr>
          <tr>
            <td align="right">0x9</td>
            <td align="left">PUBLISH_NAMESPACE_DONE  (<xref target="message-pub-ns-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0xE</td>
            <td align="left">NAMESPACE_DONE  (<xref target="message-namespace-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0xC</td>
            <td align="left">PUBLISH_NAMESPACE_CANCEL (<xref target="message-pub-ns-cancel"/>)</td>
          </tr>
          <tr>
            <td align="right">0x11</td>
            <td align="left">SUBSCRIBE_NAMESPACE (<xref target="message-subscribe-ns"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session.
Control messages have a length to make parsing easier, but no control messages
are intended to be ignored. The length is set to the number of bytes in Message
Payload, which is defined by each message type.  If the length does not match
the length of the Message Payload, the receiver <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
      <section anchor="request-id">
        <name>Request ID</name>
        <t>Most MOQT control messages contain a session specific Request ID.  The Request
ID correlates requests and responses, allows endpoints to update or terminate
ongoing requests, and supports the endpoint's ability to limit the concurrency
and frequency of requests.  Request IDs for one endpoint increment independently
from those sent by the peer endpoint.  The client's Request ID starts at 0 and
are even and the server's Request ID starts at 1 and are odd.  The Request ID
increments by 2 with each FETCH, SUBSCRIBE, REQUEST_UPDATE,
SUBSCRIBE_NAMESPACE, PUBLISH, PUBLISH_NAMESPACE or TRACK_STATUS request.
Other messages with a Request ID field reference the Request ID of another
message for correlation. If an endpoint receives a Request ID that is not valid
for the peer, or a new request with a Request ID that is not the next in
sequence or exceeds the received MAX_REQUEST_ID, it <bcp14>MUST</bcp14> close the session with
<tt>INVALID_REQUEST_ID</tt>.</t>
      </section>
      <section anchor="params">
        <name>Parameters</name>
        <t>Some messages include a Parameters field that encodes optional message elements.
Parameters in the CLIENT_SETUP and SERVER_SETUP messages are called Setup
Parameters.  Parameters in other control messages are Message Parameters.
Receivers ignore unrecognized Setup Parameters.  All Message Parameters <bcp14>MUST</bcp14> be
defined in the negotiated version of MOQT or negotiated via Setup Parameters.
An endpoint that receives an unknown Message Parameter <bcp14>MUST</bcp14> close the session
with <tt>PROTOCOL_VIOLATION</tt>.</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 as a
<tt>PROTOCOL_VIOLATION</tt> if found.  Receivers <bcp14>MUST</bcp14> allow duplicates of unknown
Setup Parameters.</t>
        <t>The number of parameters in a message is not specifically limited, but the
total length of a control message is limited to 2^16-1 bytes.</t>
        <t>Parameters are serialized as Key-Value-Pairs <xref target="moq-key-value-pair"/>.</t>
        <t>Setup Parameters use a namespace that is constant across all MOQT
versions. All other messages use a version-specific namespace.
For example, the integer '1' can refer to different parameters for Setup
messages and for all other message types. SETUP message parameter types
are defined in <xref target="setup-params"/>. Version-specific parameter types are defined
in <xref target="message-params"/>.</t>
        <t>Message Parameters in SUBSCRIBE, PUBLISH_OK 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.  Any Track metadata sent by the publisher that is forwarded to
subscribers is sent as Track Extension header.</t>
        </section>
        <section anchor="message-params">
          <name>Message Parameters</name>
          <t>Each message parameter definition indicates the message types in which
it can appear. If it appears in some other type of message, it <bcp14>MUST</bcp14> be ignored.
Note that since Setup parameters use a separate namespace, it is impossible for
these parameters to appear in Setup messages.</t>
          <section anchor="authorization-token">
            <name>AUTHORIZATION TOKEN Parameter</name>
            <t>The AUTHORIZATION TOKEN parameter (Parameter Type 0x03) <bcp14>MAY</bcp14> appear in a
PUBLISH, SUBSCRIBE, REQUEST_UPDATE, SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE,
TRACK_STATUS or FETCH message. This parameter conveys information to authorize
the sender to perform the operation carrying the parameter.</t>
            <t>The parameter 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 (i),
  [Token Alias (i),]
  [Token Type (i),]
  [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 may be discarded after processing.</t>
              </dd>
            </dl>
            <t>If a server receives Alias Type DELETE (0x0) or USE_ALIAS (0x2) in a CLIENT_SETUP
message, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            <ul spacing="normal">
              <li>
                <t>Token Alias - a Session-specific integer identifier that references a 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, the receiver <bcp14>MUST</bcp14> close the Session
with <tt>KEY_VALUE_FORMATTING_ERROR</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 but otherwise
invalid AUTHORIZATION TOKEN parameter <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 the 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 parameter defining the
MAX_AUTH_TOKEN_CACHE_SIZE limit (see <xref target="max-auth-token-cache-size"/>) it is
willing to accept. If a registration is attempted which would cause this limit
to be exceeded, the receiver <bcp14>MUST</bcp14> termiate the Session with a
<tt>AUTH_TOKEN_CACHE_OVERFLOW</tt> error.</t>
            <t>The AUTHORIZATION TOKEN parameter <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>
          </section>
          <section anchor="delivery-timeout">
            <name>DELIVERY TIMEOUT Parameter</name>
            <t>The DELIVERY TIMEOUT parameter (Parameter Type 0x02) <bcp14>MAY</bcp14> appear in a
PUBLISH_OK, SUBSCRIBE, or REQUEST_UPDATE message.</t>
            <t>It is the duration in milliseconds the relay <bcp14>SHOULD</bcp14>
continue to attempt forwarding Objects after they have been received.  The start
time for the timeout is based on when the Object Headers are received, and does
not depend upon the forwarding preference. Objects with forwarding preference
'Datagram' are not retransmitted when lost, so the Delivery Timeout only limits
the amount of time they can be queued before being sent. There is no explicit
signal that an Object was not sent because the delivery timeout was exceeded.</t>
            <t>DELIVERY_TIMEOUT, if present, <bcp14>MUST</bcp14> contain a value greater than 0.  If an
endpoint receives a DELIVERY_TIMEOUT equal to 0 it <bcp14>MUST</bcp14> close the session
with <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>If both the subscriber specifies this parameter and the Track has a
DELIVERY_TIMEOUT extension, the endpoints use the min of
the two values for the subscription.</t>
            <t>Publishers can, at their discretion, discontinue forwarding Objects earlier than
the negotiated DELIVERY TIMEOUT, subject to stream closure and ordering
constraints described in <xref target="closing-subgroup-streams"/>.  However, if neither the
subscriber nor publisher specifies DELIVERY TIMEOUT, 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 with error <tt>TOO_FAR_BEHIND</tt>.</t>
            <t>If an object in a subgroup exceeds the delivery timeout, the publisher <bcp14>MUST</bcp14>
reset the underlying transport stream (see <xref target="closing-subgroup-streams"/>) and
<bcp14>SHOULD NOT</bcp14> attempt to open a new stream to deliver additional Objects in that
Subgroup.</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>
            <t>Publishers <bcp14>SHOULD</bcp14> consider whether the entire Object can likely be
successfully delivered within the timeout period before sending any data
for that Object, taking into account priorities, congestion control, and
any other relevant information.</t>
          </section>
          <section anchor="subscriber-priority">
            <name>SUBSCRIBER PRIORITY Parameter</name>
            <t>The SUBSCRIBER_PRIORITY parameter (Parameter Type 0x20) <bcp14>MAY</bcp14> appear in a
SUBSCRIBE, FETCH, REQUEST_UPDATE (for a subscription or FETCH),
PUBLISH_OK message. 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"/>.  The range is restricted to 0-255.  If a
publisher receives a value outside this range, it <bcp14>MUST</bcp14> close the session with
<tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>If omitted from SUBSCRIBE, PUBLISH_OK 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) <bcp14>MAY</bcp14> appear in a SUBSCRIBE,
PUBLISH_OK, or FETCH.</t>
            <t>It
is an enum indicating 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="fetch-handling"/>). 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>PROTOCOL_VIOLATION</tt>.</t>
            <t>If omitted from SUBSCRIBE, the publisher's preference from
the Track is used. If omitted from FETCH, the receiver uses Ascending (0x1).</t>
          </section>
          <section anchor="subscription-filter">
            <name>SUBSCRIPTION FILTER Parameter</name>
            <t>The SUBSCRIPTION_FILTER parameter (Parameter Type 0x21) <bcp14>MAY</bcp14> appear in a
SUBSCRIBE, PUBLISH_OK or REQUEST_UPDATE (for a subscription) message. It is a
length-prefixed Subscription Filter (see <xref target="subscription-filters"/>).  If the
length of the Subscription Filter does not match the parameter length, the
publisher <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>If omitted from SUBSCRIBE or PUBLISH_OK, the subscription is
unfiltered.  If omitted from REQUEST_UPDATE, the value is unchanged.</t>
          </section>
          <section anchor="expires">
            <name>EXPIRES Parameter</name>
            <t>The EXPIRES parameter (Parameter Type 0x8) <bcp14>MAY</bcp14> appear in SUBSCRIBE_OK, PUBLISH
or PUBLISH_OK (TODO: or REQUEST_OK).  It is a variable length integer encoding
the time in milliseconds after which the sender of the parameter will terminate
the subscription. The sender will terminate the subscription using PUBLISH_DONE
or UNSUBSCRIBE, depending on its role.  This value is advisory and the sender
can terminate the subscription prior to or after the expiry time.</t>
            <t>The receiver of the parameter can extend the subscription by sending a
REQUEST_UPDATE. If the receiver of the parameter
has one or more updated AUTHORIZATION_TOKENs, it <bcp14>SHOULD</bcp14> include those in the
REQUEST_UPDATE. 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 subscription
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) <bcp14>MAY</bcp14> appear in SUBSCRIBE_OK,
PUBLISH or in REQUEST_OK (in response to REQUEST_UPDATE or TRACK_STATUS).  It is a
length-prefixed Location structure (see <xref target="location-structure"/>) containing the
largest Location in the Track observed by the sending endpoint (see
<xref target="subscription-filters"/>.  If Objects have been published on this Track the
Publisher <bcp14>MUST</bcp14> include this parameter.</t>
            <t>If omitted from a message, the sending endpoint has not published or received
any Objects in the Track.</t>
          </section>
          <section anchor="forward-parameter">
            <name>FORWARD Parameter</name>
            <t>The FORWARD parameter (Parameter Type 0x10) <bcp14>MAY</bcp14> appear in SUBSCRIBE,
REQUEST_UPDATE (for a subscription), PUBLISH, PUBLISH_OK and
SUBSCRIBE_NAMESPACE.  It is a variable length integer specifying the
Forwarding State on affected subscriptions (see <xref target="subscriptions"/>).  The
allowed values are 0 (don't forward) or 1 (forward). If an endpoint receives a
value outside this range, it <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>If the parameter is omitted from REQUEST_UPDATE, the value for the
subscription remains unchanged.  If the parameter is omitted from any other
message, the default value is 1.</t>
          </section>
          <section anchor="new-group-request">
            <name>NEW GROUP REQUEST Parameter</name>
            <t>The NEW_GROUP_REQUEST parameter (parameter type 0x32) <bcp14>MAY</bcp14> appear in PUBLISH_OK,
SUBSCRIBE or REQUEST_UPDATE for a subscription.  It is an integer representing 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 PUBLISH_OK or REQUEST_UPDATE if the Track did not
include the DYNAMIC_GROUPS Extension 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 in that
case.</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, acheiving 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>
      </section>
      <section anchor="message-setup">
        <name>CLIENT_SETUP and SERVER_SETUP</name>
        <t>The <tt>CLIENT_SETUP</tt> and <tt>SERVER_SETUP</tt> messages are the first messages exchanged
by the client and the server; they allow the endpoints to agree on the initial
configuration before any control messsages are exchanged. The messages contain
a sequence of key-value pairs called Setup parameters; 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 parameters.
TODO: describe GREASE for Setup Parameters.</t>
        <t>The wire format of the Setup messages are as follows:</t>
        <figure anchor="moq-transport-setup-format">
          <name>MOQT Setup Messages</name>
          <artwork><![CDATA[
CLIENT_SETUP Message {
  Type (i) = 0x20,
  Length (16),
  Number of Parameters (i),
  Setup Parameters (..) ...,
}

SERVER_SETUP Message {
  Type (i) = 0x21,
  Length (16),
  Number of Parameters (i),
  Setup Parameters (..) ...,
}
]]></artwork>
        </figure>
        <t>The available Setup parameters are detailed in the next sections.</t>
        <section anchor="setup-params">
          <name>Setup Parameters</name>
          <section anchor="authority">
            <name>AUTHORITY</name>
            <t>The AUTHORITY parameter (Parameter Type 0x05) allows the client to specify the
authority component of the MoQ URI when using native QUIC (<xref target="QUIC"/>).  It <bcp14>MUST
NOT</bcp14> be used by the server, or when WebTransport is used.  When an AUTHORITY
parameter is received from a server, or when an AUTHORITY parameter is received
while WebTransport is used, or when an AUTHORITY parameter 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 parameter 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 parameter to the <tt>authority</tt> portion of the
URI. If an AUTHORITY parameter 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 parameter (Parameter Type 0x01) allows the client to specify the path
of the MoQ URI when using native QUIC (<xref target="QUIC"/>).  It <bcp14>MUST NOT</bcp14> be used by
the server, or when WebTransport is used.  When a PATH parameter 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 parameter 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 parameter 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 parameter. 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-request-id">
            <name>MAX_REQUEST_ID</name>
            <t>The MAX_REQUEST_ID parameter (Parameter Type 0x02) communicates an initial
value for the Maximum Request ID to the receiving endpoint. The default
value is 0, so if not specified, the peer <bcp14>MUST NOT</bcp14> send requests.</t>
          </section>
          <section anchor="max-auth-token-cache-size">
            <name>MAX_AUTH_TOKEN_CACHE_SIZE</name>
            <t>The MAX_AUTH_TOKEN_CACHE_SIZE parameter (Parameter Type 0x04) communicates the
maximum size in bytes of all actively registered Authorization tokens that the
endpoint is willing to store per Session. This parameter 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 parameter 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 parameter (Parameter Type 0x03)) is funcionally
equivalient to the AUTHORIZATION TOKEN message parameter, see <xref target="authorization-token"/>.
The endpoint can specify one or more tokens in CLIENT_SETUP or SERVER_SETUP
that the peer can use to authorize MOQT session establishment.</t>
            <t>If a server receives an AUTHORIZATION TOKEN parameter in CLIENT_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
parameter as Alias Type USE_VALUE.  A client <bcp14>MUST</bcp14> handle registration failures
of this kind by purging any Token Aliases that failed to register based on the
MAX_AUTH_TOKEN_CACHE_SIZE parameter in SERVER_SETUP (or the default value of 0).</t>
          </section>
          <section anchor="moqt-implementation">
            <name>MOQT IMPLEMENTATION</name>
            <t>The MOQT_IMPLEMENTATION parameter (Parameter 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>
          </section>
        </section>
      </section>
      <section anchor="message-goaway">
        <name>GOAWAY</name>
        <t>An endpoint sends a <tt>GOAWAY</tt> message to inform the peer it intends to close
the session soon.  Servers can use GOAWAY to initiate session migration
(<xref target="session-migration"/>) with an optional URI.</t>
        <t>The GOAWAY message does not impact subscription state. A subscriber
<bcp14>SHOULD</bcp14> individually UNSUBSCRIBE for each existing subscription, while a
publisher <bcp14>MAY</bcp14> reject new requests after sending a GOAWAY.</t>
        <t>Upon receiving a GOAWAY, an endpoint <bcp14>SHOULD NOT</bcp14> initiate new requests to the
peer including SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE 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., SUBSCRIBE_ERROR with error code GOING_AWAY).</t>
        <t>The endpoint <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>
(<xref target="session-termination"/>) if it receives multiple GOAWAY messages.</t>
        <figure anchor="moq-transport-goaway-format">
          <name>MOQT GOAWAY Message</name>
          <artwork><![CDATA[
GOAWAY Message {
  Type (i) = 0x10,
  Length (16),
  New Session URI Length (i),
  New Session URI (..),
}
]]></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.  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 maxmimum 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 a <tt>PROTOCOL_VIOLATION</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 a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-max-request-id">
        <name>MAX_REQUEST_ID</name>
        <t>An endpoint sends a MAX_REQUEST_ID message to increase the number of requests
the peer can send within a session.</t>
        <t>The Maximum Request ID <bcp14>MUST</bcp14> only increase within a session. If an endpoint
receives MAX_REQUEST_ID message with an equal or smaller Request ID it <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <figure anchor="moq-transport-max-request-id">
          <name>MOQT MAX_REQUEST_ID Message</name>
          <artwork><![CDATA[
MAX_REQUEST_ID Message {
  Type (i) = 0x15,
  Length (16),
  Max Request ID (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Max Request ID: The new Maximum Request ID for the session plus 1. If a
Request ID equal to or larger than this is received by the endpoint that sent
the MAX_REQUEST_ID in any request message (PUBLISH_NAMESPACE, FETCH,
SUBSCRIBE, SUBSCRIBE_NAMESPACE, REQUEST_UPDATE or TRACK_STATUS), the
endpoint <bcp14>MUST</bcp14> close the session with an error of <tt>TOO_MANY_REQUESTS</tt>.</t>
          </li>
        </ul>
        <t>MAX_REQUEST_ID is similar to MAX_STREAMS in (<xref section="4.6" sectionFormat="comma" target="RFC9000"/>), and
similar considerations apply when deciding how often to send MAX_REQUEST_ID.
For example, implementations might choose to increase MAX_REQUEST_ID as
subscriptions are closed to keep the number of available subscriptions roughly
consistent.</t>
      </section>
      <section anchor="message-requests-blocked">
        <name>REQUESTS_BLOCKED</name>
        <t>The REQUESTS_BLOCKED message is sent when an endpoint would like to send a new
request, but cannot because the Request ID would exceed the Maximum Request ID
value sent by the peer.  The endpoint <bcp14>SHOULD</bcp14> send only one REQUESTS_BLOCKED for
a given Maximum Request ID.</t>
        <t>An endpoint <bcp14>MAY</bcp14> send a MAX_REQUEST_ID upon receipt of REQUESTS_BLOCKED, but it
<bcp14>MUST NOT</bcp14> rely on REQUESTS_BLOCKED to trigger sending a MAX_REQUEST_ID, because
sending REQUESTS_BLOCKED is not required.</t>
        <figure anchor="moq-transport-requests-blocked">
          <name>MOQT REQUESTS_BLOCKED Message</name>
          <artwork><![CDATA[
REQUESTS_BLOCKED Message {
  Type (i) = 0x1A,
  Length (16),
  Maximum Request ID (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Maximum Request ID: The Maximum Request ID for the session on which the
endpoint is blocked. More on Request ID in <xref target="request-id"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-ok">
        <name>REQUEST_OK</name>
        <t>The REQUEST_OK message is sent to a response to REQUEST_UPDATE, TRACK_STATUS,
SUBSCRIBE_NAMESPACE and PUBLISH_NAMESPACE requests. The unique request ID in the
REQUEST_OK is used to associate it with the correct type of request.</t>
        <figure anchor="moq-transport-request-ok">
          <name>MOQT REQUEST_OK Message</name>
          <artwork><![CDATA[
REQUEST_OK Message {
  Type (i) = 0x7,
  Length (16),
  Request ID (i),
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID to which this message is replying.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-error">
        <name>REQUEST_ERROR</name>
        <t>The REQUEST_ERROR message is sent to a response to any request (SUBSCRIBE, FETCH,
PUBLISH, SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, TRACK_STATUS). The unique
request ID in the REQUEST_ERROR is used to associate it with the correct type of
request.</t>
        <figure anchor="moq-transport-request-error">
          <name>MOQT REQUEST_ERROR Message</name>
          <artwork><![CDATA[
REQUEST_ERROR Message {
  Type (i) = 0x5,
  Length (16),
  Request ID (i),
  Error Code (i),
  Retry Interval (i),
  Error Reason (Reason Phrase),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID to which this message is replying.</t>
          </li>
          <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>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in 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>
        <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>
        <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="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN:</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</t>
          </dd>
          <dt>DUPLICATE_SUBSCRIPTION (0x19):</dt>
          <dd>
            <t>The PUBLISH or SUBSCRIBE request attempted to create a subscription to a Track
with the same role as an existing subscription.</t>
          </dd>
        </dl>
        <t>Below are errors for use by the publisher. They can appear in response to
SUBSCRIBE, FETCH, TRACK_STATUS, and SUBSCRIBE_NAMESPACE, 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>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>PREFIX_OVERLAP:</dt>
          <dd>
            <t>In response to SUBSCRIBE_NAMESPACE, the namespace prefix overlaps with another
SUBSCRIBE_NAMESPACE in the same session.</t>
          </dd>
          <dt>INVALID_JOINING_REQUEST_ID:</dt>
          <dd>
            <t>In response to a Joining FETCH, the referenced Request ID is not an
<tt>Established</tt> Subscription.</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-subscribe-req">
        <name>SUBSCRIBE</name>
        <t>A subscription causes the publisher to send newly published objects for a track.</t>
        <t>Subscribe only requests newly published or received Objects.  Objects from the
past are retrieved using FETCH (<xref target="message-fetch"/>).</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 (i) = 0x3,
  Length (16),
  Request ID (i),
  Track Namespace (..),
  Track Name Length (i),
  Track Name (..),
  Number of Parameters (i),
  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-name"/>).</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"/>.</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>
        <t>If the publisher cannot satisfy the requested Subscription Filter (see
<xref target="subscription-filter"/>) or if the entire End Group has already been published
it <bcp14>SHOULD</bcp14> send a REQUEST_ERROR with code <tt>INVALID_RANGE</tt>.  A publisher <bcp14>MUST
NOT</bcp14> send objects from outside the requested range.</t>
        <t>Subscribing with the FORWARD parameter (<xref target="forward-parameter"/>) equal to 0 allows
publisher or relay to prepare to serve the subscription in advance, reducing the
time to receive objects in the future.</t>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A publisher sends a SUBSCRIBE_OK control message for successful
subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK Message {
  Type (i) = 0x4,
  Length (16),
  Request ID (i),
  Track Alias (i),
  Number of Parameters (i),
  Parameters (..) ...,
  Track Extensions (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the SUBSCRIBE this message is replying to
<xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>). The same Track Alias <bcp14>MUST NOT</bcp14> be used to refer to two
different Tracks simultaneously. If a subscriber receives a 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>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Extensions : A sequence of Extension Headers. See <xref target="extension-headers"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-update">
        <name>REQUEST_UPDATE</name>
        <t>The sender of a request (SUBSCRIBE, PUBLISH, FETCH, TRACK_STATUS,
PUBLISH_NAMESPACE, SUBSCRIBE_NAMESPACE) can later send a REQUEST_UPDATE to
modify it.  A subscriber can also send REQUEST_UPDATE to modify parameters of a
subscription established with PUBLISH.</t>
        <t>The receiver of a REQUEST_UPDATE <bcp14>MUST</bcp14> respond with exactly one REQUEST_OK
or REQUEST_ERROR message indicating if the update was successful.</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 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 (i) = 0x2,
  Length (16),
  Request ID (i),
  Existing Request ID (i),
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Existing Request ID: The Request ID of the request this message is
updating.  This <bcp14>MUST</bcp14> match the Request ID of an existing request.  The
receiver <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt> if the sender
specifies an invalid Existing Request ID, or if the parameters included
in the REQUEST_UPDATE are invalid for the type of request being modified.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <section anchor="updating-subscriptions">
          <name>Updating Subscriptions</name>
          <t>When a subscriber decreases the Start Location of the Subscription Filter
(see <xref target="subscription-filters"/>), the Start Location can be smaller than the Track's
Largest Location, similar to a new Subscription. FETCH can be used to retrieve
any necessary Objects smaller than the current Largest Location.</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_OK in response to the
REQUEST_UPDATE 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 subscription
update is unsuccessful, the publisher <bcp14>MUST</bcp14> also terminate the subscription with
PUBLISH_DONE with error code <tt>UPDATE_FAILED</tt>.</t>
        </section>
      </section>
      <section anchor="message-unsubscribe">
        <name>UNSUBSCRIBE</name>
        <t>A Subscriber issues an <tt>UNSUBSCRIBE</tt> message to a Publisher indicating it is no
longer interested in receiving the specified Track, indicating that the
Publisher stop sending Objects as soon as possible.</t>
        <t>The format of <tt>UNSUBSCRIBE</tt> is as follows:</t>
        <figure anchor="moq-transport-unsubscribe-format">
          <name>MOQT UNSUBSCRIBE Message</name>
          <artwork><![CDATA[
UNSUBSCRIBE Message {
  Type (i) = 0xA,
  Length (16),
  Request ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the subscription that is being terminated. See
<xref target="message-subscribe-req"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-publish">
        <name>PUBLISH</name>
        <t>The publisher sends the PUBLISH control message to initiate a subscription to 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 (i) = 0x1D,
  Length (16),
  Request ID (i),
  Track Namespace (..),
  Track Name Length (i),
  Track Name (..),
  Track Alias (i),
  Number of Parameters (i),
  Parameters (..) ...,
  Track Extensions (..),
}
]]></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-name"/>)</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"/>). The same Track Alias <bcp14>MUST NOT</bcp14> be used to refer to two
different Tracks simultaneously. If a subscriber receives a PUBLISH 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>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Extensions : A sequence of Extension Headers. See <xref target="extension-headers"/>.</t>
          </li>
        </ul>
        <t>A subscriber receiving a PUBLISH for a Track it does not wish to receive <bcp14>SHOULD</bcp14>
send REQUEST_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 sends the FORWARD parameter (<xref target="forward-parameter"/>) equal to 0
indicates that it will not transmit any objects until the subscriber sets the
Forward State to 1. If the FORWARD parameter is omitted or equal to 1, the
publisher will start transmitting objects immediately, possibly before
PUBLISH_OK.</t>
      </section>
      <section anchor="message-publish-ok">
        <name>PUBLISH_OK</name>
        <t>The subscriber sends a PUBLISH_OK control message to acknowledge the successful
authorization and acceptance of a PUBLISH message, and establish a subscription.</t>
        <figure anchor="moq-transport-publish-ok">
          <name>MOQT PUBLISH_OK Message</name>
          <artwork><![CDATA[
PUBLISH_OK Message {
  Type (i) = 0x1E,
  Length (16),
  Request ID (i),
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the PUBLISH this message is replying to
<xref target="message-publish"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <t>TODO: A similar section to SUBSCRIBE about how the publisher handles a
filter that is entirely behind Largest Object or is otherwise invalid.</t>
      </section>
      <section anchor="message-publish-done">
        <name>PUBLISH_DONE</name>
        <t>A publisher sends a <tt>PUBLISH_DONE</tt> message 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 the control
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 timeout.</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 delivery timeout by resetting streams on which
it has already sent FIN, only deleting it when all such streams have received
ACK of the FIN.</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 its
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 sent UNSUBSCRIBE 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>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 (i) = 0xB,
  Length (16),
  Request ID (i),
  Status Code (i),
  Stream Count (i),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the subscription that is being terminated. See
<xref target="message-subscribe-req"/>.</t>
          </li>
          <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.  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 track had only Objects with
Forwarding Preference = Datagram, 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^62 - 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 application <bcp14>SHOULD</bcp14> use a relevant status code in 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>SUBSCRIPTION_ENDED (0x3):</dt>
          <dd>
            <t>The publisher reached the end of an associated subscription filter.</t>
          </dd>
          <dt>GOING_AWAY (0x4):</dt>
          <dd>
            <t>The subscriber or publisher issued a GOAWAY message.</t>
          </dd>
          <dt>EXPIRED (0x5):</dt>
          <dd>
            <t>The publisher reached the timeout specified in SUBSCRIBE_OK.</t>
          </dd>
          <dt>TOO_FAR_BEHIND (0x6):</dt>
          <dd>
            <t>The publisher's queue of objects to be sent to the given subscriber exceeds
its implementation defined limit.</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>
        </dl>
      </section>
      <section anchor="message-fetch">
        <name>FETCH</name>
        <t>A subscriber issues a FETCH to a publisher to request a range of already
published objects within a track.</t>
        <t>There are three types of Fetch messages.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Fetch Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x1</td>
              <td align="left">Standalone Fetch</td>
            </tr>
            <tr>
              <td align="left">0x2</td>
              <td align="left">Relative Joining Fetch</td>
            </tr>
            <tr>
              <td align="left">0x3</td>
              <td align="left">Absolute Joining Fetch</td>
            </tr>
          </tbody>
        </table>
        <t>An endpoint that receives a Fetch Type other than 0x1, 0x2 or 0x3 <bcp14>MUST</bcp14> close
the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <section anchor="standalone-fetch">
          <name>Standalone Fetch</name>
          <t>A Fetch of Objects performed independently of any Subscribe.</t>
          <t>A Standalone Fetch includes this structure:</t>
          <artwork><![CDATA[
Standalone Fetch {
  Track Namespace (..),
  Track Name Length (i),
  Track Name (..),
  Start Location (Location),
  End Location (Location)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
            </li>
            <li>
              <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
            </li>
            <li>
              <t>Start Location: The start Location.</t>
            </li>
            <li>
              <t>End Location: The end Location, plus 1. A Location.Object value of 0
means the entire group is requested.</t>
            </li>
          </ul>
        </section>
        <section anchor="joining-fetches">
          <name>Joining Fetches</name>
          <t>A Joining Fetch is associated with a Subscribe request by
specifying the Request ID of a subscription in the <tt>Established</tt> or
<tt>Pending (subscriber)</tt> state.
A publisher receiving a Joining Fetch uses properties of the associated
Subscribe to determine the Track Namespace, Track Name
and End Location such that it is contiguous with the associated
Subscribe.  The subscriber can set the Start Location to an absolute Location or
a Location relative to the current group.</t>
          <t>A Subscriber can use a Joining Fetch to, for example, fill a playback buffer with a
certain number of groups prior to the live edge of a track.</t>
          <t>A Joining Fetch is only permitted when the associated Subscribe has the Filter
Type Largest Object; any other value results in closing the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>If no Objects have been published for the track, and the SUBSCRIBE_OK did not
include a LARGEST_OBJECT parameter (<xref target="largest-param"/>), the publisher <bcp14>MUST</bcp14>
respond with a REQUEST_ERROR with error code <tt>INVALID_RANGE</tt>.</t>
          <t>A Joining Fetch includes this structure:</t>
          <artwork><![CDATA[
Joining Fetch {
  Joining Request ID (i),
  Joining Start (i)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Joining Request ID: The Request ID of the subscription to be joined. If a
publisher receives a Joining Fetch with a Request ID that does not correspond
to a subscription in the same session in the <tt>Established</tt> or <tt>Pending
(subscriber)</tt> states, it <bcp14>MUST</bcp14> return a REQUEST_ERROR with error code
<tt>INVALID_JOINING_REQUEST_ID</tt>.</t>
            </li>
            <li>
              <t>Joining Start : A relative or absolute value used to determing the Start
Location, described below.</t>
            </li>
          </ul>
          <section anchor="joining-fetch-range-calculation">
            <name>Joining Fetch Range Calculation</name>
            <t>The Largest Location value from the corresponding
subscription is used to calculate the end of a Joining Fetch, so the
Objects retrieved by the FETCH and SUBSCRIBE are contiguous and non-overlapping.</t>
            <t>The publisher receiving a Joining Fetch sets the End Location to {Subscribe
Largest Location.Object + 1}. Here Subscribe Largest Location is the
saved value from when the subscription started (see <xref target="subscriptions"/>).</t>
            <t>Note: the last Object included in the Joining FETCH response is Subscribe
Largest Location.  The <tt>+ 1</tt> above indicates the equivalent Standalone Fetch
encoding.</t>
            <t>For a Relative Joining Fetch, the publisher sets the Start Location to
{Subscribe Largest Location.Group - Joining Start, 0}.</t>
            <t>For an Absolute Joining Fetch, the publisher sets the Start Location to
{Joining Start, 0}.</t>
          </section>
        </section>
        <section anchor="fetch-handling">
          <name>Fetch Handling</name>
          <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 (i) = 0x16,
  Length (16),
  Request ID (i),
  Fetch Type (i),
  [Standalone (Standalone Fetch),]
  [Joining (Joining Fetch),]
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Request ID: See <xref target="request-id"/>.</t>
            </li>
            <li>
              <t>Fetch Type: Identifies the type of Fetch, whether Standalone, Relative
Joining or Absolute Joining.</t>
            </li>
            <li>
              <t>Standalone: Standalone Fetch structure included when Fetch Type is 0x1</t>
            </li>
            <li>
              <t>Joining: Joining Fetch structure included when Fetch Type is 0x2 or 0x3.</t>
            </li>
            <li>
              <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
            </li>
          </ul>
          <t>A publisher responds to a FETCH request with either a FETCH_OK or a REQUEST_ERROR
message.  The publisher creates a new unidirectional stream that is used to send the
Objects.  The FETCH_OK or REQUEST_ERROR can come at any time relative to object
delivery.</t>
          <t>The publisher responding to a FETCH is
responsible for delivering all available Objects in the requested range in the
requested order (see <xref target="group-order"/>). The Objects in the response are delivered on a single
unidirectional stream. Any gaps in the Group and Object IDs in the response
stream indicate objects that do not exist.  For Ascending Group Order this
includes ranges between the first requested object and the first object in the
stream; between objects in the stream; and between the last object in the
stream and the Largest Group/Object indicated in FETCH_OK, so long as the fetch
stream is terminated by a FIN.  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 relay that has cached objects from the beginning of the range <bcp14>MAY</bcp14> start
sending objects immediately in response to a FETCH.  If it encounters an object
in the requested range that is not cached and has unknown status, the relay <bcp14>MUST</bcp14>
pause subsequent delivery until it has confirmed the object's status upstream.
If the upstream FETCH fails, the relay sends a REQUEST_ERROR and can reset the
unidirectional stream.  It can choose to do so immediately or wait until the
cached objects have been delivered before resetting the stream.</t>
          <t>The Object Forwarding Preference does not apply to fetches.</t>
          <t>Fetch specifies an inclusive range of Objects starting at Start Location and
ending at End Location. End Location <bcp14>MUST</bcp14> specify the same or a larger Location
than Start Location for Standalone and Absolute Joining Fetches.</t>
          <t>Objects that are not yet published will not be retrieved by a FETCH.  The
Largest available Object in the requested range is indicated in the FETCH_OK,
and is the last Object a fetch will return if the End Location have not yet been
published.</t>
          <t>If Start Location is greater than the <tt>Largest Object</tt>
(<xref target="message-subscribe-req"/>) the publisher <bcp14>MUST</bcp14> return REQUEST_ERROR with error
code <tt>INVALID_RANGE</tt>.</t>
          <t>A publisher <bcp14>MUST</bcp14> send fetched groups in the requested group order, either
ascending or descending. Within each group, objects are sent in Object ID order;
subgroup ID is not used for ordering.</t>
          <t>If a Publisher receives a FETCH with a range that includes one or more Objects with
unknown status (e.g. a Relay has temporarily lost contact with the Original
Publisher and does not have the Object in cache), it can choose to reset the
FETCH data stream with UNKNOWN_OBJECT_STATUS, or indicate the range of unknown
Objects and continue serving other known Objects.</t>
        </section>
      </section>
      <section anchor="message-fetch-ok">
        <name>FETCH_OK</name>
        <t>A publisher sends a FETCH_OK control message in response to successful fetches.
A 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 End Location is known.</t>
        <figure anchor="moq-transport-fetch-ok">
          <name>MOQT FETCH_OK Message</name>
          <artwork><![CDATA[
FETCH_OK Message {
  Type (i) = 0x18,
  Length (16),
  Request ID (i),
  End Of Track (8),
  End Location (Location),
  Number of Parameters (i),
  Parameters (..) ...
  Track Extensions (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the FETCH this message is replying to
<xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>End Of Track: 1 if all Objects have been published on this Track, and
the End Location is the final Object in the Track, 0 if not.</t>
          </li>
          <li>
            <t>End Location: The largest object covered by the FETCH response.
The End Location is determined as follows:
            </t>
            <ul spacing="normal">
              <li>
                <t>If the requested FETCH End Location was beyond the Largest known (possibly
final) Object, End Location is {Largest.Group, Largest.Object + 1}</t>
              </li>
              <li>
                <t>If End Location.Object in the FETCH request was 0 and the response covers
the last Object in the Group, End Location is {Fetch.End Location.Group, 0}</t>
              </li>
              <li>
                <t>Otherwise, End Location is Fetch.End Location
Where Fetch.End Location is either Fetch.Standalone.End Location or the computed
End Location described in <xref target="joining-fetch-range-calculation"/>.</t>
              </li>
            </ul>
            <t>
If the relay is subscribed to the track, it uses its knowledge of the largest
{Group, Object} to set End Location.  If it is not subscribed and the
requested End Location exceeds its cached data, the relay makes an upstream
request to complete the FETCH, and uses the upstream response to set End
Location.  </t>
            <t>
If End Location is smaller than the Start Location in the corresponding FETCH
the receiver <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Extensions : A sequence of Extension Headers. See <xref target="extension-headers"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-fetch-cancel">
        <name>FETCH_CANCEL</name>
        <t>A subscriber sends a FETCH_CANCEL message to a publisher to indicate it is no
longer interested in receiving objects for the fetch identified by the 'Request
ID'. The publisher <bcp14>SHOULD</bcp14> promptly close the unidirectional stream, even if it
is in the middle of delivering an object.</t>
        <t>The format of <tt>FETCH_CANCEL</tt> is as follows:</t>
        <figure anchor="moq-transport-fetch-cancel">
          <name>MOQT FETCH_CANCEL Message</name>
          <artwork><![CDATA[
FETCH_CANCEL Message {
  Type (i) = 0x17,
  Length (16),
  Request ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the FETCH (<xref target="message-fetch"/>) this message is
cancelling.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status">
        <name>TRACK_STATUS</name>
        <t>A potential subscriber sends a <tt>TRACK_STATUS</tt> message on the control
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.</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
REQUEST_OK message with the same parameters it would have set in a SUBSCRIBE_OK.
Track Alias is not used.  A publisher responds to a failed TRACK_STATUS with an
appropriate REQUEST_ERROR message.</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 or UNSUBSCRIBE.</t>
      </section>
      <section anchor="message-pub-ns">
        <name>PUBLISH_NAMESPACE</name>
        <t>The publisher sends the PUBLISH_NAMESPACE control message to advertise that it
has tracks available within a Track Namespace. The receiver verifies the
publisher is authorized to publish tracks under this namespace.</t>
        <figure anchor="moq-transport-pub-ns-format">
          <name>MOQT PUBLISH_NAMESPACE Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE Message {
  Type (i) = 0x6,
  Length (16),
  Request ID (i),
  Track Namespace (..),
  Number of Parameters (i),
  Parameters (..) ...
}
]]></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-name"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</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>
        <figure anchor="moq-transport-ns-format">
          <name>MOQT NAMESPACE Message</name>
          <artwork><![CDATA[
NAMESPACE Message {
  Type (i) = 0x8,
  Length (16),
  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-name"/> after removing namespace tuples included in
'Track Namespace Prefix' {message-subscribe-ns}.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-pub-ns-done">
        <name>PUBLISH_NAMESPACE_DONE</name>
        <t>The publisher sends the <tt>PUBLISH_NAMESPACE_DONE</tt> control message to indicate its
intent to stop serving new subscriptions for tracks within the provided Track
Namespace.</t>
        <figure anchor="moq-transport-pub-ns-done-format">
          <name>MOQT PUBLISH_NAMESPACE_DONE Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE_DONE Message {
  Type (i) = 0x9,
  Length (16),
  Request ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the PUBLISH_NAMESPACE that is being terminated. See
<xref target="message-subscribe-req"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-namespace-done">
        <name>NAMESPACE_DONE</name>
        <t>The publisher sends the <tt>NAMESPACE_DONE</tt> control message to indicate its
intent to stop serving new subscriptions for tracks within the provided Track
Namespace. 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 (i) = 0xE,
  Length (16),
  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-name"/>. The namespace begins with the
'Track Namespace Prefix' specified in {message-subscribe-ns}.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-pub-ns-cancel">
        <name>PUBLISH_NAMESPACE_CANCEL</name>
        <t>The subscriber sends an <tt>PUBLISH_NAMESPACE_CANCEL</tt> control message to
indicate it will stop sending new subscriptions for tracks
within the provided Track Namespace.</t>
        <figure anchor="moq-transport-pub-ns-cancel-format">
          <name>MOQT PUBLISH_NAMESPACE_CANCEL Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE_CANCEL Message {
  Type (i) = 0xC,
  Length (16),
  Request ID (i),
  Error Code (i),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the PUBLISH_NAMESPACE that is being terminated. See
<xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for canceling the publish.
PUBLISH_NAMESPACE_CANCEL uses the same error codes as REQUEST_ERROR
(<xref target="message-request-error"/>) that responds to PUBLISH_NAMESPACE.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for publish cancelation. See
<xref target="reason-phrase"/>.</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 and/or <tt>Established</tt> subscriptions, 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 (i) = 0x11,
  Length (16),
  Request ID (i),
  Track Namespace Prefix (..),
  Subscribe Options (i),
  Number of Parameters (i),
  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-name"/> with between 0 and 32 Track Namespace Fields.  This prefix is
matched against track namespaces known to the publisher.  For example, if the
publisher is a relay that has received PUBLISH_NAMESPACE messages for
namespaces ("example.com", "meeting=123", "participant=100") and
("example.com", "meeting=123", "participant=200"), a SUBSCRIBE_NAMESPACE for
("example.com", "meeting=123") would match both.  If an endpoint receives a
Track Namespace Prefix consisting of greater than than 32 Track Namespace
Fields, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Subscribe Options: Allows subscribers to request PUBLISH (0x00),
NAMESPACE (0x01), or both (0x02) for a given SUBSCRIBE_NAMESPACE request.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <t>The publisher will respond with REQUEST_OK or REQUEST_ERROR on the response half
of the stream.  If the SUBSCRIBE_NAMESPACE is successful, the publisher will
send matching NAMESPACE messages on the response stream if they are requested.
If it is an error, the stream will be immediately closed via FIN.
Also, any matching PUBLISH messages without an <tt>Established</tt> Subscription will be
sent on the control stream. When there are changes to the namespaces or
subscriptions being published and the subscriber is subscribed to them,
the publisher sends the corresponding NAMESPACE, NAMESPACE_DONE,
or PUBLISH messages.</t>
        <t>A subscriber cannot make overlapping namespace subscriptions on a single
session. Within a session, if a publisher receives a SUBSCRIBE_NAMESPACE with a
Track Namespace Prefix that shares a common prefix with an established namespace
subscription, it <bcp14>MUST</bcp14> respond with REQUEST_ERROR with error code
<tt>PREFIX_OVERLAP</tt>.</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</t>
        <t>SUBSCRIBE_NAMESPACE is not required for a publisher to send PUBLISH_NAMESPACE,
PUBLISH_NAMESPACE_DONE or PUBLISH messages to a subscriber.  It is useful in
applications or relays where subscribers are only interested in or authorized to
access a subset of available namespaces and tracks.</t>
        <t>If the FORWARD parameter (<xref target="forward-parameter"/>) is present in this message and
equal to 0, PUBLISH messages resulting from this SUBSCRIBE_NAMESPACE will set
the FORWARD parameter to 0. If the FORWARD parameter is equal to 1 or omitted
from this message, PUBLISH messages resulting from this SUBSCRIBE_NAMESPACE will
set the FORWARD parameter to 1, or indicate that value by omitting the parameter
(see <xref target="subscriptions"/>).</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 a 'PROTOCOL_VIOLATION'.</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>All unidirectional MOQT streams start with a variable-length integer indicating
the type of the stream in question.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x10-0x1D</td>
            <td align="left">SUBGROUP_HEADER  (<xref target="subgroup-header"/>)</td>
          </tr>
          <tr>
            <td align="right">0x05</td>
            <td align="left">FETCH_HEADER  (<xref target="fetch-header"/>)</td>
          </tr>
        </tbody>
      </table>
      <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 stream or datagram type <bcp14>MUST</bcp14> close the
session.</t>
      <t>Every Object has a 'Object Forwarding Preference' and the Original Publisher
<bcp14>MAY</bcp14> use both Subgroups and Datagrams within a Group or Track.</t>
      <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>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>
      <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-properties">
          <name>Canonical Object Properties</name>
          <t>A canonical MoQ Object has the following information:</t>
          <ul spacing="normal">
            <li>
              <t>Track Namespace and Track Name: The track this object belongs to.</t>
            </li>
            <li>
              <t>Group ID: The identifier of the Object's Group (see <xref target="model-group"/>) within
the Track.</t>
            </li>
            <li>
              <t>Object ID: The order of the object within the group.</t>
            </li>
            <li>
              <t>Publisher Priority: An 8 bit integer indicating the publisher's priority for
the Object (<xref target="priorities"/>).</t>
            </li>
            <li>
              <t>Object Forwarding Preference: An enumeration indicating how a publisher sends
an object. The preferences are Subgroup and Datagram.  <tt>Object Forwarding
Preference</tt> is a property of an individual Object and can vary among
Objects in the same Track.  In a subscription, an Object <bcp14>MUST</bcp14> be sent
according to its <tt>Object Forwarding Preference</tt>.</t>
            </li>
            <li>
              <t>Subgroup ID: The identifier of the Object's Subgroup (see <xref target="model-subgroup"/>)
within the Group. This field is omitted if the <tt>Object Forwarding Preference</tt>
is Datagram.</t>
            </li>
            <li>
              <t>Object Status: An enumeration used to indicate whether the Object is a normal Object
or mark the end of a group or track. See <xref target="object-status"/> below.</t>
            </li>
            <li>
              <t>Object Extensions : A sequence of Extensions associated with the object. See
<xref target="object-extensions"/>.</t>
            </li>
            <li>
              <t>Object Payload: An opaque payload intended for an End Subscriber and <bcp14>SHOULD
NOT</bcp14> be processed by a relay. Only present when 'Object Status' is Normal (0x0).</t>
            </li>
          </ul>
          <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 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>Any other value <bcp14>SHOULD</bcp14> be treated as a protocol error and the session <bcp14>SHOULD</bcp14>
be closed with a <tt>PROTOCOL_VIOLATION</tt> (<xref target="session-termination"/>).
Any object with a status code other than zero <bcp14>MUST</bcp14> have an empty payload.</t>
          </section>
          <section anchor="object-extensions">
            <name>Object Extension Headers</name>
            <t>Any Object with status Normal can have extension headers (<xref target="extension-headers"/>).
If an endpoint receives extension headers on Objects with status that is
not Normal, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>Object Extension Headers 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 extension header.</t>
            <t>Object Extension Headers are serialized as a length in bytes followed by
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).</t>
            <artwork><![CDATA[
Extensions {
  Extension Headers Length (i),
  Extension Headers (..),
}
]]></artwork>
            <t>Object Extension Header types are registered in the IANA table
'MOQ Extension Headers'. See <xref target="iana"/>.</t>
          </section>
        </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.  If an endpoint
receives a datagram with an unknown Track Alias, it <bcp14>MAY</bcp14> drop the datagram or
choose to buffer it for a brief period to handle reordering with the control
message that establishes the Track Alias.</t>
        <t>An Object received in an <tt>OBJECT_DATAGRAM</tt> message has an <tt>Object Forwarding
Preference</tt> = <tt>Datagram</tt>.</t>
        <t>To send an Object with <tt>Object Forwarding Preference</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 Extension
Headers (<xref target="object-extensions"/>) 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 (i) = 0x00..0x0F / 0x20..0x21 / 0x24..0x25 /
             0x28..0x29 / 0x2C..0x2D,
  Track Alias (i),
  Group ID (i),
  [Object ID (i),]
  [Publisher Priority (8),]
  [Extensions (..),]
  [Object Status (i),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Type field in the OBJECT_DATAGRAM takes the form 0b00X0XXXX (or the set of
values from 0x00 to 0x0F, 0x20 to 0x2F). However, not all Type values in this
range are valid. The four low-order bits and bit 5 of the Type field determine
which fields are present in the datagram:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>EXTENSIONS</strong> bit (0x01) indicates when the Extensions field is
present. When set to 1, the Extensions structure defined in
<xref target="object-extensions"/> is present. When set to 0, the Extensions field is
absent.  If an endpoint receives a datagram with the EXTENSIONS bit set and an
Extension Headers Length of 0, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</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
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>When set to 0, the Object ID field is present.</t>
                </li>
              </ol>
            </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 fields contains the payload.</t>
            </li>
          </ul>
          <t>The following Type values are invalid. If an endpoint receives a datagram with
any of these Type values, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>Type values with both the STATUS bit (0x20) and END_OF_GROUP bit (0x02) set: 0x22,
0x23, 0x26, 0x27, 0x2A, 0x2B, 0x2E, 0x2F. An object status message cannot signal
end of group.</t>
            </li>
            <li>
              <t>Type values that do not match the form 0b00X0XXXX (i.e., Type values outside the
ranges 0x00..0x0F and 0x20..0x2F).</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="streams">
        <name>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 session <bcp14>SHOULD</bcp14> be closed with a
<tt>PROTOCOL_VIOLATION</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="stream-cancellation">
          <name>Stream Cancellation</name>
          <t>Streams aside from the control stream <bcp14>MAY</bcp14> be canceled due to congestion
or other reasons by either the publisher or subscriber. Early termination of a
stream does not affect the MoQ application state, and therefore has no
effect on outstanding subscriptions.</t>
        </section>
        <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 'Group ID' and <tt>Subgroup
ID</tt> indicated by the SUBGROUP_HEADER.</t>
          <t>If an endpoint receives a subgroup with an unknown Track Alias, it <bcp14>MAY</bcp14> abandon
the stream, or choose to buffer it for a brief period to handle reordering with
the control message that establishes the Track Alias.  The endpoint <bcp14>MAY</bcp14> withhold
stream flow control beyond the SUBGROUP_HEADER until the Track Alias has been
established.  To prevent deadlocks, the publisher <bcp14>MUST</bcp14> allocate connection flow
control to the control stream before allocating it 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>
          <figure anchor="object-header-format">
            <name>MOQT SUBGROUP_HEADER</name>
            <artwork><![CDATA[
SUBGROUP_HEADER {
  Type (i) = 0x10..0x15 / 0x18..0x1D / 0x30..0x35 / 0x38..0x3D,
  Track Alias (i),
  Group ID (i),
  [Subgroup ID (i),]
  [Publisher Priority (8),]
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>SUBGROUP_HEADER</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>.</t>
          <t>The Type field in the SUBGROUP_HEADER takes the form 0b00X1XXXX (or the set of
values from 0x10 to 0x1F, 0x30 to 0x3F), where bit 4 is always set to
1. However, not all Type values in this range are valid. The four low-order bits
and bit 5 determine which fields are present in the header:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>EXTENSIONS</strong> bit (0x01) indicates when the Extensions field is present
in all Objects in this Subgroup. When set to 1, the Extensions structure
defined in <xref target="object-extensions"/> is present in all Objects. When set to 0, the
Extensions field is never present. Objects with no extensions set Extension
Headers Length to 0.</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 terminated with a RESET_STREAM or RESET_STREAM_AT.</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>
          </ul>
          <t>The following Type values are invalid. If an endpoint receives a stream header
with any of these Type values, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>Type values with SUBGROUP_ID_MODE set to 0b11: 0x16, 0x17, 0x1E, 0x1F, 0x36, 0x37,
0x3E, 0x3F. This mode is reserved for future use.</t>
            </li>
            <li>
              <t>Type values that do not match the form 0b00X1XXXX (i.e., Type values outside the
ranges 0x10..0x1F and 0x30..0x3F, or values where bit 4 is not set).</t>
            </li>
          </ul>
          <t>To send an Object with <tt>Object Forwarding Preference</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. 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 an Prior Object ID Gap extesnion header (see
<xref target="prior-object-id-gap"/>).</t>
          <figure anchor="object-subgroup-format">
            <name>MOQT Subgroup Object Fields</name>
            <artwork><![CDATA[
{
  Object ID Delta (i),
  [Extensions (..),]
  Object Payload Length (i),
  [Object Status (i),]
  [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> use a RESET_STREAM or RESET_STREAM_AT
<xref target="I-D.draft-ietf-quic-reliable-stream-reset"/> frame. This includes, but is
not limited to:</t>
          <ul spacing="normal">
            <li>
              <t>An Object in an open Subgroup exceeding its Delivery Timeout</t>
            </li>
            <li>
              <t>Early termination of subscription due to an UNSUBSCRIBE message</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 due to the subcriber's Forward State</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 RESET_STREAM it receives.</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.</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.</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>
use RESET_STREAM or RESET_STREAM_AT. 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 EndOfGroup or EndOfTrack 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 EndOfGroup message 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. This might be complex to
implement.</t>
          <t>Processing a RESET_STREAM or RESET_STREAM_AT 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
RESET_STREAM or RESET_STREAM_AT. 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>RESET_STREAM 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.</t>
          <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in RESET_STREAM or
RESET_STREAM_AT, as defined below:</t>
          <dl>
            <dt>INTERNAL_ERROR (0x0):</dt>
            <dd>
              <t>An implementation specific error.</t>
            </dd>
            <dt>CANCELLED (0x1):</dt>
            <dd>
              <t>The subscriber requested cancellation via UNSUBSCRIBE, FETCH_CANCEL or
STOP_SENDING, or the publisher ended the subscription, in which case
PUBLISH_DONE (<xref target="message-publish-done"/>) will have a more detailed status
code.</t>
            </dd>
            <dt>DELIVERY_TIMEOUT (0x2):</dt>
            <dd>
              <t>The DELIVERY TIMEOUT <xref target="delivery-timeout"/> was exceeded for this stream.</t>
            </dd>
            <dt>SESSION_CLOSED (0x3):</dt>
            <dd>
              <t>The publisher session is being closed.</t>
            </dd>
            <dt>UNKNOWN_OBJECT_STATUS (0x4):</dt>
            <dd>
              <t>In response to a FETCH, the publisher is unable to determine the Status
of the next Object in the requested range.</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 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 Fetch message identified by <tt>Request ID</tt>.</t>
          <figure anchor="fetch-header-format">
            <name>MOQT FETCH_HEADER</name>
            <artwork><![CDATA[
FETCH_HEADER {
  Type (i) = 0x5,
  Request ID (i),
}
]]></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 (i),
  [Group ID (i),]
  [Subgroup ID (i),]
  [Object ID (i),]
  [Publisher Priority (8),]
  [Extensions (..),]
  Object Payload Length (i),
  [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
below.  The following additional values are defined:</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>
            </tbody>
          </table>
          <t>Any other value is a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <section anchor="flags">
            <name>Flags</name>
            <t>The two least significant bits (LSBs) of the Serialization Flags form a two-bit
field that defines the encoding of the Subgroup.  To extract this value, the
Subscriber performs a bitwise AND operation with the mask 0x03.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Bitmask Result (Serialization Flags &amp; 0x03)</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>The following table defines additional flags within the Serialization Flags
field. Each flag is an independent boolean value, where 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 field 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 field 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">Extensions field is present</td>
                  <td align="left">Extensions 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">Use the subgroup ID in the two least significant bits</td>
                </tr>
              </tbody>
            </table>
            <t>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 a
<tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>The Extensions structure is defined in <xref target="object-extensions"/>.</t>
            <t>When encoding an Object with a Forwarding Preference 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 anchor="end-of-range">
            <name>End of Range</name>
            <t>When Serialization Flags indicates an End of Range (e.g. values 0x8C or 0x10C),
the Group ID and Object ID fields are present.  Subgroup ID, Priority and
Extensions are not present. All Objects with Locations between the last
serialized Object, if any, and this Location, inclusive, either do not exist
(when Serialization Flags is 0x8C) or are unknown (0x10C).  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 status.</t>
          </section>
        </section>
      </section>
      <section anchor="examples">
        <name>Examples</name>
        <t>Sending a subgroup on one stream:</t>
        <artwork><![CDATA[
Stream = 2

SUBGROUP_HEADER {
  Type = 0x14
  Track Alias = 2
  Group ID = 0
  Subgroup ID = 0
  Priority = 0
}
{
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID = 1
  Object Payload Length = 4
  Payload = "efgh"
}
]]></artwork>
        <t>Sending a group on one stream, with the first object containing two
Extension Headers.</t>
        <artwork><![CDATA[
Stream = 2

SUBGROUP_HEADER {
  Type = 0x35
  Track Alias = 2
  Group ID = 0
  Subgroup ID = 0
}
{
  Object ID Delta = 0 (Object ID is 0)
  Extension Headers Length = 33
    { Type = 4
      Value = 2186796243
    },
    { Type = 77
      Length = 21
      Value = "traceID:123456"
    }
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID Delta = 0 (Object ID is 1)
  Extension Headers Length = 0
  Object Payload Length = 4
  Payload = "efgh"
}

]]></artwork>
      </section>
    </section>
    <section anchor="moqt-extension-headers">
      <name>Extension Headers</name>
      <t>The following Extension Headers are defined in MOQT. Each Extension Header
specifies whether it can be used with Tracks, Objects, or both.</t>
      <section anchor="delivery-timeout-ext">
        <name>DELIVERY TIMEOUT</name>
        <t>The DELIVERY TIMEOUT extension (Extension Header Type 0x02) is a Track
Extension.  It expresses the publisher's DELIVERY_TIMEOUT for a Track (see
<xref target="delivery-timeout"/>).</t>
        <t>DELIVERY_TIMEOUT, if present, <bcp14>MUST</bcp14> contain a value greater than 0.  If an
endpoint receives a DELIVERY_TIMEOUT equal to 0 it <bcp14>MUST</bcp14> close the session with
<tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>If unspecified, the subscriber's DELIVERY_TIMEOUT is used. If neither endpoint
specified a timeout, Objects do not time out.</t>
        <section anchor="max-cache-duration">
          <name>MAX CACHE DURATION</name>
          <t>The MAX_CACHE_DURATION extension (Extension Header Type 0x04) is a Track Extension.</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. Once
Objects have expired from cache, their state becomes unknown, and a relay that
handles a downstream request that includes those Objects re-requests them.</t>
          <t>If the MAX_CACHE_DURATION extension is not sent by the publisher, the Objects
can be cached until implementation constraints cause them to be evicted.</t>
          <section anchor="publisher-priority">
            <name>DEFAULT PUBLISHER PRIORITY</name>
            <t>The DEFAULT PUBLISHER PRIORITY extension (Extension Header Type 0x0E) is a Track
Extension 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"/>. Priorities above 255 are invalid. Subgroups and Datagrams for this
subscription inherit this priority, unless they specifically override it.</t>
            <t>A subscription has Publisher Priorty 128 if this extension is omitted.</t>
          </section>
          <section anchor="group-order-pref">
            <name>DEFAULT PUBLISHER GROUP ORDER</name>
            <t>The DEFAULT_PUBLISHER_GROUP_ORDER extension (Extension Header Type 0x22) is a
Track Extension.</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>PROTOCOL_VIOLATION</tt>.</t>
            <t>If omitted, the publisher's preference is Ascending (0x1).</t>
          </section>
          <section anchor="dynamic-groups">
            <name>DYNAMIC GROUPS</name>
            <t>The DYNAMIC_GROUPS Extension (Extension Header Type 0x30) is a Track Extension.
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 PUBLISH_OK or REQUEST_UPDATE
for this Track. If an endpoint receives a value larger than 1, it <bcp14>MUST</bcp14> close
the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>If omitted, the value is 0.</t>
          </section>
        </section>
      </section>
      <section anchor="immutable-extensions">
        <name>Immutable Extensions</name>
        <t>The Immutable Extensions (Extension Header Type 0xB) contains a sequence of
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>) which are also Track or Object
Extension Headers.</t>
        <artwork><![CDATA[
Immutable Extensions {
  Type (0xB),
  Length (i),
  Key-Value-Pair (..) ...
}
]]></artwork>
        <t>This extension can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
Relays. This extension <bcp14>MUST NOT</bcp14> be modified or removed. Relays <bcp14>MUST</bcp14> cache this
extension if the Object is cached and <bcp14>MUST</bcp14> forward this extension if the
enclosing Object is forwarded. Relays <bcp14>MAY</bcp14> decode and view these extensions.</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 Extensions header that contains another
Immutable Extensions 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 extensions 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 Extensions |
| Fields |       | Extensions |       | [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 extension header.</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 (Extension Header 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>This extension is optional, as publishers might not know the prior gap gize, 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 extension can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This extension <bcp14>MAY</bcp14> be removed by relay when the object in question is
served via FETCH, and the gap that the extension 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 extension header.</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 (Extension Header 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>This extension is optional, as publishers might not know the prior gap gize, or
there may 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 extension can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This extension <bcp14>MAY</bcp14> be removed by relay when the object in question is
served via FETCH, and the gap that the extension 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 extension header.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>TODO: Expand this section, including subscriptions.</t>
      <t>TODO: Describe Cache Poisoning attacks</t>
      <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>
      </section>
      <section anchor="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>
      </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 or SUBSCRIBE_NAMESPACE requests that could bloat data
structures. It could use the advertised MAX_REQUEST_ID to limit the number of
such requests, or could have application-specific policies that can reject
incoming PUBLISH_NAMESPACE or SUBSCRIBE_NAMESPACE requests that cause the state
maintenance for the session to be excessive.</t>
        </section>
        <section anchor="subscribenamespace-with-short-prefixes">
          <name>SUBSCRIBE_NAMESPACE 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 message with a short prefix, it can cause the relay to send
a large volume of PUBLISH_NAMESPACE messages. As churn continues in the tree of
prefixes, the relay would have to continue to send
PUBLISH_NAMESPACE/PUBLISH_NAMESPACE_DONE messages to the entity that had sent
the SUBSCRIBE_NAMESPACE.</t>
          <t>TODO: Security/Privacy Considerations of MOQT_IMPLEMENTATION parameter</t>
        </section>
      </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>Setup parameters</t>
        </li>
        <li>
          <t>Non-setup Parameters - List which params can be repeated in the table.</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
        <li>
          <t>MOQ Extension headers - we wish to reserve extension types 0-63 for
standards utilization where space is a premium, 64 - 16383 for
standards utilization where space is less of a concern, and 16384 and
above for first-come-first-served non-standardization usage.
List which headers can be repeated in the table.</t>
        </li>
        <li>
          <t>MOQT Auth Token Type</t>
        </li>
      </ul>
      <t>TODO: register the URI scheme and the ALPN and grease the Extension types</t>
      <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="authorization-token"/></td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">REGISTER</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">USE_ALIAS</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">USE_VALUE</td>
              <td align="left">
                <xref target="authorization-token"/></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">DELIVERY_TIMEOUT</td>
              <td align="left">
                <xref target="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">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">0x10</td>
              <td align="left">FORWARD</td>
              <td align="left">
                <xref target="forward-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">SUBSCRIPTION_FILTER</td>
              <td align="left">
                <xref target="subscription-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">0x32</td>
              <td align="left">NEW_GROUP_REQUEST</td>
              <td align="left">
                <xref target="new-group-request"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-extension-headers">
        <name>Extension Headers</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">DELIVERY_TIMEOUT</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="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">0x0B</td>
              <td align="left">IMMUTABLE_EXTENSIONS</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="immutable-extensions"/></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>
          </tbody>
        </table>
      </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"/></td>
              </tr>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">PROTOCOL_VIOLATION</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_REQUEST_ID</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_TRACK_ALIAS</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">KEY_VALUE_FORMATTING_ERROR</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">TOO_MANY_REQUESTS</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_PATH</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_PATH</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">GOAWAY_TIMEOUT</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">CONTROL_MESSAGE_TIMEOUT</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DATA_STREAM_TIMEOUT</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">AUTH_TOKEN_CACHE_OVERFLOW</td>
                <td align="center">0x13</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x14</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">VERSION_NEGOTIATION_FAILED</td>
                <td align="center">0x15</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x16</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x17</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x18</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_AUTHORITY</td>
                <td align="center">0x19</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTHORITY</td>
                <td align="center">0x1A</td>
                <td align="left">
                  <xref target="session-termination"/></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="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">DOES_NOT_EXIST</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_RANGE</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_SUBSCRIPTION</td>
                <td align="center">0x19</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">UNINTERESTED</td>
                <td align="center">0x20</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">PREFIX_OVERLAP</td>
                <td align="center">0x30</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_JOINING_REQUEST_ID</td>
                <td align="center">0x32</td>
                <td align="left">
                  <xref target="message-request-error"/></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="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">TRACK_ENDED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">SUBSCRIPTION_ENDED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">UPDATE_FAILED</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-reset-stream">
          <name>Data 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="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">CANCELLED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">DELIVERY_TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">SESSION_CLOSED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_OBJECT_STATUS</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></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>
  </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>Facebook</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="20" month="October" year="2025"/>
            <abstract>
              <t>   WebTransport [OVERVIEW] is a protocol framework that enables
   application clients constrained by the Web security model to
   communicate with a remote application server using a secure
   multiplexed transport.  This document describes a WebTransport
   protocol that is based on HTTP/3 [HTTP3] and provides support for
   unidirectional streams, bidirectional streams, and datagrams, all
   multiplexed within the same HTTP/3 connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-14"/>
        </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="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="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="14" month="June" year="2025"/>
            <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-07"/>
        </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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="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="20" month="October" year="2025"/>
            <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 may be optional.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-11"/>
        </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.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 4157?>

<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-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:
H4sIAAAAAAAAA8S9+3YbR3Y3+n89RR9prc/SBIBF+TK2ZpwEIimZsUQqJGTH
mUzIJtAgOwLRGHRDFCIrz/I9y3mys++1q7tByTOeHK+VjNjoruuuXfv628Ph
MDRlsyieZPdeFrMyz6q3xTr719dH+9lknS/rVbVu7oX88nJdvH2S3VR/GTb6
OMyq6TK/gU9n63zeDMuimQ+TN4Z7X4dZ3sAb7w/Gk8MPYQp/XFXr7ZOsbmYh
lKv1k6xZb+rm8aNH3z56HPJ1kT/Jsns/FZdZvpxlR8umWC+Lxo+l3lzelHVd
VsvJdgVNHx1OnoXbav3mal1tVjaPE53HvfCm2MLvsychG2Y3cZJ/2ZTT8LZY
bgr4Jdv5dZY11M+9n6CPcnmVPcc38flNXi7gOUz5n3Huo2p9hY/z9fQaHl83
zap+8vnn+BY+Kt8WI33tc3zw+eW6uq2Lz+H7z/G7q7K53lxyg8Pbq8+TpcQX
FrB6deObphdH/OGorNJPPt+1LaPr5mZxL4S6gTU+zxfVEqa3LepQ3+Tr5vwv
mwr6eZItq7Aqn2R/aqrpIKvhu3Uxr+Ff2xv+B2z/Tb5awZL8OYR801xXa1zI
IfxflpVLaOFslB1DF/mbDTRMj5lezjbXed3+CZYlX5b/nTews0+y/bKeVvS8
4GWul/z6P0/xl9G0uglpZz+Osh/zulyUxVvX1Y/ltKnW6S9pT8+r6mpR+K7e
4stv3/7zFf3S09XRKDu7LZrG9XOUL92zj/VQwk7gy74L/Hld4UkECoQxt/oc
j7Jn63I5KxYL1+14Af0mz9OuXxZN7jvO5/juP9/A4x2dLqv1DXz8lg4FnoAn
2emz/W8fPXoEf8O5tJMIcx4eEEUPb4tLIq4hEuYXcK6X89hKGA6HWX5ZwxvT
JoTJdVkj6WxuimWTzYp5uSzqrLkusmm1LrLL4jp/W8KOQQvZTo4UHrw8+dfJ
w0GWy4E22s5W6woItlpA03V5tSxmWVNl1apYw+FxTQExBT+bQXZ7XU6vM+i9
yOryBs9sNt8sp7iO+aJstqMM+8zyxQJOLXQMHc02U2ivmgcZRJWtNpeLsr7O
gOvlxMGovbKByS1rmPIsewsvAgurp+tyhW1nl9ssDzebRVOuFuUUOoIGs2I5
W1XlsqlH2VED769wjDVQAvBD6qzB9YK/cA1LWNvycoOtBWCWyAtr6hxXWlcB
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

-->

</rfc>
