<?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.36 (Ruby 3.4.9) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-18" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-18"/>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <author initials="A." surname="Frindell" fullname="Alan Frindell" role="editor">
      <organization>Meta</organization>
      <address>
        <email>afrind@meta.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <abstract>
      <?line 62?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media Over QUIC Transport (MOQT) is a publish/subscribe protocol that runs over
QUIC <xref target="QUIC"/> or WebTransport <xref target="WebTransport"/>. Publishers produce data that is
delivered to subscribers either point-to-point or through intermediate relays.
MOQT leverages transport features such as streams, datagrams, priorities, and
partial reliability to support a wide range of use cases with different
resiliency and latency needs, from live to interactive, without compromising
scalability.</t>
      <t>Despite its name, MOQT is content agnostic. MoQ Streaming Formats define how
specific content types are encoded, packaged, and mapped to MOQT objects, along
with policies for discovery and subscription.</t>
      <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 as
exercising options for flexible loss recovery.</t>
        </section>
        <section anchor="convergence">
          <name>Convergence</name>
          <t>Some live media architectures today have separate protocols for ingest and
distribution, for example RTMP and HTTP based HLS or DASH. Switching protocols
necessitates intermediary origins which re-package the
media content. While specialization can have its benefits, there are efficiency
gains to be had in not having to re-package content. A goal of MOQT is to
develop a single protocol which can be used for transmission from contribution
to distribution. A related goal is the ability to support existing encoding and
packaging schemas, both for backwards compatibility and for interoperability
with the established content preparation ecosystem.</t>
        </section>
        <section anchor="relays">
          <name>Relays</name>
          <t>An integral feature of a protocol being successful is its ability to
deliver media at scale. Greatest scale is achieved when third-party
networks, independent of both the publisher and subscriber, can be
leveraged to relay the content. These relays must cache content for
distribution efficiency while simultaneously routing content and
deterministically responding to congestion in a multi-tenant network. A
goal of MOQT is to treat relays as first-class citizens of the protocol
and ensure that objects are structured such that information necessary
for distribution is available to relays while the media content itself
remains opaque and private.</t>
        </section>
      </section>
      <section anchor="terms-and-definitions">
        <name>Terms and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>The following terms are used with the first letter capitalized.</t>
        <dl>
          <dt>Application:</dt>
          <dd>
            <t>The entity using MOQT to transmit and receive data.</t>
          </dd>
          <dt>Client:</dt>
          <dd>
            <t>The party initiating a Transport Session.</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. It also uses
RESET_STREAM_AT from <xref target="I-D.draft-ietf-quic-reliable-stream-reset"/>.
RESET_STREAM_AT can be used by MOQT, but the protocol is also designed to work
correctly when the extension is not supported.</t>
        <t>When this document says an endpoint "resets" a stream, it means the endpoint
sends a RESET_STREAM or RESET_STREAM_AT frame on that stream (see
<xref target="closing-subgroup-streams"/> for considerations on choosing between them).</t>
      </section>
      <section anchor="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>
        <section anchor="variable-length-integers">
          <name>Variable-Length Integers</name>
          <t>MOQT requires a variable-length integer encoding with the following properties:</t>
          <ol spacing="normal" type="1"><li>
              <t>The encoded length can be determined from the first encoded byte.</t>
            </li>
            <li>
              <t>The range of 1 byte values is as large as possible.</t>
            </li>
            <li>
              <t>All 64 bit numbers can be encoded.</t>
            </li>
          </ol>
          <t>The variable-length integer encoding uses the number of leading 1 bits of the
first byte to indicate the length of the encoding in bytes. The remaining bits
after the first 0 and subsequent bytes, if any, represent the integer value,
encoded in network byte order.</t>
          <t>Integers are encoded in 1 to 9 bytes and can encode up to 64
bit unsigned integers. The following table summarizes the encoding properties.</t>
          <table>
            <name>Summary of Integer Encodings</name>
            <thead>
              <tr>
                <th align="left">Leading Bits</th>
                <th align="left">Length (bytes)</th>
                <th align="left">Usable Bits</th>
                <th align="left">Range</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">1</td>
                <td align="left">7</td>
                <td align="left">0-127</td>
              </tr>
              <tr>
                <td align="left">10</td>
                <td align="left">2</td>
                <td align="left">14</td>
                <td align="left">0-16383</td>
              </tr>
              <tr>
                <td align="left">110</td>
                <td align="left">3</td>
                <td align="left">21</td>
                <td align="left">0-2097151</td>
              </tr>
              <tr>
                <td align="left">1110</td>
                <td align="left">4</td>
                <td align="left">28</td>
                <td align="left">0-268435455</td>
              </tr>
              <tr>
                <td align="left">11110</td>
                <td align="left">5</td>
                <td align="left">35</td>
                <td align="left">0-34359738367</td>
              </tr>
              <tr>
                <td align="left">111110</td>
                <td align="left">6</td>
                <td align="left">42</td>
                <td align="left">0-4398046511103</td>
              </tr>
              <tr>
                <td align="left">1111110</td>
                <td align="left">7</td>
                <td align="left">49</td>
                <td align="left">0-562949953421311</td>
              </tr>
              <tr>
                <td align="left">11111110</td>
                <td align="left">8</td>
                <td align="left">56</td>
                <td align="left">0-72057594037927935</td>
              </tr>
              <tr>
                <td align="left">11111111</td>
                <td align="left">9</td>
                <td align="left">64</td>
                <td align="left">0-18446744073709551615</td>
              </tr>
            </tbody>
          </table>
          <t>The following table contains some example encodings:</t>
          <table>
            <name>Example Integer Encodings</name>
            <thead>
              <tr>
                <th align="left">Byte Sequence</th>
                <th align="left">Decimal Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x25</td>
                <td align="left">37</td>
              </tr>
              <tr>
                <td align="left">0x8025</td>
                <td align="left">37</td>
              </tr>
              <tr>
                <td align="left">0xbbbd</td>
                <td align="left">15,293</td>
              </tr>
              <tr>
                <td align="left">0xed7f3e7d</td>
                <td align="left">226,442,877</td>
              </tr>
              <tr>
                <td align="left">0xfaa1a0e403d8</td>
                <td align="left">2,893,212,287,960</td>
              </tr>
              <tr>
                <td align="left">0xfc8998abc66bc0</td>
                <td align="left">151,288,809,941,952</td>
              </tr>
              <tr>
                <td align="left">0xfefa318fa8e3ca11</td>
                <td align="left">70,423,237,261,249,041</td>
              </tr>
              <tr>
                <td align="left">0xffffffffffffffffff</td>
                <td align="left">18,446,744,073,709,551,615</td>
              </tr>
            </tbody>
          </table>
          <t>Variable length integers do not need to be encoded using the minimum number of
bytes; any encoding length that can represent the value is valid.</t>
          <dl>
            <dt>x (vi64):</dt>
            <dd>
              <t>Indicates that x holds an integer value using the variable-length
encoding as described above.</t>
            </dd>
          </dl>
        </section>
        <section anchor="location-structure">
          <name>Location Structure</name>
          <t>Location identifies a particular Object in a Group within a Track.</t>
          <figure anchor="moq-location">
            <name>Location structure</name>
            <artwork><![CDATA[
Location {
  Group (vi64),
  Object (vi64)
}
]]></artwork>
          </figure>
          <t>In this document, a Location can be expressed in the form of {GroupID,
ObjectID}, where GroupID and ObjectID indicate the Group ID and Object ID of the
Location, respectively.  The constituent parts of any Location A can be referred
to using A.Group or A.Object.</t>
          <t>Location A &lt; Location B if:</t>
          <t><tt>A.Group &lt; B.Group || (A.Group == B.Group &amp;&amp; A.Object &lt; B.Object)</tt></t>
        </section>
        <section anchor="key-value-pair-structure">
          <name>Key-Value-Pair Structure</name>
          <t>Key-Value-Pair is a flexible structure 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 (vi64),
  [Length (vi64),]
  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>
          <t>Key-Value-Pairs are always parsed with a known byte length, which bounds
the sequence. The source of this length varies by context.</t>
        </section>
        <section anchor="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 (vi64),
  Reason Phrase Value (..)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Reason Phrase Length: A variable-length integer specifying the length of the
reason phrase in bytes. The reason phrase length has a maximum value of
1024 bytes. If an endpoint receives a length exceeding the maximum, it <bcp14>MUST</bcp14>
close the session with 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>
        <section anchor="parsing-serialized-names">
          <name>Parsing Serialized Names</name>
          <t>When parsing a serialized namespace or track name back to its binary form,
implementations <bcp14>MUST</bcp14> apply the following rules to ensure a canonical encoding:</t>
          <ul spacing="normal">
            <li>
              <t>The hex digits following a period (.) <bcp14>MUST</bcp14> be lowercase (a-f). Uppercase
hex digits (A-F) are invalid and <bcp14>MUST</bcp14> cause parsing to fail.</t>
            </li>
            <li>
              <t>Bytes that can be represented literally (a-z, A-Z, 0-9, _) <bcp14>MUST NOT</bcp14> appear
in their hex-encoded form. For example, <tt>.61</tt> is invalid because <tt>a</tt> must
be represented as the literal character <tt>a</tt>. A parser <bcp14>MUST</bcp14> reject such
redundant encodings.</t>
            </li>
            <li>
              <t>A period (.) <bcp14>MUST</bcp14> be followed by exactly two hex digits. A trailing period
or a period followed by fewer than two hex digits is invalid.</t>
            </li>
          </ul>
          <t>These rules ensure that the encoding is bijective: every binary value has
exactly one valid serialized representation, and every valid serialized
string maps to exactly one binary value. This property simplifies comparison
of serialized names without requiring full deserialization.</t>
          <t>Implementations that receive an invalid serialized name <bcp14>SHOULD</bcp14> treat it as
an error. The specific error handling behavior is application-defined.</t>
          <t>Example:</t>
          <artwork><![CDATA[
example.2enet-team2-project_x--report
  Namespace tuples: (example.net, team2, project_x)
  Track name: report
]]></artwork>
        </section>
      </section>
    </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.  All signals
that an Object does not exist are authoritative.</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 yet been
received, or it has not been produced yet.</t>
          </li>
        </ol>
        <t>Since Objects can be delivered out of order, an endpoint can receive an Object
after it has already recorded that the Object does not exist (e.g., via a FETCH
gap from one source and later delivery via a subscription).  This is not a
protocol error and the Track is not malformed.</t>
        <t>Whenever the publisher communicates that certain objects do not exist, this
fact is expressed as a contiguous range of non-existent objects and
by including Properties indicating the group/object gaps; MOQT
implementers should take that into account when selecting appropriate data
structures.</t>
      </section>
      <section 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>
        <t>When the Original Publisher opens a new subgroup, it <bcp14>MUST</bcp14> set the FIRST_OBJECT
bit (<xref target="subgroup-header"/>) to indicate that the first object in the subgroup
stream is the first object ever published in that subgroup. A relay forwarding a
subgroup that begins with the first object ever published in that subgroup <bcp14>MUST</bcp14>
set the FIRST_OBJECT bit.</t>
      </section>
      <section anchor="model-group">
        <name>Groups</name>
        <t>A group is a collection of Objects and is a sub-unit of a Track
(<xref target="model-track"/>).  Groups <bcp14>SHOULD</bcp14> be independently useful, so Objects within a
Group <bcp14>SHOULD NOT</bcp14> depend on Objects in other Groups. A Group provides a join
point for subscriptions, so a subscriber that does not want to receive the
entire Track can opt to receive only Groups starting from a given Group ID.
Groups can contain any number of Objects.</t>
        <section anchor="group-ids">
          <name>Group IDs</name>
          <t>Within a track, the original publisher <bcp14>SHOULD</bcp14> publish Group IDs which increase
with time (where "time" is defined according to the internal clock of the media
being sent). In some cases, Groups will be produced in increasing order, but sent
to subscribers in a different order, for example when the subscription's Group
Order is Descending.  Due to network reordering and the partial reliability
features of MOQT, 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 0 and 32 Track Namespace Fields,
encoded as follows:</t>
          <artwork><![CDATA[
Track Namespace {
  Number of Track Namespace Fields (vi64),
  Track Namespace Field (..) ...
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Number of Track Namespace Fields: A variable-length integer specifying
the number of Track Namespace Fields in the Track Namespace.</t>
            </li>
          </ul>
          <t>Each Track Namespace Field is encoded as follows:</t>
          <artwork><![CDATA[
Track Namespace Field {
  Track Namespace Field Length (vi64),
  Track Namespace Field Value (..)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Track Namespace Field Length: A variable-length integer specifying the length
of the Track Namespace Field in bytes.</t>
            </li>
            <li>
              <t>Track Namespace Field Value: A sequence of bytes that forms a Track Namespace
Field.</t>
            </li>
          </ul>
          <t>Each Track Namespace Field Value <bcp14>MUST</bcp14> contain at least one byte. If an endpoint
receives a Track Namespace Field with a Track Namespace Field Length of 0, it
<bcp14>MUST</bcp14> close the session with 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 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 with a particular Subgroup ID is received, but its
 Publisher Priority is different from that of the previous Object with the same
 Subgroup ID.</t>
            </li>
            <li>
              <t>An Object is received whose Object ID is larger than the final Object in the
Subgroup.  The final Object in a Subgroup is the last Object received on a
Subgroup stream before a FIN.</t>
            </li>
            <li>
              <t>A Subgroup is received over multiple transport streams terminated by FIN with
different final Objects.</t>
            </li>
            <li>
              <t>An Object is received in a Group whose Object
ID is larger than the final Object in the Group.  The final Object in a Group
is the Object with Status END_OF_GROUP, or the last Object before a FIN in a
Subgroup which has the END_OF_GROUP bit set.  If the end of a Group is
implicitly determined via a gap in a FETCH response, the final Object in the
Group remains unknown.</t>
            </li>
            <li>
              <t>An Object is received whose Group and Object ID are larger than
the final Object in the Track.  The final Object in a Track is the Object
with Status END_OF_TRACK 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> cancel any corresponding
subscription or fetches for that Track from that publisher
(see <xref target="request-cancellation"/>), and <bcp14>SHOULD</bcp14> deliver an error to the application.
If a relay detects a Malformed Track, it <bcp14>MUST</bcp14> immediately terminate downstream
subscriptions with PUBLISH_DONE and reset any fetch streams with
Status Code <tt>MALFORMED_TRACK</tt>. Object(s) triggering Malformed Track status
<bcp14>MUST NOT</bcp14> be cached.</t>
        </section>
        <section anchor="track-scope">
          <name>Scope</name>
          <t>An MOQT scope is a set of servers (as identified by their connection
URIs) for which a Full Track Name is guaranteed to be unique and identify a
specific track. It is up to the application using MOQT to define how broad or
narrow the scope is. An application that deals with connections between devices
on a local network may limit the scope to a single connection; by
contrast, an application that uses multiple CDNs to serve media may
require the scope to include all of those CDNs.</t>
          <t>A single MOQT transport session is tied to the scope that is negotiated in the
beginning of the session. Unless the application has additional information,
two tracks are assumed to belong to the same scope if and only if the authority
and the path values are equal. The authority and the path values are
communicated through the CLIENT_SETUP message in case of raw QUIC, and through
HTTP request header fields in case of WebTransport.</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="properties">
        <name>Properties</name>
        <t>Tracks and Objects can have additional relay-visible fields, known as
Properties, which do not require negotiation, and can be used to alter
MOQT Object distribution.</t>
        <t>Properties are defined in <xref target="moqt-properties"/> as well as external
specifications and are registered in an IANA table <xref target="iana"/>. These
specifications define the type and value of the property, along with any rules
concerning processing, modification, caching and forwarding.</t>
        <t>If a Relay does not support a Property, it <bcp14>MUST NOT</bcp14> be modified, <bcp14>MUST</bcp14> be
forwarded, and <bcp14>MUST</bcp14> be cached with the Track or Object, unless it is a Mandatory
Track Property as described in <xref target="mandatory-track-properties"/>.  If a Track or Object
arrives with a different set of unknown properties than previously cached,
the most recent set <bcp14>SHOULD</bcp14> replace any cached values, removing any unknown
values not present in the new set.  Relays <bcp14>MUST NOT</bcp14> attempt to merge sets
of unknown properties received in different messages.</t>
        <t>If a Relay supports a Property, it <bcp14>MAY</bcp14> be modified, added, removed, and/or
cached, subject to the processing rules specified in the definition.</t>
        <t>Properties are serialized as Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).
Track Properties always appear as the final field in the messages that
carry them; their length is the remaining bytes of the message after all
preceding fields have been consumed. Object Properties (<xref target="object-properties"/>)
are preceded by an explicit length field.</t>
        <t>Property types are registered in the IANA table 'MOQ Properties'.
See <xref target="iana"/>.</t>
        <t>Certain Property type ranges are reserved for application-specific
use and will never be allocated by IANA in future MOQT specifications:</t>
        <ul spacing="normal">
          <li>
            <t>0x38 to 0x3F (1-byte encoding): 8 code points for applications with
tight space constraints</t>
          </li>
          <li>
            <t>0x3800 to 0x3FFF (2-byte encoding): 2048 code points (including grease
<xref target="grease"/>) for applications with moderate space constraints</t>
          </li>
        </ul>
        <t>Applications <bcp14>MAY</bcp14> use code points in these ranges without registration for
format-specific metadata or other application-defined purposes. Relays that
do not understand the application format <bcp14>MUST</bcp14> forward these properties
unchanged but <bcp14>MUST NOT</bcp14> attempt to interpret their semantic meaning. Different
applications using the same code point in these ranges may assign different
meanings; the interpretation depends on the track or application
context known to the publisher and subscriber.</t>
        <section anchor="mandatory-track-properties">
          <name>Mandatory Track Properties</name>
          <t>Property types in the range 0x4000-0x7FFF are designated as Mandatory Track
Properties. These properties <bcp14>MUST</bcp14> have Track scope. Mandatory Track Properties
have special handling rules that prevent tracks with required extensions from
being forwarded to or processed by endpoints that do not understand them.</t>
          <t>An Object received with a Mandatory Track Property as an Object Property is
malformed (see <xref target="malformed-tracks"/>).</t>
          <t>When an endpoint receives Track Properties (in PUBLISH, SUBSCRIBE_OK, or
FETCH_OK messages) containing a Mandatory Track Property type that it does not
understand, it <bcp14>MUST NOT</bcp14> process or forward that track:</t>
          <ul spacing="normal">
            <li>
              <t>For PUBLISH messages: the subscriber <bcp14>MUST</bcp14> respond with REQUEST_ERROR with
error code UNSUPPORTED_EXTENSION.</t>
            </li>
            <li>
              <t>For SUBSCRIBE_OK messages: the subscriber <bcp14>MUST</bcp14> cancel the subscription
(see <xref target="request-cancellation"/>).  If the subscriber is a relay with pending
downstream subscribers, it <bcp14>MUST</bcp14> send REQUEST_ERROR with error code
UNSUPPORTED_EXTENSION to the downstream subscribers.</t>
            </li>
            <li>
              <t>For FETCH_OK messages: the subscriber <bcp14>MUST</bcp14> cancel the fetch
(see <xref target="request-cancellation"/>).  If the subscriber is a relay and has not yet
sent a FETCH_OK or REQUEST_ERROR downstream, it <bcp14>MUST</bcp14> send REQUEST_ERROR with
error code UNSUPPORTED_EXTENSION to the downstream fetch requester.  If the
relay has already forwarded data on a fetch stream, it <bcp14>MUST</bcp14> reset the stream.</t>
            </li>
          </ul>
          <t>A publisher that knows a subscriber does not support a Mandatory Track Property
<bcp14>SHOULD</bcp14> take the following action:</t>
          <ul spacing="normal">
            <li>
              <t>For SUBSCRIBE: respond with REQUEST_ERROR with error code UNSUPPORTED_EXTENSION.</t>
            </li>
            <li>
              <t>For FETCH: respond with REQUEST_ERROR with error code UNSUPPORTED_EXTENSION.</t>
            </li>
            <li>
              <t>For PUBLISH: do not publish the track to that subscriber.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <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.</t>
        <t>There is no definition of the protocol over other transports,
such as TCP, and applications using MOQT might need to fallback to
another protocol when QUIC or WebTransport aren't available.</t>
        <t>MOQT uses ALPN in QUIC and "WT-Available-Protocols" in WebTransport
(<xref section="3.3" sectionFormat="comma" target="WebTransport"/>) to perform version negotiation.</t>
        <t>[[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 SETUP messages.</t>
        <section anchor="moqt-uri-scheme">
          <name>MOQT URI Scheme</name>
          <t>An MOQT server is identified using a URI with the "moqt" scheme.  The "moqt"
URI scheme is defined as follows, using definitions from <xref target="RFC3986"/>:</t>
          <artwork><![CDATA[
moqt-URI = "moqt" "://" authority path-abempty [ "?" query ]
]]></artwork>
          <t>The <tt>authority</tt> portion <bcp14>MUST NOT</bcp14> contain an empty <tt>host</tt> portion.
The <tt>moqt</tt> URI scheme supports the <tt>/.well-known/</tt> path prefix defined in
<xref target="RFC8615"/>.</t>
          <t>The <tt>moqt</tt> URI scheme follows the generic URI syntax of <xref target="RFC3986"/> for
the <tt>authority</tt>, <tt>path-abempty</tt>, and <tt>query</tt> components, including the
use of reserved characters and percent-encoding defined therein.  A <tt>moqt</tt>
URI can be converted to an <tt>https</tt> URI by replacing the scheme (see
<xref target="webtransport"/>), so the <tt>path-abempty</tt> and <tt>query</tt> components use the same
syntax as <tt>https</tt> URIs.</t>
        </section>
        <section anchor="moqt-fragment">
          <name>Fragment Identifiers</name>
          <t>The media type for resources identified by <tt>moqt</tt> URIs is
<tt>application/moqt</tt> (see <xref target="iana-media-type"/>).</t>
          <t>Fragment identifiers <bcp14>MAY</bcp14> be used with <tt>moqt</tt> URIs. The fragment is not
transmitted to the server; it is processed locally by the client after
establishing the MOQT session.</t>
          <t>A <tt>moqt</tt> URI fragment <bcp14>MUST</bcp14> begin with a registered fragment type
identifier, followed by a colon (<tt>:</tt>), followed by a type-specific value:</t>
          <artwork><![CDATA[
moqt://example.com/app#<type>:<value>
]]></artwork>
          <t>Fragment type identifiers <bcp14>MUST</bcp14> consist of ASCII lowercase letters,
digits, and hyphens (<tt>a-z</tt>, <tt>0-9</tt>, <tt>-</tt>). The
semantics of the value after the colon are defined by the specification
that registers the fragment type.</t>
          <t>Fragment type identifiers are registered in the "MOQT URI Fragment
Types" registry (<xref target="iana-fragment-types"/>).</t>
          <t>The default operation for dereferencing a <tt>moqt</tt> URI is to establish a
MOQT session to the identified server.</t>
          <t>TODO: Add URI scheme security considerations per RFC 7595 Section 3.7
(e.g., authority in SNI, path/query exposure).</t>
          <t>TODO: Add internationalization statement per RFC 7595 Section 3.6.</t>
          <t>If the port is omitted in the URI, a default port of 443 is used.</t>
          <t>The client <bcp14>MAY</bcp14> use either native QUIC or WebTransport. On a QUIC connection,
the client offers any combination of MOQT ALPNs (e.g. <tt>moqt/1</tt>, <tt>moqt/2</tt>)
and <tt>h3</tt> that it supports in its TLS ClientHello, in preference order. If the
server selects an MOQT ALPN, the session proceeds as described in
<xref target="native-quic"/>. If the server selects <tt>h3</tt>, the client establishes a
WebTransport session as described in <xref target="webtransport"/>. On a TCP+TLS
connection, the client offers <tt>h2</tt> in its TLS ClientHello and establishes a
WebTransport session as described in <xref target="webtransport"/>.</t>
        </section>
        <section anchor="webtransport">
          <name>WebTransport</name>
          <t>When the client uses WebTransport, it constructs an <tt>https</tt> URI from the <tt>moqt</tt>
URI by replacing the scheme with <tt>https</tt>.
For example, <tt>moqt://example.com/path</tt> becomes
<tt>https://example.com/path</tt>. The client sends an extended CONNECT request to this
URI to establish a WebTransport session, as described in
(<xref section="3" sectionFormat="comma" target="WebTransport"/>). The client includes MOQT protocol identifiers in
the WT-Available-Protocols header (<xref section="3.3" sectionFormat="comma" target="WebTransport"/>).</t>
        </section>
        <section anchor="native-quic">
          <name>Native QUIC</name>
          <t>The client establishes a QUIC connection to the host and port identified by the
<tt>authority</tt> section of the URI.
When the client uses native QUIC, the <tt>authority</tt>, <tt>path-abempty</tt> and <tt>query</tt>
portions of the URI are transmitted in Setup Options (see <xref target="setup-options"/>).</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, new Properties,
or new framing for Streams and Datagrams.</t>
        <t>The client and server <bcp14>MUST</bcp14> include all Setup Options <xref target="setup-options"/>
required for the negotiated MOQT version in SETUP.</t>
        <t>Each endpoint declares the extensions it supports and provides any initial
values required by those extensions as Setup Options in SETUP. Once an endpoint
has both sent and received SETUP messages, it determines the set of negotiated
extensions.</t>
        <t>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 anchor="reserved-namespaces">
          <name>Reserved Namespaces</name>
          <t>MOQT reserves all Track Namespace values whose first tuple field begins with
a period (0x2e, <tt>.</tt>). These namespaces <bcp14>MUST NOT</bcp14> be used unless their meaning
is defined through IANA registration. Unless otherwise specified, an
endpoint that receives a request for an unrecognized reserved namespace <bcp14>MUST</bcp14>
pass it to the Application, so that future extensions can define new reserved
namespaces without breaking older implementations.</t>
          <t>A Track Namespace whose first field is exactly <tt>.</tt> (a single period, 0x2e)
is reserved and <bcp14>MUST NOT</bcp14> be used for any purpose; endpoints <bcp14>MUST NOT</bcp14> publish
tracks or namespaces under it and <bcp14>MUST</bcp14> reject requests referencing it with
DOES_NOT_EXIST.</t>
        </section>
        <section anchor="session-level-tracks">
          <name>Session-Level Tracks and Namespaces</name>
          <t>MOQT defines the <tt>.session</tt> namespace (the bytes 0x2e, 0x73, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e) in the first position of the Track Namespace for
session-level tracks and namespaces. Session-level tracks and namespaces are
managed by the MOQT implementation, not the Application. They provide a
mechanism for extending MOQT transport functionality using existing
subscription and object delivery machinery, without defining new control
messages or stream types.</t>
          <t>The Application <bcp14>MUST NOT</bcp14> publish tracks or namespaces whose first
field is <tt>.session</tt>. Relays <bcp14>MUST NOT</bcp14> forward requests for session-level
tracks and namespaces to other sessions.</t>
          <t>The empty track name in the <tt>.session</tt> namespace is defined to not exist.
A request with a Track Namespace whose first field is <tt>.session</tt> and an
empty Track Name <bcp14>MUST</bcp14> be rejected with DOES_NOT_EXIST.</t>
          <t>An endpoint that receives a request for an unrecognized session-level track
or namespace <bcp14>MUST</bcp14> reject it with REQUEST_ERROR using error code
DOES_NOT_EXIST rather than passing it to the Application.</t>
          <t>The track names and namespaces available under the <tt>.session</tt> namespace are
defined by extensions to this specification and registered with IANA (see
<xref target="iana-session-level-tracks"/>).</t>
        </section>
      </section>
      <section anchor="session-init">
        <name>Session initialization</name>
        <t>MOQT uses a pair of unidirectional streams for creating the session and
exchanging control messages. Each peer opens one control stream beginning with
a SETUP message. Using a pair of unidirectional streams rather than a single
bidirectional stream allows either peer to send data as soon as it is able.
Depending on whether 0-RTT is available on the QUIC connection, either client or
server might be able to send stream data first.</t>
        <t>In addition to the control streams, this specification uses bidirectional streams
to carry requests.  A request stream begins with one of these seven message types:
TRACK_STATUS, SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS. Bidirectional streams <bcp14>MUST NOT</bcp14>
begin with any other message type unless negotiated. If they do, the peer <bcp14>MUST</bcp14>
close the Session with a <tt>PROTOCOL_VIOLATION</tt>. Objects are sent on unidirectional
streams.</t>
        <t>As such, a client can initiate a MOQT session, subscribe, and
start publishing Objects all in parallel.</t>
        <t>Unidirectional streams containing Objects or bidirectional stream(s) beginning
with a request message could arrive prior to the control streams, in which case
the data <bcp14>SHOULD</bcp14> be buffered until both control streams arrive and setup is
complete. If an implementation does not want to buffer or if the message type is
not supported, it <bcp14>MAY</bcp14> reset such bidirectional streams before the session and
control streams are established.</t>
        <t>A control stream <bcp14>MUST NOT</bcp14> be closed at the underlying transport layer during the
session's lifetime.  Doing so results in the session being closed as a
<tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>Prior to receiving the peer's SETUP message, it's unknown what extensions
a peer will support. Message Parameters requiring negotiation <bcp14>SHOULD NOT</bcp14>
be used prior to receiving the peer's SETUP message unless the application
requires the extension or the endpoint knows the peer supports the
extension. If an unsupported Message Parameter is used, the peer will be
unable to process it and the session will be terminated. See <xref target="message-params"/>.</t>
        <section anchor="rtt">
          <name>0-RTT</name>
          <t>QUIC supports 0-RTT (<xref section="2.3" sectionFormat="of" target="RFC8446"/>), but WebTransport over QUIC
is not expected to use 0-RTT, because initializing a WebTransport session
uses CONNECT, which is not a safe method. <xref target="RFC8470"/> describes the use of
0-RTT with HTTP in more detail. If 0-RTT is used with an existing or future
version of WebTransport, the following would apply to it as well as QUIC.</t>
          <t>MOQT Messages and Objects as defined in this draft are safe to replay in most
circumstances.</t>
          <ul spacing="normal">
            <li>
              <t>TRACK_STATUS gets the Largest Object and Track Properties, but does not
change the state of a Track or any Object in the Track.</t>
            </li>
            <li>
              <t>SUBSCRIBE requests Objects be delivered, but does not change the Objects
being requested.</t>
            </li>
            <li>
              <t>PUBLISH initiates a Subscription. Objects can be immediately sent to
the Subscriber. Processing the same Objects multiple times is
idempotent, as the subscriber or relay can identify and discard
duplicates based on the Group ID and Object ID.</t>
            </li>
            <li>
              <t>SUBSCRIBE_NAMESPACE requests a list of namespaces and the establishment
of new subscriptions, but does not change the available Namespaces,
Tracks, or Objects contained within a Track.</t>
            </li>
            <li>
              <t>PUBLISH_NAMESPACE requests that Subscriptions under the namespace be sent
to that Publisher. If a Subscription was sent to the replaying endpoint, it
would fail because the endpoint cannot complete the handshake.</t>
            </li>
          </ul>
          <t>Some potential side effects of replay are:</t>
          <ul spacing="normal">
            <li>
              <t>Publishing Objects that were previously published could cause those
Objects to be distributed to active Subscriptions if the relays do
not identify them as already having been published. This re-distribution could
also make them available in cache again after they previously expired.</t>
            </li>
          </ul>
          <t>Replays could increase load on the MOQT network. For relay to client
traffic, this is no worse than 0-RTT in HTTP/3, since the server is limited by
the amplification factor until address validation. However, it could cause
the relay to initiate new upstream Subscriptions. For a SUBSCRIBE_NAMESPACE
that requested Subscriptions in the Namespace, sending that upstream could
cause the Relay to receive a number of new Subscriptions on the replaying
client's behalf.</t>
          <t>Relays <bcp14>MAY</bcp14> defer initiating upstream subscriptions until the handshake is complete
or reject 0-RTT entirely to mitigate resource exhaustion from replayed packets.</t>
        </section>
        <section anchor="request-cancellation">
          <name>Request Cancellation and Rejection</name>
          <t>Once a request stream has been opened, the request <bcp14>MAY</bcp14> be cancelled by either
endpoint. Senders cancel requests if the response is no longer of interest;
Receivers cancel requests if they are unable to or choose not to respond.</t>
          <t>Implementations <bcp14>SHOULD</bcp14> cancel requests by abruptly terminating any directions of
a stream that are still open by resetting or sending STOP_SENDING.</t>
          <t>When an endpoint rejects a request without performing any application processing,
it <bcp14>SHOULD</bcp14> send a REQUEST_ERROR and FIN the stream.</t>
          <t>The application <bcp14>SHOULD</bcp14> use a relevant error code when resetting or sending
STOP_SENDING on a request stream, as defined in <xref target="stream-reset-codes"/>.</t>
        </section>
        <section anchor="stream-reset-codes">
          <name>Stream Reset Error Codes</name>
          <t>The application <bcp14>SHOULD</bcp14> use a relevant error code when resetting or sending
STOP_SENDING on any stream.</t>
          <dl>
            <dt>INTERNAL_ERROR (0x0):</dt>
            <dd>
              <t>An implementation specific error.</t>
            </dd>
            <dt>CANCELLED (0x1):</dt>
            <dd>
              <t>The stream was cancelled by either endpoint. For Subscriptions,
PUBLISH_DONE (<xref target="message-publish-done"/>) may have a more detailed status code.</t>
            </dd>
            <dt>DELIVERY_TIMEOUT (0x2):</dt>
            <dd>
              <t>A delivery timeout (<xref target="delivery-timeouts"/>) was exceeded for this stream.</t>
            </dd>
            <dt>SESSION_CLOSED (0x3):</dt>
            <dd>
              <t>The session is being closed.</t>
            </dd>
            <dt>GOING_AWAY (0x4):</dt>
            <dd>
              <t>The endpoint is rejecting this request because it has sent or received a GOAWAY.</t>
            </dd>
            <dt>TOO_FAR_BEHIND (0x5):</dt>
            <dd>
              <t>The corresponding subscription has exceeded the publisher's resource limits and
is being terminated (see <xref target="delivery-timeouts"/>).</t>
            </dd>
            <dt>UNKNOWN_OBJECT_STATUS (0x6):</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>EXPIRED_AUTH_TOKEN (0x7):</dt>
            <dd>
              <t>The authorization token for the request has expired.</t>
            </dd>
            <dt>EXCESSIVE_LOAD (0x9):</dt>
            <dd>
              <t>The endpoint is overloaded and is resetting this stream.</t>
            </dd>
            <dt>MALFORMED_TRACK (0x12):</dt>
            <dd>
              <t>A relay publisher detected that the track was malformed (see
<xref target="malformed-tracks"/>).</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="stream-types">
        <name>Unidirectional Stream Types</name>
        <t>All unidirectional MOQT streams start with a variable-length integer indicating
the type of the stream.</t>
        <table>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x05</td>
              <td align="left">FETCH_HEADER  (<xref target="fetch-header"/>)</td>
            </tr>
            <tr>
              <td align="right">0b0XX1XXXX</td>
              <td align="left">SUBGROUP_HEADER  (<xref target="subgroup-header"/>)</td>
            </tr>
            <tr>
              <td align="right">0x2F00</td>
              <td align="left">SETUP (<xref target="message-setup"/>)</td>
            </tr>
            <tr>
              <td align="right">0x132B3E28</td>
              <td align="left">PADDING  (<xref target="padding-streams"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>An endpoint that receives an unknown stream type <bcp14>MUST</bcp14> close the session.</t>
        <t>Control streams (SETUP) are described in <xref target="session-init"/>.
Data streams (FETCH_HEADER, SUBGROUP_HEADER) are described in <xref target="data-streams"/>.
Padding streams are described in <xref target="padding"/>.</t>
      </section>
      <section anchor="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 endpoint received a Request ID with an incorrect least significant
bit for the sender, or a duplicate Request ID. See <xref target="request-id"/>.</t>
          </dd>
          <dt>DUPLICATE_TRACK_ALIAS (0x5):</dt>
          <dd>
            <t>The endpoint attempted to use a Track Alias that was already in use.</t>
          </dd>
          <dt>KEY_VALUE_FORMATTING_ERROR (0x6):</dt>
          <dd>
            <t>The key-value pair has a formatting error.</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 GOAWAY message contains a Timeout indicating how long, in
milliseconds, the sender intends to wait before closing the session. The sender
<bcp14>SHOULD</bcp14> close the session with <tt>GOAWAY_TIMEOUT</tt> after the indicated timeout if
there are still open subscriptions or fetches on a connection.</t>
        <t>When the server is a subscriber, it <bcp14>SHOULD</bcp14> send a GOAWAY message to downstream
subscribers prior to unsubscribing from upstream publishers.</t>
        <t>After the client receives a GOAWAY, it's <bcp14>RECOMMENDED</bcp14> that the client waits until
there are no more <tt>Established</tt> subscriptions before closing the session with NO_ERROR.
Ideally this is transparent to the application using MOQT, which involves
establishing a new session in the background and migrating <tt>Established</tt> subscriptions
and published namespaces. The client can choose to delay closing the session if
it expects more OBJECTs to be delivered. The sender closes the session with a
<tt>GOAWAY_TIMEOUT</tt> if the peer doesn't close the session within the
indicated Timeout.</t>
      </section>
      <section 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>
          <t>Some applications might have APIs to allow sending duplicate data or forward error
correction to probe for more bandwidth while also limiting the impact of probing
in case it causes packet loss. Subscribers wanting to switch to an alternate
representation of a Track can subscribe to it at a lower priority, or subscribe
to additional Tracks at the lowest (255) priority to fill the congestion window
during probing intervals while minimizing the impact on higher priority
media. Publishers can send padding (<xref target="padding"/>) to probe for additional
bandwidth without requiring additional subscriptions.
Network-assisted bandwidth estimation mechanisms such as SCONE
<xref target="I-D.ietf-scone-protocol"/> can provide receivers with sustainable bandwidth hints,
which subscribers can use to inform track selection decisions and potentially avoid
unnecessary probing.</t>
        </section>
        <section anchor="consistent-throughput">
          <name>Consistent Throughput</name>
          <t>Congestion control algorithms are commonly optimized for throughput, not consistency.
For example, BBR's PROBE_RTT state halves the sending rate for more than a round trip
in order to obtain an accurate minimum RTT. Similarly, Reno halves 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="extensibility">
      <name>Extensibility</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 (<xref target="message-request-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 by sending STOP_SENDING.
The publisher terminates a subscription in the
<tt>Pending (Publisher)</tt> or <tt>Established</tt> states by sending PUBLISH_DONE
and closing the stream.</t>
        <t>This diagram shows the subscription state machine:</t>
        <artwork><![CDATA[
                              +--------+
                              |  Idle  |
                              +--------+
                                |    |
                      SUBSCRIBE |    | PUBLISH
                    (subscriber)|    | (publisher)
                                V    V
                   +--------------+ +--------------+
                   | Pending      | | Pending      |
              +----| (Subscriber) | | (Publisher)  |----+
              |    +--------------+ +--------------+    |
              |                 |    |                  |
REQUEST_ERROR |    SUBSCRIBE_OK |    | PUBLISH_OK       | REQUEST_ERROR
(publisher)   |      (publisher)|    | (subscriber)     | (subscriber)
              |                 V    V                  |
              |            +-------------+              |
              |            | Established | ------+
              |            |             |       | REQUEST_UPDATE
              |            +-------------+ <-----+
              |                 |    |                  |
              +--- STOP_SENDING |    | PUBLISH_DONE ----+
              |     (subscriber)|    | (publisher)      |
              |                 V    V                  |
              |            +-------------+              |
              +----------->| Terminated  | <------------+
                           +-------------+
]]></artwork>
        <t>A publisher <bcp14>MUST</bcp14> send exactly one SUBSCRIBE_OK or REQUEST_ERROR in response to
a SUBSCRIBE. A subscriber <bcp14>MUST</bcp14> send exactly one PUBLISH_OK
(<xref target="message-request-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>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>A publisher <bcp14>MUST</bcp14> save the Largest Location communicated in SUBSCRIBE_OK, PUBLISH
or REQUEST_UPDATE_OK that changes the Forward State
from 0 to 1.  This value is called the Joining Location and can be used in a
Joining FETCH (see <xref target="joining-fetches"/>) while the subscription is in the
<tt>Established</tt> 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 cancels the request
(see <xref target="request-cancellation"/>), 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
STOP_SENDING. It <bcp14>MUST</bcp14> reset any open streams associated with the SUBSCRIBE.</t>
          <t>The Publisher can also immediately delete subscription state after sending
PUBLISH_DONE, but <bcp14>MUST NOT</bcp14> send it until it has closed all related streams.</t>
          <t>A REQUEST_ERROR indicates no objects will be delivered, and both endpoints can
immediately 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 Delta.  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 (vi64),
  [Start Location (Location),]
  [End Group Delta (vi64),]
}
]]></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 Delta</tt> is zero, the
remainder of that Group passes the filter. Otherwise, the last Group ID to be
delivered will be the Group ID in <tt>Start Location</tt> plus the <tt>End Group Delta</tt>.
If the resulting Group ID would be greater than 2^64 - 1, the endpoint <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</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>
          <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>
        </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, PUBLISH_OK or
REQUEST_UPDATE with Forward State 1 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 cancels the request
(see <xref target="request-cancellation"/>), receives REQUEST_ERROR, or the FETCH data stream
receives a FIN or is reset. If the data stream is already open,
the subscriber wishing to cancel the FETCH <bcp14>MAY</bcp14> send STOP_SENDING for the
data stream as well as the bidi request stream. It <bcp14>MUST</bcp14> send STOP_SENDING
for the bidi request stream.</t>
        <t>The Publisher can destroy fetch state as soon as it has received a
STOP_SENDING. It <bcp14>MUST</bcp14> reset the bidi request stream and unidirectional
data stream associated with the FETCH. It can also 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, SUBSCRIBE_TRACKS, 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 or SUBSCRIBE_TRACKS to publishers/relays it has established
a session with.</t>
        <t>SUBSCRIBE_NAMESPACE requests namespace discovery: the publisher sends relevant
NAMESPACE and NAMESPACE_DONE messages for namespaces matching the prefix,
including echoing back Track Namespaces under the prefix that have been published
to it.</t>
        <t>SUBSCRIBE_TRACKS requests track subscriptions: the publisher sends PUBLISH
messages for tracks within matching namespaces, excluding tracks published
by the subscriber.</t>
        <t>Either message with zero Track Namespace fields indicates the sender is
interested in all namespaces or all tracks from the receiver, respectively.</t>
        <t>The subscriber sends SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS 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.</t>
        <t>If a Subscription cannot be created because there are no available bidirectional streams,
the Publisher sends a PUBLISH_BLOCKED message on the SUBSCRIBE_TRACKS response
stream to indicate the Full Track Name of the Subscription that could not be
established. The Publisher <bcp14>MUST NOT</bcp14> send a PUBLISH for a Track after
PUBLISH_BLOCKED has been sent.  The subscriber can instead issue a SUBSCRIBE
to establish a subscription to that track.</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 or SUBSCRIBE_TRACKS can be cancelled by closing the
stream with either a FIN or RESET_STREAM. Cancelling SUBSCRIBE_TRACKS does not prohibit original publishers
from sending further PUBLISH messages, but relays <bcp14>MUST NOT</bcp14>
send any further PUBLISH messages to a client without knowing the client is
interested in and authorized to receive the content.</t>
      </section>
      <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 NAMESPACE message to any subscriber that has
sent 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 as the first
message on the bidi stream 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 is withdrawn by cancelling the request
(see <xref target="request-cancellation"/>), although it is not a protocol error for
the subscriber to send a SUBSCRIBE or FETCH message for a track in a
namespace after the namespace is withdrawn.</t>
        <t>A subscriber can cancel the request (see <xref target="request-cancellation"/>) to revoke
acceptance of a PUBLISH_NAMESPACE. If the reason for cancellation is expiration
of authorization credentials, the publisher can send PUBLISH_NAMESPACE again
on a new bidi stream with refreshed authorization, or close the stream and
discard associated state.</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>MOQT priorities allow a subscriber and original publisher to influence
the transmission order of Objects within a session in the presence of
congestion.</t>
      <section anchor="definitions">
        <name>Definitions</name>
        <t>MOQT maintains priorities between different schedulable objects.
A schedulable object in MOQT is either:</t>
        <ol spacing="normal" type="1"><li>
            <t>The first or next Object in a Subgroup that is in response to a subscription.</t>
          </li>
          <li>
            <t>An Object with 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
omitting the Group Order parameter).  The group order of an existing
subscription cannot be changed.</t>
      </section>
      <section anchor="scheduling-algorithm">
        <name>Scheduling Algorithm</name>
        <t>When an MOQT publisher has multiple schedulable objects it can choose between,
the objects <bcp14>SHOULD</bcp14> be selected as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>If two objects have different subscriber priorities associated with them,
the one with <strong>the highest subscriber priority</strong> is scheduled to be sent first.</t>
          </li>
          <li>
            <t>If two objects have the same subscriber priority, but different publisher
priorities, the one with <strong>the highest publisher priority</strong> is scheduled to be
sent first.</t>
          </li>
          <li>
            <t>If two objects in 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 streams <bcp14>SHOULD</bcp14> be prioritized highest, followed by the
bidi request streams and then all subscribed Objects. Bidi request streams <bcp14>MAY</bcp14> be
prioritized within themselves by Subscriber Priority if specified.</t>
      </section>
      <section anchor="considerations-for-setting-priorities">
        <name>Considerations for Setting Priorities</name>
        <t>For downstream subscriptions, relays <bcp14>SHOULD</bcp14> respect the subscriber and original
publisher's priorities.  Relays can receive subscriptions with conflicting
subscriber priorities or Group Order preferences.  Relays <bcp14>SHOULD NOT</bcp14> directly
use Subscriber Priority or Group Order from incoming subscriptions for upstream
subscriptions. 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>MOQT Sessions can span multiple namespaces, and priorities might not
be coordinated across namespaces.  The subscriber's priority is
considered first, so there is a mechanism for a subscriber to fix
incompatibilities between different namespaces prioritization schemes.
Additionally, it is anticipated that when multiple namespaces
are present within a session, the namespaces could be coordinating,
possibly part of the same application.  In cases when pooling among
namespaces is expected to cause issues, multiple MOQT sessions, either
within a single connection or on multiple connections can be used.</t>
        <t>Implementations that have a default priority <bcp14>SHOULD</bcp14> set it to a value in
the middle of the range (eg: 128) to allow non-default priorities to be
set either higher or lower.</t>
      </section>
    </section>
    <section anchor="delivery-timeouts">
      <name>Delivery Timeouts and Data Reliability</name>
      <t>Each MOQT subscription has two timeout values associated with it: a
SUBGROUP_DELIVERY_TIMEOUT and an OBJECT_DELIVERY_TIMEOUT.  Both of those values
are expressed in milliseconds; both are optional; a value of 0 means that
there is no timeout set.</t>
      <t>The publisher communicates both timeout values as a Track Property; the
subscriber communicates them as Message Parameters.  For each type of timeout,
if both the publisher and the subscriber have a non-zero value, the smaller of
the two is used.</t>
      <t>If the OBJECT_DELIVERY_TIMEOUT is not zero, the MOQT implementation <bcp14>MUST</bcp14> retain
the time at which the first payload byte of every object has been either
received from the upstream subscription, or provided by the original publisher
application.  The actual mechanism by which the timeout works depends on the
Object Forwarding Preference:</t>
      <ul spacing="normal">
        <li>
          <t>For subgroups, the implementation <bcp14>MUST</bcp14> check the time elapsed since the first
byte of the object before attempting to pass it to the underlying transport
for transmission; if the time elapsed exceeds OBJECT_DELIVERY_TIMEOUT, it
<bcp14>MUST</bcp14> reset the underlying transport stream with the reset stream code
DELIVERY_TIMEOUT (see <xref target="closing-subgroup-streams"/>) and <bcp14>SHOULD NOT</bcp14> attempt to
open a new stream to deliver additional Objects in that Subgroup.  The
implementation <bcp14>SHOULD</bcp14> check object delivery timeouts before retransmitting
object data if the underlying transport implementation allows that.  The
implementations <bcp14>SHOULD</bcp14> minimize the amount of data buffered at the underlying
transport layer, as any data buffered at this layer can no longer be timed
out, potentially leading to transmission of expired data.</t>
        </li>
        <li>
          <t>For datagrams, the implementation <bcp14>MUST</bcp14> drop the datagrams if the time elapsed
since the first byte exceeds OBJECT_DELIVERY_TIMEOUT.  Similar to subgroups,
implementations <bcp14>SHOULD</bcp14> either minimize datagram queueing, or use datagram
queueing mechanisms that support time bounds (such as the <tt>outgoingMaxAge</tt>
parameter in the W3C WebTransport API).</t>
        </li>
      </ul>
      <t>If the Object Forwarding Preference is Subgroup and the value of
SUBGROUP_DELIVERY_TIMEOUT is not zero, the MOQT implementation <bcp14>MUST</bcp14>
start a timer of SUBGROUP_DELIVERY_TIMEOUT duration once it becomes
aware that all of the objects on the subgroup have been published
(either by receiving a FIN from the upstream subscription, or, in case
of the original publisher, through being notified of this fact by the
application).  If the timer expires before the underlying transport
stream reaches "all data committed" state
(<xref section="4.3" sectionFormat="comma" target="I-D.ietf-webtrans-overview"/>), the implementation
<bcp14>MUST</bcp14> reset the stream.  This ensures that MOQT can time out subgroups
where all of the data has been sent but not yet fully delivered due to
packet loss.</t>
      <t>For objects with Object Forwarding Preference set to Datagram, the
SUBGROUP_DELIVERY_TIMEOUT acts the same way as OBJECT_DELIVERY_TIMEOUT; if both
are non-zero, the smaller of the two is used.</t>
      <table anchor="timeout-comparison">
        <name>Comparison of the delivery timeout mechanisms</name>
        <thead>
          <tr>
            <th align="left"> </th>
            <th align="left">SUBGROUP_DELIVERY_TIMEOUT</th>
            <th align="left">OBJECT_DELIVERY_TIMEOUT</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Timeout starts</td>
            <td align="left">When the FIN for the subgroup is received</td>
            <td align="left">When the first byte of the object is received</td>
          </tr>
          <tr>
            <td align="left">Timeout checked at</td>
            <td align="left">Via a timer until all data is acknowledged</td>
            <td align="left">When the object is sent to the underlying transport</td>
          </tr>
          <tr>
            <td align="left">Action upon timeout</td>
            <td align="left">Reset for subgroups, drop for datagrams</td>
            <td align="left">Reset for subgroups, drop for datagrams</td>
          </tr>
        </tbody>
      </table>
      <t>Publishers can, at their discretion, discontinue forwarding Objects before
either of the timeouts occurs, subject to stream closure and ordering
constraints described in <xref target="closing-subgroup-streams"/>.  However, if none of the
timeouts are set to a non-zero value, all Objects in the track matching the
subscription filter are delivered as indicated by their Group Order and
Priority.  If a subscriber fails to consume Objects at a sufficient rate,
causing the publisher to exceed its resource limits, the publisher <bcp14>MAY</bcp14>
terminate the subscription using PUBLISH_DONE with error <tt>TOO_FAR_BEHIND</tt>.</t>
    </section>
    <section anchor="relays-moq">
      <name>Relays</name>
      <t>Relays are leveraged to enable distribution scale in the MOQT
architecture. Relays can be used to form an overlay delivery network,
similar in functionality to Content Delivery Networks
(CDNs). Additionally, relays serve as policy enforcement points by
validating subscribe and publish requests at the edge of a network.</t>
      <t>Relays are endpoints, which means they terminate Transport Sessions in order to
have visibility of MOQT Object metadata.</t>
      <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 Properties can be added, removed or updated, subject
to the constraints of the specific property.</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 property could be removed in FETCH,
where it's redundant.</t>
        <t>As described in <xref target="model-object"/>, an endpoint can receive an Object after it has
already recorded that the Object does not exist.  A caching relay <bcp14>SHOULD NOT</bcp14>
cache or forward the Object in this case.</t>
        <t>A cache <bcp14>MUST</bcp14> store all fields of an Object defined in <xref target="object-header"/>,
with the exception of any Object Properties (<xref target="object-properties"/>)
that specify otherwise.</t>
      </section>
      <section anchor="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 or
unsubscribing (see <xref target="request-cancellation"/>) if it cannot accept an additional
publisher due to implementation constraints. Implementations can consider the
establishment or idle time of the session or subscription to determine which
publisher to reject or disconnect.</t>
        <t>Relays <bcp14>MUST</bcp14> handle Objects for the same Track from multiple publishers and
forward them to matching <tt>Established</tt> subscriptions. The Relay <bcp14>SHOULD</bcp14> attempt to
deduplicate Objects before forwarding, subject to implementation constraints.</t>
      </section>
      <section anchor="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.  Relays <bcp14>MUST</bcp14> follow the
constraints on LARGEST_OBJECT defined in <xref target="largest-param"/>.</t>
        <t>Publishers maintain a list of <tt>Established</tt> downstream subscriptions for
each Track. Relays use the Track Alias (<xref target="track-alias"/>) of an incoming Object
to identify its Track and find the current subscribers.  Each new Object
belonging to the Track is forwarded to each subscriber, as allowed by the
subscription's filter (see <xref target="message-subscribe-req"/>), and delivered according
to the priority (see <xref target="priorities"/>) and delivery timeout (see
<xref target="delivery-timeouts"/>).</t>
        <t>A relay <bcp14>MUST NOT</bcp14> reorder or drop objects received on a multi-object stream when
forwarding to subscribers, 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 cancelled (see <xref target="request-cancellation"/>).</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
cancels the request (see <xref target="request-cancellation"/>) to withdraw the PUBLISH_NAMESPACE.
A subscriber indicates it will no longer subscribe to Tracks in a namespace it
previously responded PUBLISH_NAMESPACE_OK to by cancelling the
PUBLISH_NAMESPACE request.</t>
        <t>A Relay connects publishers and subscribers by managing sessions based on the
Track Namespace or Full Track Name. When a SUBSCRIBE message is sent, its Full
Track Name is matched exactly against existing upstream subscriptions.</t>
        <t>Namespace Prefix Matching 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 sent SUBSCRIBE_TRACKS for the Track's
namespace or a prefix thereof. However, if the relay is
holding a downstream SUBSCRIBE awaiting a publisher for this Track (see
<xref target="rendezvous-timeout"/>), it <bcp14>MUST</bcp14> proceed with the SUBSCRIBE and
<bcp14>MUST NOT</bcp14> also forward the PUBLISH to that subscriber.</t>
        <t>When a relay receives an authorized PUBLISH_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 Properties associated with a Track when sending any PUBLISH,
SUBSCRIBE_OK, TRACK_STATUS_OK, or FETCH_OK, unless
allowed by the property's specification (see <xref target="properties"/>).</t>
      </section>
      <section anchor="relay-object-handling">
        <name>Relay Object Handling</name>
        <t>MOQT encodes the delivery information in the Object header (<xref target="object-header"/>).
A relay <bcp14>MUST NOT</bcp14> modify Object fields when forwarding, except for
Object Properties as specified in <xref target="properties"/>.</t>
        <t>A relay <bcp14>MUST</bcp14> treat the object payload as opaque.  A relay <bcp14>MUST NOT</bcp14>
combine, split, or otherwise modify object payloads.  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 pair of unidirectional streams to exchange control messages, as
defined in <xref target="session-init"/>.  Every message on a control or request stream is
formatted as follows:</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Control Message</name>
        <artwork><![CDATA[
MOQT Control Message {
  Message Type (vi64),
  Message Length (16),
  Message Payload (..),
}
]]></artwork>
      </figure>
      <t>The following Message Types are defined. The Stream column indicates
which stream type each message is sent on: Control indicates the
control stream (<xref target="session-init"/>), and Request indicates a bidirectional
request stream. Messages marked "First" <bcp14>MUST</bcp14> be the first message on a
new request stream.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
            <th align="left">Stream</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x01</td>
            <td align="left">RESERVED (SETUP for version 00)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">RESERVED (CLIENT_SETUP for &lt;= 10)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">RESERVED (SERVER_SETUP for &lt;= 10)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x20</td>
            <td align="left">RESERVED (CLIENT_SETUP in &lt;= 16)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x21</td>
            <td align="left">RESERVED (SERVER_SETUP in &lt;= 16)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x2F00</td>
            <td align="left">SETUP (<xref target="message-setup"/>)</td>
            <td align="left">Control</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
            <td align="left">Control, Request</td>
          </tr>
          <tr>
            <td align="right">0x3</td>
            <td align="left">SUBSCRIBE (<xref target="message-subscribe-req"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x1D</td>
            <td align="left">PUBLISH (<xref target="message-publish"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x1E</td>
            <td align="left">PUBLISH_OK (<xref target="message-request-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">PUBLISH_DONE (<xref target="message-publish-done"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x16</td>
            <td align="left">FETCH (<xref target="message-fetch"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x18</td>
            <td align="left">FETCH_OK (<xref target="message-fetch-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xD</td>
            <td align="left">TRACK_STATUS (<xref target="message-track-status"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x6</td>
            <td align="left">PUBLISH_NAMESPACE (<xref target="message-pub-ns"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x50</td>
            <td align="left">SUBSCRIBE_NAMESPACE (<xref target="message-subscribe-ns"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x51</td>
            <td align="left">SUBSCRIBE_TRACKS (<xref target="message-subscribe-tracks"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x8</td>
            <td align="left">NAMESPACE (<xref target="message-namespace"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xE</td>
            <td align="left">NAMESPACE_DONE (<xref target="message-namespace-done"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xF</td>
            <td align="left">PUBLISH_BLOCKED (<xref target="message-publish-blocked"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">REQUEST_UPDATE (<xref target="message-request-update"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">REQUEST_OK (<xref target="message-request-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">REQUEST_ERROR (<xref target="message-request-error"/>)</td>
            <td align="left">Request</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session.
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>Request ID is included in request messages and is used to identify
requests across messages. For example, Joining Fetch references
the Request ID of a SUBSCRIBE.</t>
        <t>The client generates even numbered Request IDs, starting at 0, and the
server generates odd numbered Request IDs, starting at 1.  Each
endpoint increments its Request ID by 2 for each new request.</t>
        <t>Each SUBSCRIBE, PUBLISH, FETCH, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS,
PUBLISH_NAMESPACE, REQUEST_UPDATE, and TRACK_STATUS message consumes a
Request ID. Only
request messages include a Request ID; response messages do not, since
they are sent on the same bidirectional stream as the request.</t>
        <t>If an endpoint receives a Request ID where the least significant bit is
incorrect for the sender, or a duplicate Request ID, it <bcp14>MUST</bcp14> close the
session with <tt>INVALID_REQUEST_ID</tt>.</t>
      </section>
      <section anchor="message-params">
        <name>Message Parameters</name>
        <t>Some control messages include a field that encodes optional Message Parameters.
Message Parameters are serialized as follows:</t>
        <figure anchor="moq-message-param">
          <name>Message Parameter</name>
          <artwork><![CDATA[
Message Parameter {
  Type Delta (vi64),
  Value (..)
}
]]></artwork>
        </figure>
        <t>Type Delta: The difference between this Parameter Type and the previous
   Parameter Type in the message, or the Parameter Type itself for the first
   parameter. Parameters <bcp14>MUST</bcp14> be serialized in ascending order by Type.
   If the resulting Type would be greater than 2^64 - 1, the endpoint
   <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <ul spacing="normal">
          <li>
            <t>Value: The encoding is specified by each parameter definition.
The encodings defined in this draft are:
            </t>
            <ul spacing="normal">
              <li>
                <t>uint8: A single-byte unsigned integer (0-255)</t>
              </li>
              <li>
                <t>varint: A variable-length integer</t>
              </li>
              <li>
                <t>Location: Two consecutive varints (Group, Object)</t>
              </li>
              <li>
                <t>Length-prefixed: A varint length followed by that many bytes</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Message Parameters are intended for the peer only and are not
forwarded by Relays, though relays can consider received parameter values when
making a request.</t>
        <t>All Message Parameters <bcp14>MUST</bcp14> be defined in the negotiated version of MOQT or
negotiated via Setup Options. An endpoint that receives an unknown Message
Parameter <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt>. Because the receiver
has to understand every Message Parameter, there is no need for a mechanism to
skip unknown parameters. Because unknown parameters cannot be skipped, the block
is bounded by a parameter count rather than a length.</t>
        <t>The Message Parameter types defined in this version of MOQT are listed below.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> repeat the same Parameter Type in a message unless the
parameter definition explicitly allows multiple instances of that type to
be sent in a single message. Receivers <bcp14>SHOULD</bcp14> check that there are no
unexpected duplicate parameters and close the session with <tt>PROTOCOL_VIOLATION</tt>
if found.</t>
        <t>The number of Message Parameters is not specifically limited, but the total
length of a control message is limited to 2^16-1 bytes.</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. Track information not specific to the Message or Session
is encoded in Track Properties. See <xref target="properties"/>.</t>
          <t>Each Message Parameter definition indicates the message types in which
it can appear. If it appears in some other type of message, the receiving
endpoint <bcp14>MUST</bcp14> close the connection with a <tt>PROTOCOL_VIOLATION</tt>.
Note that since Setup Options use a separate namespace, it is impossible for
Message Parameters to appear in Setup messages.</t>
        </section>
        <section anchor="authorization-token">
          <name>AUTHORIZATION TOKEN Parameter</name>
          <t>The AUTHORIZATION TOKEN parameter (Parameter Type 0x03) uses Length-prefixed
encoding. It <bcp14>MAY</bcp14> appear in a PUBLISH, SUBSCRIBE, REQUEST_UPDATE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS, PUBLISH_NAMESPACE, TRACK_STATUS or FETCH message. This
parameter conveys information to authorize the sender to perform the operation
carrying the parameter.</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 (vi64),
  [Token Alias (vi64),]
  [Token Type (vi64),]
  [Token Value (..)]
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Alias Type - an integer defining both the serialization and the processing
behavior of the receiver. This Alias type has the following code points:</t>
            </li>
          </ul>
          <dl>
            <dt>DELETE (0x0):</dt>
            <dd>
              <t>There is an Alias but no Type or Value. This Alias and the Token Value it was
previously associated with| <bcp14>MUST</bcp14> be retired. Retiring removes them from the pool
of actively registered tokens.</t>
            </dd>
            <dt>REGISTER (0x1):</dt>
            <dd>
              <t>There is an Alias, a Type and a Value. This Alias <bcp14>MUST</bcp14> be associated with the
Token Value for the duration of the Session or it is deleted. This action is
termed "registering" the Token.</t>
            </dd>
            <dt>USE_ALIAS (0x2):</dt>
            <dd>
              <t>There is an Alias but no Type or Value. Use the Token Type and Value
previously registered with this Alias.</t>
            </dd>
            <dt>USE_VALUE (0x3):</dt>
            <dd>
              <t>There is no Alias and there is a Type and Value. Use the Token Value as
provided. The Token Value may be discarded after processing.</t>
            </dd>
          </dl>
          <t>If a server receives Alias Type DELETE (0x0) or USE_ALIAS (0x2) in a SETUP
message, it <bcp14>MUST</bcp14> close the session with 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 Option defining the
MAX_AUTH_TOKEN_CACHE_SIZE limit (see <xref target="max-auth-token-cache-size"/>) it is
willing to accept. If a registration is attempted which would cause this limit
to be exceeded, the receiver <bcp14>MUST</bcp14> terminate 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>
          <t>Messages carrying the AUTHORIZATION TOKEN parameter can appear on different
control streams. Because stream processing order can be different than send order, the
receiver and sender can have inconsistent views of the token cache state.</t>
          <t>Senders <bcp14>MUST NOT</bcp14> send USE_ALIAS on one control stream for an alias registered on a
different stream until the sender has received a response to the message
containing the REGISTER. Senders <bcp14>MAY</bcp14> use USE_ALIAS on the same control stream as the
REGISTER without waiting for a response.</t>
          <t>Senders <bcp14>MUST NOT</bcp14> send DELETE for an alias while any message using USE_ALIAS with
that alias has not received a response.</t>
        </section>
        <section anchor="subgroup-delivery-timeout">
          <name>SUBGROUP_DELIVERY_TIMEOUT Parameter</name>
          <t>The SUBGROUP_DELIVERY_TIMEOUT parameter (Parameter Type 0x06) is a varint. It
<bcp14>MAY</bcp14> appear in a PUBLISH_OK, SUBSCRIBE, or REQUEST_UPDATE message.  Its
semantics are defined in <xref target="delivery-timeouts"/>.</t>
          <t>This parameter is intended to be specific to a subscription, so it <bcp14>SHOULD NOT</bcp14>
be forwarded upstream by a relay that intends to serve multiple subscriptions
for the same track.</t>
        </section>
        <section anchor="object-delivery-timeout">
          <name>OBJECT_DELIVERY_TIMEOUT Parameter</name>
          <t>The OBJECT_DELIVERY_TIMEOUT parameter (Parameter Type 0x02) is a varint. It
<bcp14>MAY</bcp14> appear in a PUBLISH_OK, SUBSCRIBE, or REQUEST_UPDATE message.  Its
semantics are defined in <xref target="delivery-timeouts"/>.</t>
          <t>This parameter is intended to be specific to a subscription, so it <bcp14>SHOULD NOT</bcp14>
be forwarded upstream by a relay that intends to serve multiple subscriptions
for the same track.</t>
        </section>
        <section anchor="fill-timeout">
          <name>FILL TIMEOUT Parameter</name>
          <t>The FILL_TIMEOUT parameter (Parameter Type 0x0A) <bcp14>MAY</bcp14> appear in a FETCH message.</t>
          <t>It is the maximum total duration in milliseconds a relay <bcp14>SHOULD</bcp14> spend waiting
for upstream sources to provide Objects that are not immediately available
before reporting them as Unknown gaps in the FETCH response. When a relay
encounters Objects within the requested range that are not immediately available
and have unknown status, it issues upstream FETCHes to retrieve them. The Fill
Timeout represents a total budget for all such upstream FETCHes generated by
this request. If the budget is exhausted, the relay reports any remaining
unavailable Objects as Unknown gaps and continues delivering available Objects
in the range.</t>
          <t>A value of 0 indicates the subscriber only wants Objects that are immediately
available; the relay <bcp14>MUST NOT</bcp14> wait for upstream delivery and <bcp14>MUST</bcp14> report any
unavailable Objects as Unknown gaps.</t>
          <t>If the Fill Timeout parameter is absent, the relay waits for an implementation
specific duration before reporting Unknown gaps. If the subscriber specifies a Fill
Timeout larger than the relay is willing to wait, the relay <bcp14>MAY</bcp14> use a shorter
timeout without informing the subscriber.</t>
        </section>
        <section anchor="rendezvous-timeout">
          <name>RENDEZVOUS TIMEOUT Parameter</name>
          <t>The RENDEZVOUS_TIMEOUT parameter (Parameter Type 0x04) <bcp14>MAY</bcp14> appear in a
SUBSCRIBE message.</t>
          <t>It is the duration in milliseconds the subscriber is willing to wait for a
publisher to become available. This applies when a relay receives a SUBSCRIBE
for a Track that has no current publisher.</t>
          <t>If the RENDEZVOUS_TIMEOUT is present, the relay <bcp14>SHOULD</bcp14> hold the subscription
and wait for a publisher to appear, up to the specified duration. The relay
does not send SUBSCRIBE_OK until a publisher becomes available. If a publisher
becomes available within this time, the relay proceeds with the subscription
normally. If the timeout expires without a publisher, the relay <bcp14>SHOULD</bcp14> respond
with REQUEST_ERROR with error code TIMEOUT.</t>
          <t>The relay <bcp14>MAY</bcp14> use a shorter timeout than requested by the subscriber. For
example, a relay might limit the maximum rendezvous timeout to protect its
resources.</t>
          <t>A value of 0 indicates the subscriber does not want to wait and expects an
immediate response.  The relay <bcp14>MUST</bcp14> immediately return REQUEST_ERROR with error
code DOES_NOT_EXIST if no publisher is available</t>
          <t>If RENDEZVOUS_TIMEOUT is absent, the default is 0.</t>
        </section>
        <section anchor="subscriber-priority">
          <name>SUBSCRIBER PRIORITY Parameter</name>
          <t>The SUBSCRIBER_PRIORITY parameter (Parameter Type 0x20) is a uint8. It <bcp14>MAY</bcp14>
appear in a SUBSCRIBE, FETCH, REQUEST_UPDATE (for a subscription or FETCH),
or 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"/>.</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) is a uint8. It <bcp14>MAY</bcp14> appear in a
SUBSCRIBE, PUBLISH_OK, or FETCH.</t>
          <t>Its value indicates how to prioritize Objects from different groups within
the same subscription (see <xref target="priorities"/>), or how to order Groups in a Fetch
response (see <xref target="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) uses length-prefixed
encoding. It <bcp14>MAY</bcp14> appear in a SUBSCRIBE, PUBLISH_OK or REQUEST_UPDATE (for a
subscription) message. It is a Subscription Filter (see <xref target="subscription-filters"/>).</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) is a varint. It <bcp14>MAY</bcp14> appear in
SUBSCRIBE_OK, PUBLISH, PUBLISH_OK, or REQUEST_UPDATE_OK. It encodes 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 by cancelling the request (see <xref target="request-cancellation"/>).  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 attempt to extend the subscription by sending
a REQUEST_UPDATE with 0 or more updated parameters. If the receiver has one or
more updated AUTHORIZATION_TOKENs, it <bcp14>SHOULD</bcp14> include those in the
REQUEST_UPDATE. If the extension is granted, the sender includes a new EXPIRES
value in REQUEST_UPDATE_OK. Relays that send this parameter and applications that
receive it <bcp14>MAY</bcp14> introduce jitter to prevent many endpoints from updating
simultaneously.</t>
          <t>If the EXPIRES parameter is 0 or is not present in a message, the 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) is a Location. It <bcp14>MAY</bcp14> appear
in SUBSCRIBE_OK, PUBLISH, REQUEST_UPDATE_OK, or TRACK_STATUS_OK.
It contains the largest Location (see <xref target="location-structure"/>) 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>
          <t>A relay <bcp14>MUST</bcp14> set LARGEST_OBJECT to the largest of the following:</t>
          <ol spacing="normal" type="1"><li>
              <t>Any LARGEST_OBJECT value received from the upstream publisher in SUBSCRIBE_OK,
PUBLISH, or REQUEST_UPDATE_OK</t>
            </li>
            <li>
              <t>The largest Location of an Object received on an upstream subscription</t>
            </li>
          </ol>
        </section>
        <section anchor="forward-parameter">
          <name>FORWARD Parameter</name>
          <t>The FORWARD parameter (Parameter Type 0x10) is a uint8. It <bcp14>MAY</bcp14> appear in
SUBSCRIBE, REQUEST_UPDATE (for a subscription), PUBLISH, PUBLISH_OK and
SUBSCRIBE_TRACKS. It specifies 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) is a varint. It <bcp14>MAY</bcp14> appear
in PUBLISH_OK, SUBSCRIBE or REQUEST_UPDATE for a subscription.  It represents the largest Group
ID in the Track known by the subscriber, plus 1. A value of 0 indicates that the
subscriber has no Group information for the Track.  A subscriber <bcp14>MUST NOT</bcp14> send
this parameter in PUBLISH_OK or REQUEST_UPDATE if the Track did not
include the DYNAMIC_GROUPS Property with value 1.  A subscriber <bcp14>MAY</bcp14>
include this parameter in SUBSCRIBE without foreknowledge of support.  If the
original publisher does not support dynamic Groups, it ignores the parameter 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, achieving a minimum duration for
each Group. The Original Publisher chooses the next Group ID; there are no
requirements that it be equal to the NEW_GROUP_REQUEST parameter value.</t>
          <t>Relay Handling:</t>
          <t>A relay that receives a NEW_GROUP_REQUEST for a Track without an <tt>Established</tt>
subscription <bcp14>MUST</bcp14> include the NEW_GROUP_REQUEST when subscribing upstream.</t>
          <t>A relay that receives a NEW_GROUP_REQUEST for an <tt>Established</tt> subscription with a
value of 0 or a value larger than the Largest Group <bcp14>MUST</bcp14> send a REQUEST_UPDATE
including the NEW_GROUP_REQUEST to the publisher unless:</t>
          <ol spacing="normal" type="1"><li>
              <t>The Track does not support dynamic Groups</t>
            </li>
            <li>
              <t>There is already an outstanding NEW_GROUP_REQUEST from this Relay with a
greater or equal value</t>
            </li>
          </ol>
          <t>If a relay receives a NEW_GROUP_REQUEST with a non-zero value less than or equal
to the Largest Group, it does not send a NEW_GROUP_REQUEST upstream.</t>
          <t>After sending a NEW_GROUP_REQUEST upstream, the request is considered
outstanding until the Largest Group increases.</t>
        </section>
        <section anchor="track-namespace-prefix-param">
          <name>TRACK_NAMESPACE_PREFIX Parameter</name>
          <t>The TRACK_NAMESPACE_PREFIX parameter (Parameter Type 0x34) uses the Track
Namespace encoding described in <xref target="track-name"/>.  It <bcp14>MAY</bcp14> appear in REQUEST_UPDATE
for a SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS request.  It updates the Track
Namespace Prefix for that subscription.  If the new prefix would share a common prefix with
another active subscription of the same type in the same session, the receiver
<bcp14>MUST</bcp14> respond with REQUEST_ERROR with error code <tt>PREFIX_OVERLAP</tt>.</t>
        </section>
      </section>
      <section anchor="message-setup">
        <name>SETUP</name>
        <t>The <tt>SETUP</tt> message is the first message each endpoint sends on its control
stream (see <xref target="session-init"/>); it allows the endpoints to agree on the initial
configuration before any other control messages are exchanged. An endpoint that
is not offering extensions which modify control message semantics <bcp14>MAY</bcp14> pipeline
other control messages after SETUP without waiting for the peer's SETUP.</t>
        <t>The messages contain a sequence of key-value pairs called Setup Options; the
semantics and format of which can vary based on whether the client or server is
sending.  To ensure future extensibility of MOQT, endpoints <bcp14>MUST</bcp14> ignore unknown
Setup Options.</t>
        <t>The wire format of the Setup message is as follows:</t>
        <figure anchor="moq-transport-setup-format">
          <name>MOQT SETUP Message</name>
          <artwork><![CDATA[
SETUP Message {
  Type (vi64) = 0x2F00,
  Length (16),
  Setup Options (..) ...,
}
]]></artwork>
        </figure>
        <t>Setup Options are serialized as Key-Value-Pairs <xref target="moq-key-value-pair"/>,
spanning the entire message payload, bounded by the message Length field.
Setup Options use a namespace that is constant across all MOQT versions,
separate from Message Parameters.  Receivers <bcp14>MUST</bcp14> ignore unrecognized Setup
Options.  Senders <bcp14>MUST NOT</bcp14> repeat the same Option Type in a message unless
the option definition explicitly allows multiple instances. Receivers <bcp14>MUST</bcp14>
allow duplicates of unknown Setup Options.</t>
        <t>The available Setup Options are detailed in the next sections.</t>
        <section anchor="setup-options">
          <name>Setup Options</name>
          <section anchor="authority">
            <name>AUTHORITY</name>
            <t>The AUTHORITY option (Option Type 0x05) allows the client to specify the
authority component of the MoQ URI when using native QUIC (<xref target="native-quic"/>).  It <bcp14>MUST
NOT</bcp14> be used by the server, or when WebTransport is used.  When an AUTHORITY
option is received from a server, or when an AUTHORITY option is received
while WebTransport is used, or when an AUTHORITY option is received by a
server but the server does not support the specified authority, the session <bcp14>MUST</bcp14>
be closed with <tt>INVALID_AUTHORITY</tt>.</t>
            <t>The AUTHORITY option follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the AUTHORITY option to the <tt>authority</tt> portion of the
URI. If an AUTHORITY option does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with <tt>MALFORMED_AUTHORITY</tt>.</t>
          </section>
          <section anchor="path">
            <name>PATH</name>
            <t>The PATH option (Option Type 0x01) allows the client to specify the path
of the MoQ URI when using native QUIC (<xref target="native-quic"/>).  It <bcp14>MUST NOT</bcp14> be used by
the server, or when WebTransport is used.  When a PATH 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 option follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the PATH option to the <tt>path-abempty</tt> portion of the
URI; if <tt>query</tt> is present, the client <bcp14>MUST</bcp14> concatenate <tt>?</tt>, followed by
the <tt>query</tt> portion of the URI to the option. If a PATH does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with <tt>MALFORMED_PATH</tt>.</t>
          </section>
          <section anchor="max-auth-token-cache-size">
            <name>MAX_AUTH_TOKEN_CACHE_SIZE</name>
            <t>The MAX_AUTH_TOKEN_CACHE_SIZE option (Option Type 0x04) communicates the
maximum size in bytes of all actively registered Authorization tokens that the
endpoint is willing to store per Session. This option is optional. The default
value is 0 which prohibits the use of token Aliases.</t>
            <t>The token size is calculated as 16 bytes + the size of the Token Value field
(see <xref target="moq-token"/>). The total size as restricted by the
MAX_AUTH_TOKEN_CACHE_SIZE option is calculated as the sum of the token sizes
for all registered tokens (Alias Type value of 0x01) minus the sum of the token
sizes for all deregistered tokens (Alias Type value of 0x00), since Session
initiation.</t>
          </section>
          <section anchor="setup-auth-token">
            <name>AUTHORIZATION TOKEN</name>
            <t>The AUTHORIZATION TOKEN Setup Option (Option Type 0x03) is functionally
equivalent to the AUTHORIZATION TOKEN message parameter, see <xref target="authorization-token"/>.
The endpoint can specify one or more tokens in SETUP
that the peer can use to authorize MOQT session establishment.</t>
            <t>If an endpoint receives an AUTHORIZATION TOKEN option in SETUP with Alias
Type REGISTER that exceeds its MAX_AUTH_TOKEN_CACHE_SIZE, it <bcp14>MUST NOT</bcp14> fail
the session with <tt>AUTH_TOKEN_CACHE_OVERFLOW</tt>.  Instead, it <bcp14>MUST</bcp14> treat the
option as Alias Type USE_VALUE.  Since each endpoint's SETUP may be sent before
the peer's SETUP is received, the sender <bcp14>MUST</bcp14> handle registration failures
of this kind by purging any Token Aliases that failed to register based on the
peer's MAX_AUTH_TOKEN_CACHE_SIZE option in SETUP (or the default value of 0).</t>
          </section>
          <section anchor="moqt-implementation">
            <name>MOQT IMPLEMENTATION</name>
            <t>The MOQT_IMPLEMENTATION option (Option Type 0x07) identifies the name and
version of the sender's MOQT implementation.  This <bcp14>SHOULD</bcp14> be a UTF-8 encoded
string <xref target="RFC3629"/>, though the message does not carry information, such as
language tags, that would aid comprehension by any entity other than the one
that created the text.</t>
            <t>An endpoint <bcp14>SHOULD</bcp14> send a MOQT_IMPLEMENTATION option unless specifically
configured not to do so. This option helps identify the scope of interoperability
problems and work around implementation-specific limitations.</t>
            <t>Senders <bcp14>SHOULD</bcp14> limit the value to the implementation name and version, avoiding
advertising or other nonessential information. Implementations <bcp14>SHOULD NOT</bcp14> use
the identifiers of other implementations to declare compatibility, as this
undermines the usefulness of implementation identification for debugging.</t>
          </section>
        </section>
      </section>
      <section anchor="message-goaway">
        <name>GOAWAY</name>
        <t>An endpoint sends a <tt>GOAWAY</tt> message on its control stream to inform the peer
it intends to close the session soon.  When sent by a server, it can initiate
session migration (<xref target="session-migration"/>) with an optional URI.  A client <bcp14>MUST</bcp14>
send a zero-length New Session URI in any GOAWAY, as clients cannot instruct
servers to initiate connections.</t>
        <t>A <tt>GOAWAY</tt> <bcp14>MAY</bcp14> also be sent on a request stream to initiate migration of
that individual request.  Upon receiving a GOAWAY on a request stream, the
endpoint <bcp14>SHOULD</bcp14> re-issue that specific request on a session at the specified
URI (or the current session if no URI is provided), and close the old request
stream using the appropriate mechanism (e.g. FIN, stream reset, or PUBLISH_DONE).</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 on the control stream, an endpoint <bcp14>SHOULD NOT</bcp14> initiate new requests to the
peer including SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS and TRACK_STATUS.</t>
        <t>Sending a GOAWAY does not prevent the sender from initiating new requests,
though the sender <bcp14>SHOULD</bcp14> avoid initiating requests unless required by migration
(see (<xref target="graceful-subscriber-switchover"/> and <xref target="graceful-publisher-switchover"/>).
An endpoint that receives a GOAWAY <bcp14>MAY</bcp14> reject new requests with an appropriate
error code (e.g., REQUEST_ERROR with error code GOING_AWAY).</t>
        <t>The endpoint <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>
(<xref target="session-termination"/>) if it receives more than one GOAWAY on the
control stream or on a single request stream.</t>
        <figure anchor="moq-transport-goaway-format">
          <name>MOQT GOAWAY Message</name>
          <artwork><![CDATA[
GOAWAY Message {
  Type (vi64) = 0x10,
  Length (16),
  New Session URI Length (vi64),
  New Session URI (..),
  Timeout (vi64),
  [Request ID (vi64)],
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>New Session URI: When received by a client, indicates where the client can
connect to continue this session or re-issue this request.  The client <bcp14>MUST</bcp14>
use this URI for the new session if provided. If the URI is zero bytes long,
the current URI is reused instead. The new session URI <bcp14>SHOULD</bcp14> use the same scheme
as the current URI to ensure compatibility.  The maximum length of the New
Session URI is 8,192 bytes.  If an endpoint receives a length exceeding the
maximum, it <bcp14>MUST</bcp14> close the session with 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>
          <li>
            <t>Timeout: The time in milliseconds the sender will wait for graceful closure.
When sent on the control stream, the sender closes the session with
<tt>GOAWAY_TIMEOUT</tt> after the indicated timeout if there are still open requests.
When sent on a request stream, the sender <bcp14>SHOULD</bcp14> reset the stream with
<tt>GOING_AWAY</tt> after the indicated timeout.  A value of 0 indicates the sender has no
specific timeout, but the recipient <bcp14>SHOULD</bcp14> migrate as quickly as
possible. This is a hint; the sender of the GOAWAY <bcp14>MAY</bcp14> close the session or
reset the request stream before the indicated timeout has elapsed.</t>
          </li>
          <li>
            <t>Request ID: Present only when sent on the control stream.  The smallest peer
Request ID that was not or might not have been processed prior to sending the
GOAWAY. If no requests have been processed, this is 0 (at a server) or 1 (at a
client). If the parity of the Request ID does not match the receiver's parity,
the endpoint <bcp14>MUST</bcp14> close the session with <tt>INVALID_REQUEST_ID</tt>. Requests with a
Request ID equal to or greater than the indicated value, as well as any
requests that arrive after the GOAWAY, <bcp14>MUST</bcp14> be rejected with REQUEST_ERROR
using error code GOING_AWAY. Requests with a Request ID less than the indicated
value were or might have been processed; their status can be determined from
the response on each request stream.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-ok">
        <name>REQUEST_OK</name>
        <t>The REQUEST_OK message is sent in response to PUBLISH, REQUEST_UPDATE,
TRACK_STATUS, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS and PUBLISH_NAMESPACE
requests.</t>
        <t>This document uses the shorthand PUBLISH_OK,
REQUEST_UPDATE_OK, TRACK_STATUS_OK, SUBSCRIBE_NAMESPACE_OK, and
PUBLISH_NAMESPACE_OK to refer to a REQUEST_OK sent in response to the
corresponding request type.</t>
        <figure anchor="moq-transport-request-ok">
          <name>MOQT REQUEST_OK Message</name>
          <artwork><![CDATA[
REQUEST_OK Message {
  Type (vi64) = 0x7,
  Length (16),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>. The
length of Track Properties is the remaining length of the message
after parsing all previous fields. Track Properties are populated in
TRACK_STATUS_OK; they are empty in PUBLISH_OK, REQUEST_UPDATE_OK,
SUBSCRIBE_NAMESPACE_OK and PUBLISH_NAMESPACE_OK.  If an endpoint
receives Track Properties in one of these messages it <bcp14>MUST</bcp14> close the
session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-error">
        <name>REQUEST_ERROR</name>
        <t>The REQUEST_ERROR message is sent in response to any request (SUBSCRIBE, FETCH,
PUBLISH, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS, PUBLISH_NAMESPACE, TRACK_STATUS,
REQUEST_UPDATE).</t>
        <section anchor="redirect-structure">
          <name>Redirect Structure</name>
          <t>A Redirect provides a way for an endpoint to direct the peer to retry a
request at a different URI and/or for a different Full Track Name.</t>
          <artwork><![CDATA[
Redirect {
  Connect URI Length (vi64),
  Connect URI (..),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Connect URI: The URI to connect to for this track. If the length is
zero, the requester <bcp14>SHOULD</bcp14> use the current session's URI. If a server
receives a Redirect with a non-zero Connect URI Length it <bcp14>MUST</bcp14> close the
session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            </li>
            <li>
              <t>Track Namespace and Track Name: The Track Namespace and Track Name to use
for the redirected request. If both have zero length, the redirected request
uses the same values as the original request. Otherwise, Track Namespace and
Track Name are the literal values for the redirected request.  </t>
              <t>
Track Name is not meaningful for namespace-scoped requests
(SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE) and <bcp14>MUST</bcp14> be empty; an endpoint that
receives a non-empty Track Name in a Redirect for a namespace-scoped request
<bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            </li>
          </ul>
        </section>
        <section anchor="requesterror-message-format">
          <name>REQUEST_ERROR Message Format</name>
          <figure anchor="moq-transport-request-error">
            <name>MOQT REQUEST_ERROR Message</name>
            <artwork><![CDATA[
REQUEST_ERROR Message {
  Type (vi64) = 0x5,
  Length (16),
  Error Code (vi64),
  Retry Interval (vi64),
  Error Reason (Reason Phrase),
  [Redirect (Redirect),]
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Error Code: Identifies an integer error code for request failure.</t>
            </li>
            <li>
              <t>Retry Interval: The minimum time (in milliseconds) before the request <bcp14>SHOULD</bcp14> be
sent again, plus one. If the value is 0, the request <bcp14>SHOULD NOT</bcp14> be retried.</t>
            </li>
            <li>
              <t>Error Reason: Provides a text description of the request error. See
 <xref target="reason-phrase"/>.</t>
            </li>
            <li>
              <t>Redirect: Present only when Error Code is REDIRECT. See
<xref target="redirect-structure"/>.</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>GOING_AWAY:</dt>
            <dd>
              <t>The endpoint has received a GOAWAY and <bcp14>MAY</bcp14> reject new requests.</t>
            </dd>
            <dt>EXCESSIVE_LOAD:</dt>
            <dd>
              <t>The responder is overloaded and cannot process the request at this time. The
sender <bcp14>SHOULD</bcp14> use the Retry Interval to indicate when the request can be retried.</t>
            </dd>
            <dt>UNSUPPORTED_EXTENSION:</dt>
            <dd>
              <t>The track contains a Mandatory Track Property
(see <xref target="mandatory-track-properties"/>) that the endpoint does not understand.</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>
            <dt>REDIRECT:</dt>
            <dd>
              <t>The request cannot be fulfilled by this endpoint, but could succeed at the
location specified in the Redirect structure. The requester <bcp14>SHOULD</bcp14> establish a
new session to the provided URI (if present) and retry the request using the
Full Track Name from the Redirect (if present). This error code can appear in
response to SUBSCRIBE, FETCH, TRACK_STATUS, PUBLISH_NAMESPACE and
SUBSCRIBE_NAMESPACE. Relays are not required to follow redirects from upstream
and <bcp14>MAY</bcp14> forward a REDIRECT response to matching downstream requests. A relay
<bcp14>MAY</bcp14> cache a REDIRECT response for a Full Track Name for up to Retry Interval
milliseconds and use it to respond to subsequent matching requests without
forwarding them upstream.</t>
            </dd>
          </dl>
          <t>Below are errors for use by the publisher. They can appear in response to
SUBSCRIBE, FETCH, TRACK_STATUS, SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS,
unless otherwise noted.</t>
          <dl>
            <dt>DOES_NOT_EXIST:</dt>
            <dd>
              <t>The track or namespace is not available at the publisher.</t>
            </dd>
            <dt>INVALID_RANGE:</dt>
            <dd>
              <t>In response to SUBSCRIBE or FETCH, specified Filter or range of Locations
cannot be satisfied.</t>
            </dd>
            <dt>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 or SUBSCRIBE_TRACKS, the namespace prefix
shares a common prefix with another subscription of the same type in the same session.
SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS have independent overlap spaces, so a
SUBSCRIBE_NAMESPACE and a SUBSCRIBE_TRACKS may share the same prefix.</t>
            </dd>
            <dt>NAMESPACE_TOO_LARGE:</dt>
            <dd>
              <t>In response to SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS, the namespace prefix
matches more publishers than the relay is willing to enumerate.</t>
            </dd>
            <dt>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>
      <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 (vi64) = 0x3,
  Length (16),
  Request ID (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-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>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A publisher sends a SUBSCRIBE_OK as the first response message on the
bidi stream for successful subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK Message {
  Type (vi64) = 0x4,
  Length (16),
  Track Alias (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-update">
        <name>REQUEST_UPDATE</name>
        <t>The sender of a request (SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS) can later send a REQUEST_UPDATE on the
same bidi stream as the request to modify it.  A subscriber can also send
REQUEST_UPDATE to modify parameters of a subscription established with PUBLISH.</t>
        <t>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 (vi64) = 0x2,
  Length (16),
  Request ID (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</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_UPDATE_OK will include the
LARGEST_OBJECT parameter, and the subscriber
can issue a FETCH to retrieve the omitted Objects, if any.</t>
          <t>When a subscriber narrows their subscription (increase the Start Location and/or
decrease the End Group), it might still receive Objects outside the
new range if the publisher sent them before the update was processed.</t>
          <t>When a REQUEST_UPDATE is unsuccessful, the publisher <bcp14>MUST</bcp14> also terminate
the subscription by sending a
PUBLISH_DONE with error code <tt>UPDATE_FAILED</tt>. When a REQUEST_UPDATE fails for
a FETCH, the publisher <bcp14>MUST</bcp14> reset the FETCH data stream. When a REQUEST_UPDATE
fails for a SUBSCRIBE_NAMESPACE or PUBLISH_NAMESPACE, the responder <bcp14>MUST</bcp14> close
the bidi stream.</t>
          <t>A receiver of multiple REQUEST_UPDATE messages on the same stream <bcp14>MAY</bcp14>
coalesce their processing by applying only the cumulative result.
Parameter values from later REQUEST_UPDATE messages override values
from earlier ones. The receiver <bcp14>MUST</bcp14> still send a REQUEST_OK for
each successful update, but it is not required to process
intermediate states individually. If the coalesced REQUEST_UPDATE
results in REQUEST_ERROR, only a single REQUEST_ERROR will be
sent and the sender of the REQUEST_UPDATEs will not always be
able to determine which caused an error.</t>
        </section>
        <section anchor="updating-namespace-subscriptions">
          <name>Updating Namespace Subscriptions</name>
          <t>A subscriber can update the Track Namespace Prefix of an established
SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS by including the
TRACK_NAMESPACE_PREFIX parameter (<xref target="track-namespace-prefix-param"/>) in a
REQUEST_UPDATE.  The overlap restriction applies independently per type: the
new prefix <bcp14>MUST NOT</bcp14> share a common prefix with any other active
SUBSCRIBE_NAMESPACE (for a SUBSCRIBE_NAMESPACE update) or SUBSCRIBE_TRACKS
(for a SUBSCRIBE_TRACKS update) in the same session.  If the update is
accepted, NAMESPACE and NAMESPACE_DONE messages following the
REQUEST_OK will contain Track Namespace suffixes relative to the
updated prefix.  Updating the prefix of a SUBSCRIBE_TRACKS has
no effect on existing subscriptions.  If the subscriber is no longer
interested it can cancel the corresponding bidirectional stream.</t>
        </section>
      </section>
      <section anchor="message-publish">
        <name>PUBLISH</name>
        <t>The publisher sends PUBLISH as the first message on a new bidirectional stream
to initiate a subscription for a Track. The receiver verifies the publisher is
authorized to publish this track.</t>
        <figure anchor="moq-transport-publish-format">
          <name>MOQT PUBLISH Message</name>
          <artwork><![CDATA[
PUBLISH Message {
  Type (vi64) = 0x1D,
  Length (16),
  Request ID (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Track Alias (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in (<xref target="track-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"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
        <t>A subscriber receiving a PUBLISH for a Track it does not wish to receive <bcp14>SHOULD</bcp14>
send 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-done">
        <name>PUBLISH_DONE</name>
        <t>A publisher sends a <tt>PUBLISH_DONE</tt> message as the final message before
closing the subscription's bidi stream to indicate it is done publishing Objects
for that subscription.  The Status Code indicates why the subscription
ended, and whether it was an error. Because PUBLISH_DONE is sent on a 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 timeouts (see <xref target="delivery-timeouts"/>).</t>
        <t>A sender <bcp14>MUST NOT</bcp14> send PUBLISH_DONE until it has closed all streams it will ever
open, and has no further datagrams to send, for a subscription. After sending
PUBLISH_DONE, the sender can immediately destroy subscription state, although
stream state can persist until delivery completes. The sender might persist
subscription state to enforce the subgroup delivery timeout.</t>
        <t>A sender <bcp14>MUST NOT</bcp14> destroy subscription state until it sends PUBLISH_DONE, though
it can choose to stop sending objects (and thus send PUBLISH_DONE) for any
reason. A sender <bcp14>SHOULD</bcp14> send FIN on the subscription's bidi stream immediately
after sending PUBLISH_DONE.</t>
        <t>A subscriber that receives PUBLISH_DONE <bcp14>SHOULD</bcp14> set a timer of at least the
larger of SUBGROUP_DELIVERY_TIMEOUT or OBJECT_DELIVERY_TIMEOUT in case some
objects are still inbound due to prioritization or packet loss. The subscriber
<bcp14>MAY</bcp14> dispense with a timer if it unsubscribed or is otherwise no longer
interested in objects from the track. Once the timer has expired, the receiver
destroys subscription state once all open streams for the subscription have
closed. A subscriber <bcp14>MAY</bcp14> discard subscription state earlier, at the cost of
potentially not delivering some late objects to the application.  The
subscriber <bcp14>SHOULD</bcp14> send STOP_SENDING on all streams related to the subscription
when it deletes subscription state.</t>
        <t>The format of <tt>PUBLISH_DONE</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-fin-format">
          <name>MOQT PUBLISH_DONE Message</name>
          <artwork><![CDATA[
PUBLISH_DONE Message {
  Type (vi64) = 0xB,
  Length (16),
  Status Code (vi64),
  Stream Count (vi64),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Status Code: An integer status code indicating why the subscription ended.</t>
          </li>
          <li>
            <t>Stream Count: An integer indicating the number of data streams the publisher
opened for this subscription, including streams that contained no Objects (e.g.,
an empty Subgroup).  This helps the subscriber know if it has received
all of the data published in this subscription by comparing the number of
streams received.  The subscriber can immediately remove all subscription state
once the same number of streams have been processed.  If the publisher did not open any streams
for this subscription, the publisher <bcp14>MUST</bcp14> set Stream Count to 0.  If
the publisher is unable to set Stream Count to the exact number of streams
opened for the subscription, it <bcp14>MUST</bcp14> set Stream Count to 2^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>TOO_FAR_BEHIND (0x5):</dt>
          <dd>
            <t>The publisher's queue of objects to be sent to the given subscriber exceeds
its implementation defined limit.</t>
          </dd>
          <dt>EXPIRED (0x6):</dt>
          <dd>
            <t>The publisher reached the timeout specified in SUBSCRIBE_OK.</t>
          </dd>
          <dt>MALFORMED_TRACK (0x12):</dt>
          <dd>
            <t>A relay publisher detected that the track was malformed (see
<xref target="malformed-tracks"/>).</t>
          </dd>
          <dt>UPDATE_FAILED (0x8):</dt>
          <dd>
            <t>REQUEST_UPDATE failed on this subscription (see
<xref target="message-request-update"/>).</t>
          </dd>
          <dt>EXCESSIVE_LOAD (0x9):</dt>
          <dd>
            <t>The publisher is overloaded and is terminating the subscription.</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-fetch">
        <name>FETCH</name>
        <t>A subscriber sends FETCH as the first message on a new bidi stream to a
publisher to request a range of already published objects within a track.</t>
        <t>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 (vi64),
  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. Because Joining Fetch references an existing
subscription, if that subscription has not yet been established, the Publisher
receiving the Joining Fetch buffers the pending Joining Fetch until either
the Subscription is established or the request times out.</t>
          <t>A publisher receiving a Joining Fetch uses properties of the associated
subscription to determine the Track Namespace, Track Name
and End Location such that it is contiguous with the associated
subscription.  The subscriber can set the Start Location to an absolute
Location or a Location relative to the Largest 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 subscription has
Forward State 1; otherwise the publisher <bcp14>MUST</bcp14> respond with a
REQUEST_ERROR with error code <tt>INVALID_RANGE</tt>. A publisher <bcp14>MUST</bcp14> process
any pending REQUEST_UPDATE
messages for the associated subscription before evaluating the current
request. Relays with an upstream subscription in transition from Forward State 0
to 1 can either send a Joining Fetch upstream or buffer the Joining Fetch until
the upstream subscription returns REQUEST_UPDATE_OK with the new Largest Object.
Changing the Forward State of the associated subscription to 0 after the Joining
Fetch has been accepted has no effect on the Joining Fetch.</t>
          <t>If no Objects have been published for the track 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 (vi64),
  Joining Start (vi64)
}
]]></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 determine the Start
Location, described below.</t>
            </li>
          </ul>
          <section anchor="joining-fetch-range-calculation">
            <name>Joining Fetch Range Calculation</name>
            <t>The Joining 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
{Joining Location.Group, Joining Location.Object + 1} (see <xref target="subscriptions"/>.</t>
            <t>Note: the last Object included in the Joining FETCH response is the Object
at the Joining 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
{Joining 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 (vi64) = 0x16,
  Length (16),
  Request ID (vi64),
  Fetch Type (vi64),
  [Standalone (Standalone Fetch),]
  [Joining (Joining Fetch),]
  Number of Parameters (vi64),
  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 larger than the Largest Object will not be retrieved by a FETCH.  If the
requested End Location exceeds the Largest available Object, the actual end of
the FETCH response is indicated in the FETCH_OK End Location.</t>
          <t>If no Objects have been published for the track or 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 (<xref target="stream-reset-codes"/>), 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 as the first message on the bidi stream in response
to a successful fetch. 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 (vi64) = 0x18,
  Length (16),
  End Of Track (8),
  End Location (Location),
  Number of Parameters (vi64),
  Parameters (..) ...
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <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 end of the range covered by the FETCH response,
using the same encoding as the FETCH request End Location (the last
Object, plus 1; or 0 to indicate the entire Group).
This is the End Location from the FETCH request unless
the requested range extends beyond published data:
            </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}
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 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 Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status">
        <name>TRACK_STATUS</name>
        <t>A potential subscriber sends <tt>TRACK_STATUS</tt> as the first and only message on a
new bidi stream to obtain information about the current status of a given track.</t>
        <t>The TRACK_STATUS message format is identical to the SUBSCRIBE message
(<xref target="message-subscribe-req"/>), but subscriber parameters related to Track
delivery (e.g. SUBSCRIBER_PRIORITY) are not included.</t>
        <t>The receiver of a TRACK_STATUS message treats it identically as if it had
received a SUBSCRIBE message, except it does not create downstream subscription
state or send any Objects.  If successful, the publisher responds with a
TRACK_STATUS_OK with the same parameters and Track Properties it would have
set in a SUBSCRIBE_OK. Track Alias is not used.  A publisher responds to a
failed TRACK_STATUS with an
appropriate REQUEST_ERROR message.  The bidi stream is closed with a FIN after
TRACK_STATUS_OK or REQUEST_ERROR are sent.</t>
        <t>Relays without an <tt>Established</tt> subscription <bcp14>MAY</bcp14> forward TRACK_STATUS to one or more
publishers, or <bcp14>MAY</bcp14> initiate a subscription (subject to authorization) as
described in <xref target="publisher-interactions"/> to determine the response. The publisher
does not send PUBLISH_DONE for this request, and the subscriber cannot send
REQUEST_UPDATE.</t>
      </section>
      <section anchor="message-pub-ns">
        <name>PUBLISH_NAMESPACE</name>
        <t>The publisher sends the PUBLISH_NAMESPACE message as the first message on a
new bidi stream to advertise that it has tracks available 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 (vi64) = 0x6,
  Length (16),
  Request ID (vi64),
  Track Namespace (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies 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' <xref target="message-subscribe-ns"/>.</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 <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-ns">
        <name>SUBSCRIBE_NAMESPACE</name>
        <t>The subscriber sends a SUBSCRIBE_NAMESPACE control message on a new
bidirectional stream to a publisher to request the current set of matching
published namespaces, as well as future updates to the set.</t>
        <figure anchor="moq-transport-subscribe-ns-format">
          <name>MOQT SUBSCRIBE_NAMESPACE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE Message {
  Type (vi64) = 0x50,
  Length (16),
  Request ID (vi64),
  Track Namespace Prefix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: A Track Namespace structure as described in
<xref target="track-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 32 Track Namespace
Fields, it <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>
        </ul>
        <t>The publisher will respond with REQUEST_OK or REQUEST_ERROR on the response half
of the stream. If the subscriber receives any message other than a REQUEST_OK or a
REQUEST_ERROR as the first message on the response half of the stream, then it <bcp14>MUST</bcp14>
close the session with a PROTOCOL_VIOLATION. If the SUBSCRIBE_NAMESPACE is
successful, the publisher will send matching NAMESPACE messages on the response
stream. If it is an error, the stream will be immediately closed via FIN. When
there are changes to the namespaces being published and the subscriber is
subscribed to them, the publisher sends the corresponding NAMESPACE or
NAMESPACE_DONE messages.</t>
        <t>Within a session, if a publisher receives a SUBSCRIBE_NAMESPACE with a
Track Namespace Prefix that shares a common prefix with an established
SUBSCRIBE_NAMESPACE, it <bcp14>MUST</bcp14> respond with REQUEST_ERROR with error code
<tt>PREFIX_OVERLAP</tt>.  SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS have independent
overlap spaces (see <xref target="message-subscribe-tracks"/>).</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</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>
        <t>If the publisher is unable to send NAMESPACE or NAMESPACE_DONE messages in a
timely manner because the SUBSCRIBE_NAMESPACE response stream is blocked by flow
control, the publisher <bcp14>MAY</bcp14> reset the SUBSCRIBE_NAMESPACE response stream.  When
a subscriber receives a stream reset or FIN on a SUBSCRIBE_NAMESPACE response
stream, it <bcp14>SHOULD</bcp14> treat this as though each active namespace received a
NAMESPACE_DONE. Subscriptions established via PUBLISH on separate bidi streams
are not affected by closure of the SUBSCRIBE_NAMESPACE stream.</t>
      </section>
      <section anchor="message-subscribe-tracks">
        <name>SUBSCRIBE_TRACKS</name>
        <t>The subscriber sends a SUBSCRIBE_TRACKS control message on a new bidirectional
stream to a publisher to request PUBLISH messages for all tracks within matching
namespaces, as well as future track publications within those namespaces.</t>
        <figure anchor="moq-transport-subscribe-tracks-format">
          <name>MOQT SUBSCRIBE_TRACKS Message</name>
          <artwork><![CDATA[
SUBSCRIBE_TRACKS Message {
  Type (vi64) = 0x51,
  Length (16),
  Request ID (vi64),
  Track Namespace Prefix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: A Track Namespace structure as described in
<xref target="track-name"/> with between 0 and 32 Track Namespace Fields.  This prefix is
matched against track namespaces known to the publisher.  If an endpoint
receives a Track Namespace Prefix consisting of greater than 32 Track
Namespace Fields, it <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>
        </ul>
        <t>The publisher will respond with REQUEST_OK or REQUEST_ERROR on the response half
of the stream. If the subscriber receives any message other than a REQUEST_OK or a
REQUEST_ERROR as the first message on the response half of the stream, then it <bcp14>MUST</bcp14>
close the session with a PROTOCOL_VIOLATION. If the SUBSCRIBE_TRACKS is
successful, the publisher will send PUBLISH messages on new bidirectional streams
for tracks within matching namespaces. If it is an error, the stream will be
closed via FIN after REQUEST_ERROR is sent.</t>
        <t>Within a session, if a publisher receives a SUBSCRIBE_TRACKS with a
Track Namespace Prefix that shares a common prefix with an established
SUBSCRIBE_TRACKS, it <bcp14>MUST</bcp14> respond with REQUEST_ERROR with error code
<tt>PREFIX_OVERLAP</tt>.  SUBSCRIBE_TRACKS and SUBSCRIBE_NAMESPACE have independent
overlap spaces (see <xref target="message-subscribe-ns"/>).</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</t>
        <t>SUBSCRIBE_TRACKS is not required for a publisher to send PUBLISH messages to
a subscriber.  It is useful for subscribers that are
only interested in or authorized to access a subset of available 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_TRACKS 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_TRACKS will
set the FORWARD parameter to 1, or indicate that value by omitting the parameter
(see <xref target="subscriptions"/>).</t>
      </section>
      <section anchor="message-publish-blocked">
        <name>PUBLISH_BLOCKED</name>
        <t>The publisher sends the <tt>PUBLISH_BLOCKED</tt> control message to indicate it cannot
send a PUBLISH message to initiate a new Subscription for a Track in the
SUBSCRIBE_TRACKS's Track Namespace. All PUBLISH_BLOCKED messages are in
response to a SUBSCRIBE_TRACKS, so only the namespace tuples after the
'Track Namespace Prefix' are included in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-publish-blocked-format">
          <name>MOQT PUBLISH_BLOCKED Message</name>
          <artwork><![CDATA[
PUBLISH_BLOCKED Message {
  Type (vi64) = 0xF,
  Length (16),
  Track Namespace Suffix (..),
  Track Name Length (vi64),
  Track Name (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-name"/>. The namespace begins with the
'Track Namespace Prefix' specified in <xref target="message-subscribe-tracks"/>.</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="data-streams">
      <name>Data Streams and Datagrams</name>
      <t>A publisher sends Objects matching a subscription on Data Streams or Datagrams
and sends Objects matching a FETCH request on one Data Stream.</t>
      <t>Unidirectional stream types are defined in <xref target="stream-types"/>. Data streams
use SUBGROUP_HEADER or FETCH_HEADER types.</t>
      <t>All MOQT datagrams start with a variable-length integer indicating the type of
the datagram.  See <xref target="object-datagram"/>.</t>
      <t>An endpoint that receives an unknown datagram type <bcp14>MUST</bcp14> close the session.</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>The same Track Alias <bcp14>MUST NOT</bcp14> be used by a publisher to refer to two different
Tracks simultaneously in the same session. If a subscriber receives a
PUBLISH or SUBSCRIBE_OK that uses the same Track Alias as a different Track
with an <tt>Established</tt> subscription, it <bcp14>MUST</bcp14> close the session with error
<tt>DUPLICATE_TRACK_ALIAS</tt>.</t>
        <t>Objects can 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-header">
          <name>Object Header</name>
          <t>A canonical MOQT Object has the following fields:</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 Properties : A sequence of Properties associated with the object.
See <xref target="object-properties"/>.</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-properties">
            <name>Object Properties</name>
            <t>Any Object with status Normal can have properties (<xref target="properties"/>).
If an endpoint receives properties on an Object with status that is
not Normal, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>Object Properties are visible to relays and are intended to be relevant
to MOQT Object distribution. Any Object metadata never intended to be accessed
by the transport or Relays <bcp14>SHOULD</bcp14> be serialized as part of the Object payload
and not as an Object Property.</t>
            <t>Object Properties are serialized as a length in bytes followed by
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).</t>
            <artwork><![CDATA[
Object Properties {
  Properties Length (vi64),
  Properties (..),
}
]]></artwork>
            <t>Object Property types are registered in the IANA table
'MOQ Properties'. See <xref target="iana"/>.</t>
          </section>
        </section>
      </section>
      <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 Properties
(<xref target="object-properties"/>) can be added to Objects as they pass
through the MOQT network, increasing the size of the Object and the chances it
will exceed the maximum datagram size of a downstream session and be dropped.</t>
        <section anchor="object-datagram">
          <name>Object Datagram</name>
          <t>An <tt>OBJECT_DATAGRAM</tt> carries a single object in a datagram.</t>
          <figure anchor="object-datagram-format">
            <name>MOQT OBJECT_DATAGRAM</name>
            <artwork><![CDATA[
OBJECT_DATAGRAM {
  Type (i) = 0x00..0x0F / 0x20..0x21 / 0x24..0x25 /
             0x28..0x29 / 0x2C..0x2D,
  Track Alias (vi64),
  Group ID (vi64),
  [Object ID (vi64),]
  [Publisher Priority (8),]
  [Properties (..),]
  [Object Status (vi64),]
  [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>PROPERTIES</strong> bit (0x01) indicates when the Properties field is
present. When set to 1, the Object Properties structure defined in
<xref target="object-properties"/> is present. When set to 0, the field is absent.
If an endpoint receives a datagram with the PROPERTIES bit set and an
Properties Length of 0, it <bcp14>MUST</bcp14> close the session with 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 0. When set to 0, the Object ID field is present.</t>
            </li>
            <li>
              <t>The <strong>DEFAULT_PRIORITY</strong> bit (0x08) indicates when the Priority field is
present. When set to 1, the Priority field is omitted and this Object inherits
the Publisher Priority specified in the control message that established the
subscription. When set to 0, the Priority field is present.</t>
            </li>
            <li>
              <t>The <strong>STATUS</strong> bit (0x20) indicates whether the datagram contains an Object
Status or Object Payload. When set to 1, the Object Status field is present
and there is no Object Payload. When set to 0, the Object Payload is present
and the Object Status field is omitted. There is no explicit length field for
the Object Payload; the entirety of the transport datagram following the
Object header contains the payload.</t>
            </li>
          </ul>
          <t>The following Type 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>
          <t>If an Object Datagram includes both the STATUS bit and PROPERTIES bit, and the
Object Status is not Normal (0x0), the endpoint <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>, because only Normal Objects can have Properties.</t>
        </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 streams <bcp14>MAY</bcp14> be canceled due to congestion
or other reasons by either the publisher or subscriber. Early termination of a
unidirectional stream does not affect the MOQT application state, and therefore has
no effect on outstanding subscriptions. Termination of a bidi request stream
terminates the Subscription, Fetch, Track Status, Publish Namespace, or Subscribe Namespace
request. When possible, Publishers <bcp14>SHOULD</bcp14> send a PUBLISH_DONE when terminating a
subscription instead of abruptly terminating the associated control stream.</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, endpoints <bcp14>MUST</bcp14> allocate connection flow
control to the control streams before allocating it to any data streams. Otherwise,
a receiver might wait for a control message containing a Track Alias to release
flow control, while the sender waits for flow control to send the message.</t>
          <figure anchor="object-header-format">
            <name>MOQT SUBGROUP_HEADER</name>
            <artwork><![CDATA[
SUBGROUP_HEADER {
  Type (i) = 0x10..0x15 / 0x18..0x1D / 0x30..0x35 / 0x38..0x3D /
             0x50..0x55 / 0x58..0x5D / 0x70..0x75 / 0x78..0x7D,
  Track Alias (vi64),
  Group ID (vi64),
  [Subgroup ID (vi64),]
  [Publisher Priority (8),]
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>SUBGROUP_HEADER</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>.</t>
          <t>The Type field in the SUBGROUP_HEADER takes the form 0b0XX1XXXX (or the set of
values from 0x10 to 0x1F, 0x30 to 0x3F, 0x50 to 0x5F, 0x70 to 0x7F), where
bit 4 is always set to 1. However, not all Type values in this range are
valid. The four low-order bits and bits 5-6 determine which fields are present
in the header:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>PROPERTIES</strong> bit (0x01) indicates when the Properties field is present
in all Objects in this Subgroup. When set to 1, the Object Properties structure
defined in <xref target="object-properties"/> is present in all Objects. When set to 0, the
field is never present. Objects with no properties set Properties 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 reset.</t>
            </li>
            <li>
              <t>The <strong>DEFAULT_PRIORITY</strong> bit (0x20) indicates when the Priority field is
present. When set to 1, the Priority field is omitted and this Subgroup
inherits the Publisher Priority specified in the control message that
established the subscription. When set to 0, the Priority field is present in
the Subgroup header.</t>
            </li>
            <li>
              <t>The <strong>FIRST_OBJECT</strong> bit (0x40) indicates that the first object in this
subgroup stream is the first object published in the subgroup by the original publisher.</t>
            </li>
          </ul>
          <t>The following Type 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, 0x56, 0x57, 0x5E, 0x5F, 0x76, 0x77, 0x7E, 0x7F. This mode
is reserved for future use.</t>
            </li>
            <li>
              <t>Type values that do not match the form 0b0XX1XXXX (i.e., Type values outside
the ranges 0x10..0x1F, 0x30..0x3F, 0x50..0x5F, and 0x70..0x7F, 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. If the resulting Object ID would be greater
than 2^64 - 1, the endpoint <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>. For example, a Subgroup of sequential Object IDs
starting at 0 will have 0 for all Object ID Delta values. A consumer cannot
infer information about the existence of Objects between the current and
previous Object ID in the Subgroup (e.g. when Object ID Delta is non-zero)
unless there is a Prior Object ID Gap property (see
<xref target="prior-object-id-gap"/>).</t>
          <figure anchor="object-subgroup-format">
            <name>MOQT Subgroup Object Fields</name>
            <artwork><![CDATA[
{
  Object ID Delta (vi64),
  [Properties (..),]
  Object Payload Length (vi64),
  [Object Status (vi64),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
        </section>
        <section anchor="closing-subgroup-streams">
          <name>Closing Subgroup Streams</name>
          <t>Subscribers will often need to know if they have received all objects in a
Subgroup, particularly if they serve as a relay or cache. QUIC and Webtransport
streams provide signals that can be used for this purpose. Closing Subgroups
promptly frees system resources and often unlocks flow control credit to open
more streams.</t>
          <t>If a sender has delivered all objects in a Subgroup to the QUIC stream, except
any Objects with Locations smaller than the subscription's Start Location, it
<bcp14>MUST</bcp14> close the stream with a FIN.</t>
          <t>If a sender closes the stream before delivering all such objects to the QUIC
stream, it <bcp14>MUST</bcp14> reset the stream. This includes, but is
not limited to:</t>
          <ul spacing="normal">
            <li>
              <t>Either of the delivery timeouts defined in <xref target="delivery-timeouts"/></t>
            </li>
            <li>
              <t>Early termination of subscription due to request cancellation</t>
            </li>
            <li>
              <t>A publisher's decision to end the subscription early</t>
            </li>
            <li>
              <t>A REQUEST_UPDATE moving the subscription's End Group to a smaller Group or
the Start Location to a larger Location</t>
            </li>
            <li>
              <t>Omitting a Subgroup Object due to the subscriber'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 subsequent reset.</t>
          <t>If a sender will not deliver any objects from a Subgroup, it <bcp14>MAY</bcp14> send
a SUBGROUP_HEADER on a new stream, with no objects, and then send RESET_STREAM_AT
with a reliable_size equal to the length of the stream header. This explicitly
tells the receiver there is an unsent Subgroup.</t>
          <t>A relay <bcp14>MUST NOT</bcp14> forward an Object on an existing Subgroup stream unless it is
the next Object in that Subgroup.  A relay determines that an Object is the next
Object in the Subgroup if at least one of the following is true:</t>
          <ul spacing="normal">
            <li>
              <t>The Object ID is one greater than the previous Object sent on this Subgroup
stream.</t>
            </li>
            <li>
              <t>The Object was received on the same upstream Subgroup stream as the
previously sent Object on the downstream Subgroup stream, with no other
Objects in between.</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>
reset the stream. Senders <bcp14>SHOULD</bcp14> terminate a stream on
Group boundaries to avoid doing so.</t>
          <t>An MOQT implementation that processes a stream FIN is assured it has received
all objects in a subgroup from the start of the subscription. If a relay, it
can forward stream FINs to its own subscribers once those objects have been
sent. A relay <bcp14>MAY</bcp14> treat receipt of 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 means that there might be other
objects in the Subgroup beyond the last one received. A relay might immediately
reset the corresponding downstream stream, or it might attempt to recover the
missing Objects in an effort to send all the Objects in the subgroups and the FIN.
It also might send RESET_STREAM_AT with reliable_size set to the last Object it
has, so as to reliably deliver the Objects it has while signaling that other
Objects might exist.</t>
          <t>A subscriber <bcp14>MAY</bcp14> send a QUIC STOP_SENDING frame for a subgroup stream if the Group
or Subgroup is no longer of interest to it. The publisher <bcp14>SHOULD</bcp14> respond with
a reset. If RESET_STREAM_AT is sent, note that the receiver
has indicated no interest in the objects, so setting a reliable_size beyond the
stream header is of questionable utility.</t>
          <t>Resets and STOP_SENDING on SUBSCRIBE data streams have no impact on other
Subgroups in the Group or the subscription, although applications might cancel all
Subgroups in a Group at once.</t>
          <t>A publisher that receives a STOP_SENDING on a Subgroup stream <bcp14>SHOULD NOT</bcp14> attempt
to open a new stream to deliver additional Objects in that Subgroup.  However,
if the publisher subsequently receives a REQUEST_UPDATE that changes the Forward
State from 0 to 1, it <bcp14>MAY</bcp14> open a new stream to deliver Objects in that Subgroup,
as the update indicates the subscriber has renewed interest in forwarded Objects.</t>
          <t>The application <bcp14>SHOULD</bcp14> use a relevant error code when resetting a stream,
as defined in <xref target="stream-reset-codes"/>.</t>
        </section>
        <section 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 (vi64) = 0x5,
  Request ID (vi64),
}
]]></artwork>
          </figure>
          <t>Each Object sent on a FETCH stream after the FETCH_HEADER has the following
format:</t>
          <figure anchor="object-fetch-format">
            <name>MOQT Fetch Object Fields</name>
            <artwork><![CDATA[
{
  Serialization Flags (vi64),
  [Group ID Delta (vi64),]
  [Subgroup ID (vi64),]
  [Object ID Delta (vi64),]
  [Publisher Priority (8),]
  [Properties (..),]
  Object Payload Length (vi64),
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Serialization Flags field defines the serialization of the Object.  It is
a variable-length integer.  When less than 128, the bits represent flags described
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 Delta is present</td>
                  <td align="left">Object ID is the prior Object's ID plus one</td>
                </tr>
                <tr>
                  <td align="left">0x08</td>
                  <td align="left">Group ID Delta is present</td>
                  <td align="left">Group ID is the prior Object's Group ID</td>
                </tr>
                <tr>
                  <td align="left">0x10</td>
                  <td align="left">Priority field is present</td>
                  <td align="left">Priority is the prior Object's Priority</td>
                </tr>
                <tr>
                  <td align="left">0x20</td>
                  <td align="left">Properties field is present</td>
                  <td align="left">Properties field is not present</td>
                </tr>
                <tr>
                  <td align="left">0x40</td>
                  <td align="left">Datagram: ignore the two least significant bits</td>
                  <td align="left">Decode the Subgroup ID as indicated by the two least significant bits</td>
                </tr>
              </tbody>
            </table>
            <t>The first Object <bcp14>MUST</bcp14> include a Group ID Delta and Object ID Delta, and
these values are the absolute Group ID and Object ID. If the first Object in
the FETCH response uses a flag that references fields in the prior Object,
the Subscriber <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>If the Group ID Delta field is present on an Object other than the first, the
Group ID is computed from the Group ID Delta and the prior Object's Group ID.
If the Group Order is Ascending, the Group ID is the prior Object's Group ID
plus the Group ID Delta + 1.  If the Group Order is Descending, the Group ID is
the prior Object's Group ID minus the (Group ID Delta + 1). If the computed
Group ID would be less than 0 or greater than 2^64-1, the Subscriber <bcp14>MUST</bcp14>
close the Session with error 'PROTOCOL_VIOLATION'.</t>
            <t>When the Group ID Delta field is present, the Object ID is the value of Object ID Delta if
present. When the Group ID Delta field is not present, the Object ID is the prior Object's ID
plus the Object ID Delta if present. If Object ID Delta is not present, the Object ID is the
prior Object's ID plus one, regardless of which group it belongs to. If the computed Object ID
would be greater than 2^64-1, the Subscriber <bcp14>MUST</bcp14> close the Session with error
'PROTOCOL_VIOLATION'.</t>
            <t>The Object Properties structure is defined in <xref target="object-properties"/>.</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
Properties 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>
            <t>When an Object follows an End of Range indicator and uses flags that reference
the "prior Object", the prior Object fields are determined as follows:</t>
            <ul spacing="normal">
              <li>
                <t>Prior Group ID and prior Object ID: The values from the End of Range indicator.</t>
              </li>
              <li>
                <t>Prior Subgroup ID: The Subgroup ID from the last actual Object before the
End of Range indicator. If there was no prior Object, using a flag that
references the prior Subgroup ID is a <tt>PROTOCOL_VIOLATION</tt>.</t>
              </li>
              <li>
                <t>Prior Priority: The Priority from the last actual Object before the End of
Range indicator. If there was no prior Object, using a flag that references
the prior Priority is a <tt>PROTOCOL_VIOLATION</tt>.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
      <section anchor="padding">
        <name>Padding</name>
        <t>An endpoint <bcp14>MAY</bcp14> send padding on unidirectional streams or datagrams.  Padding
does not carry Objects or any other application data.  An endpoint can use
padding to probe for additional bandwidth while minimizing the impact on the
delivery of application data.</t>
        <t>To avoid interfering with the delivery of Objects, senders <bcp14>SHOULD</bcp14> send padding
streams at a lower priority than any control stream or Object data.</t>
        <section anchor="padding-streams">
          <name>Padding Streams</name>
          <t>An endpoint <bcp14>MAY</bcp14> open a unidirectional stream with a stream type of 0x132B3E28 to send
padding data. The stream begins with the stream type, followed by zero or more
bytes that <bcp14>MUST</bcp14> all be set to zero.</t>
          <figure anchor="padding-format">
            <name>MOQT Padding Stream</name>
            <artwork><![CDATA[
PADDING STREAM {
  Type (vi64) = 0x132B3E28,
  Padding Data (..) = 0x00..
}
]]></artwork>
          </figure>
          <t>The receiver <bcp14>MUST</bcp14> discard all data received on a padding stream to prevent
exhausting flow control.</t>
          <t>Either the sender or the receiver <bcp14>MAY</bcp14> cancel a padding stream at any time
without affecting any MOQT application state.</t>
        </section>
        <section anchor="padding-datagrams">
          <name>Padding Datagrams</name>
          <t>An endpoint <bcp14>MAY</bcp14> send a datagram with a type of 0x132B3E29 to send padding data.
The datagram contains the type followed by zero or more bytes that <bcp14>MUST</bcp14> all be
set to zero.</t>
          <figure anchor="padding-datagram-format">
            <name>MOQT Padding Datagram</name>
            <artwork><![CDATA[
PADDING DATAGRAM {
  Type (vi64) = 0x132B3E29,
  Padding Data (..) = 0x00..
}
]]></artwork>
          </figure>
          <t>The receiver <bcp14>MUST</bcp14> discard all data received in a padding datagram.</t>
        </section>
      </section>
      <section 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
Properties.</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)
  Properties 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)
  Properties Length = 0
  Object Payload Length = 4
  Payload = "efgh"
}

]]></artwork>
      </section>
    </section>
    <section anchor="moqt-properties">
      <name>MOQT Properties</name>
      <t>The following Properties are defined in MOQT. Each Property
specifies whether it can be used with Tracks, Objects, or both.</t>
      <t>Property types in ranges reserved for application-specific use
(0x38-0x3F, 0x3800-0x3FFF) are not defined by MOQT.
See <xref target="properties"/> for usage guidance.</t>
      <section anchor="subgroup-delivery-timeout-ext">
        <name>SUBGROUP_DELIVERY_TIMEOUT</name>
        <t>SUBGROUP_DELIVERY_TIMEOUT (Property Type 0x06) is a Track Property.  It is a
varint.  Its semantics are defined in <xref target="delivery-timeouts"/>.</t>
      </section>
      <section anchor="object-delivery-timeout-ext">
        <name>OBJECT_DELIVERY_TIMEOUT</name>
        <t>OBJECT_DELIVERY_TIMEOUT (Property Type 0x02) is a Track Property.  It is a
varint.  Its semantics are defined in <xref target="delivery-timeouts"/>.</t>
      </section>
      <section anchor="max-cache-duration">
        <name>MAX CACHE DURATION</name>
        <t>MAX_CACHE_DURATION (Property Type 0x04) is a Track Property.</t>
        <t>It is an integer expressing
the number of milliseconds an Object can be served from a cache. If present, the
relay <bcp14>MUST NOT</bcp14> start forwarding any individual Object received through this
subscription or fetch after the specified number of milliseconds has elapsed
since the beginning of the Object was received.  This means Objects earlier in a
multi-object stream will expire earlier than Objects later in the stream. 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 MAX_CACHE_DURATION is not sent by the publisher, the Objects
can be cached until implementation constraints cause them to be evicted.</t>
      </section>
      <section anchor="publisher-priority">
        <name>DEFAULT PUBLISHER PRIORITY</name>
        <t>DEFAULT PUBLISHER PRIORITY (Property Type 0x0E) is a Track Property
that specifies the priority of a subscription relative to other subscriptions
in the same session.  The value is from 0 to 255 and lower numbers get higher
priority.  See <xref target="priorities"/>. Priorities above 255 are invalid. Subgroups and
Datagrams for this subscription inherit this priority, unless they specifically
override it.</t>
        <t>If omitted, the Default Publisher Priority is 128.</t>
      </section>
      <section anchor="group-order-pref">
        <name>DEFAULT PUBLISHER GROUP ORDER</name>
        <t>DEFAULT_PUBLISHER_GROUP_ORDER (Property Type 0x22) is a Track Property.</t>
        <t>It is an enum indicating the publisher's preference for prioritizing Objects
from different groups within the
same subscription (see <xref target="priorities"/>). The allowed values are Ascending (0x1) or
Descending (0x2). If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14>
close the session with <tt>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>DYNAMIC_GROUPS (Property Type 0x30) is a Track Property.
The allowed values are 0 or 1. When the value is 1, it indicates
that the subscriber can request the Original Publisher to start a new Group
by including the NEW_GROUP_REQUEST parameter in 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 anchor="immutable-properties">
        <name>Immutable Properties</name>
        <t>Immutable Properties (Property Type 0xB) is a Track or Object Property that
contains a sequence of Key-Value-Pairs (see <xref target="moq-key-value-pair"/>) that are
themselves Track or Object Properties, respectively.</t>
        <artwork><![CDATA[
Immutable Properties {
  Type (0xB),
  Length (vi64),
  Key-Value-Pair (..) ...
}
]]></artwork>
        <t>This Property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
Relays. This Property <bcp14>MUST NOT</bcp14> be modified or removed and the serialization
(e.g. variable-length integer encodings) of the Key-Value-Pairs <bcp14>MUST NOT</bcp14>
change). Like other Properties, Relays <bcp14>MUST</bcp14> cache Immutable Properties if the
Object or Track are cached and <bcp14>MUST</bcp14> forward it. Relays <bcp14>MAY</bcp14> decode and view
the Properties in the Key-Value-Pairs.</t>
        <t>Unless specified by a particular Property specification, Properties
<bcp14>MAY</bcp14> appear either in the mutable property list or inside Immutable Properties.
When looking for the value of a property, processors <bcp14>MUST</bcp14> search both the
mutable properties and the contents of Immutable Properties.</t>
        <t>If a Property allows multiple values, the same Property Type <bcp14>MAY</bcp14> appear in
both the mutable list and inside Immutable Properties, unless prohibited by
the Property specification.</t>
        <t>A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of the
following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains an Immutable Properties property that contains another
Immutable Properties key.</t>
          </li>
          <li>
            <t>A Key-Value-Pair cannot be parsed.</t>
          </li>
        </ul>
        <t>The following figure shows an example Object structure with a combination of
mutable and immutable properties and end to end encrypted metadata in the Object
payload.</t>
        <artwork><![CDATA[
                   Object Header                      Object Payload
<------------------------------------------------> <------------------->
+--------+-------+------------+-------+-----------+--------------------+
| Object | Ext 1 | Immutable  | Ext N | [Payload] | Private Properties |
| Fields |       | Properties |       | [Length]  | App Payload        |
+--------+-------+------------+-------+-----------+--------------------+
                  xxxxxxxxxxxx                     xxxxxxxxxxxxxxxxxxxx
                                                   yyyyyyyyyyyyyyyyyyyy
x = e2e Authenticated Data
y = e2e Encrypted Data
EXT 1 and EXT N can be modified or removed by Relays
]]></artwork>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
      <section anchor="prior-group-id-gap">
        <name>Prior Group ID Gap</name>
        <t>Prior Group ID Gap only applies to Objects, not Tracks.</t>
        <t>Prior Group ID Gap (Property Type 0x3C) is a variable length integer
containing the number of Groups prior to the current Group that do not and will
never exist. For example, if the Original Publisher is publishing an Object in
Group 7 and knows it will never publish any Objects in Group 8 or Group 9, it
can include Prior Group ID Gap = 2 in any number of Objects in Group 10, as it
sees fit.  A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of
the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Group ID Gap.</t>
          </li>
          <li>
            <t>A Group contains more than one Object with different values for Prior Group
 ID Gap.</t>
          </li>
          <li>
            <t>An Object has a Prior Group ID Gap larger than the Group ID.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Group ID Gap covering an Object
it previously received.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Group ID within a previously
communicated gap.</t>
          </li>
        </ul>
        <t>Use of this property is optional, as publishers might not know the prior gap size,
or there may not be a gap. If Prior Group ID Gap is not present, the receiver
cannot infer any information about the existence of prior groups (see
<xref target="group-ids"/>).</t>
        <t>This property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This property <bcp14>MAY</bcp14> be removed by a relay when the object in question is
served via FETCH, and the gap that the property communicates is already
communicated implicitly in the FETCH response; it <bcp14>MUST NOT</bcp14> be modified or
removed otherwise.</t>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
      <section anchor="prior-object-id-gap">
        <name>Prior Object ID Gap</name>
        <t>Prior Object ID Gap only applies to Objects, not Tracks.</t>
        <t>Prior Object ID Gap (Property Type 0x3E) is a variable length integer
containing the number of Objects prior to the current Object that do not and
will never exist. For example, if the Original Publisher is publishing Object
10 in Group 3 and knows it will never publish Objects 8 or 9 in this Group, it
can include Prior Object ID Gap = 2.  A Track is considered malformed (see
<xref target="malformed-tracks"/>) if any of the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Object ID Gap.</t>
          </li>
          <li>
            <t>An Object has a Prior Object ID Gap larger than the Object ID.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Object ID Gap covering an Object
it previously received.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with an Object ID within a previously
communicated gap.</t>
          </li>
        </ul>
        <t>Use of this property is optional, as publishers might not know the prior gap size,
or there might not be a gap. If Prior Object ID Gap is not present, the receiver
cannot infer any information about the existence of prior objects (see
<xref target="model-object"/>).</t>
        <t>This property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This property <bcp14>MAY</bcp14> be removed by a relay when the object in question is
served via FETCH, and the gap that the property communicates is already
communicated implicitly in the FETCH response; it <bcp14>MUST NOT</bcp14> be modified or
removed otherwise.</t>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>MOQT is a protocol used hop-by-hop between original
publishers to relay, (possibly) relay to relay, and relay to end
subscribers. Thus, the security considerations need to consider first
what happens between two nodes, but also consider the impacts end to
end over several hops of MOQT.</t>
      <t>MOQT uses a trust model where on each hop the nodes need to be
securely identified, authorized to use resources of the peer, provide
confidentiality and integrity to prevent third party attacks and limit
monitoring and leakage of privacy sensitive information. The relays
within the chain from original publisher to end subscribers will have
access to Track names, Track Properties, Object Properties, as well as the object's content
unless it is end-to-end encrypted <xref target="sec-media"/>.</t>
      <t>Publishers, including Relays, require authorization to prevent unauthorized
subscriptions to content. Subscription requests can carry
authorization tokens (see <xref target="sec-authorization"/>) to prove the
subscriber's right to access specific tracks or namespaces. Relays
that aggregate subscriptions from multiple downstream subscribers <bcp14>MUST</bcp14>
ensure each subscriber is independently authorized.</t>
      <section anchor="subscription-amplification">
        <name>Subscription Amplification</name>
        <t>A malicious subscriber could attempt to overwhelm a publisher or relay
by requesting subscriptions to many tracks simultaneously. Relays
<bcp14>SHOULD</bcp14> implement rate limiting on subscription requests and <bcp14>MAY</bcp14> reject
excessive subscriptions with REQUEST_ERROR using the EXCESSIVE_LOAD error code.
Publishers <bcp14>SHOULD</bcp14> monitor
the number of active subscriptions and enforce limits to prevent
resource exhaustion from a single subscriber or session.</t>
        <t>TODO: Describe Cache Poisoning attacks</t>
      </section>
      <section anchor="communication-security">
        <name>Communication Security</name>
        <t>MOQT depends on a secure transport to provide confidentiality,
integrity and endpoint authentication between subscriber and
publisher. Implementations use QUIC or WebTransport to fulfill
the basic communication security requirements and these
implementations <bcp14>SHOULD</bcp14> follow best practices for TLS 1.3 and QUIC.
Relays <bcp14>MUST</bcp14> use authentication to prevent impersonation.</t>
        <t>Note that the basic security protection offered by QUIC or TCP/TLS
does not prevent traffic pattern analysis. Object sizes, sizes of
request messages, etc can make it possible for a third party observer
to identify media content, user patterns and media stream origin.</t>
      </section>
      <section anchor="sec-authorization">
        <name>Authorization</name>
        <t>MOQT supports authorization via mutual TLS for node-level identification
and token-based schemes for fine-grained access control.</t>
        <t>Mutual TLS is expected to be widely used for node level identification
between relays, especially within one organization. However, in some
deployments mutual TLS can also be used for end subscribers or
original publishers. However, as only node level authentication is
provided, what a particular identified node is allowed to do is not
provided at TLS level.</t>
        <t>MOQT has functionality to carry Authorization tokens as message
parameters. These tokens can vary based on the application
requirements. Two variants of authorization tokens have already
been defined for MOQT, and more are expected in the future. The
current tokens are Privacy Pass Authentication for Media over QUIC
<xref target="PPA"/> and Authentication scheme for MOQT using Common Access Tokens
<xref target="CAT"/>.</t>
        <t>Tokens are expected to contain information about which actions and
which resources the endpoint providing the token is authorized to
perform and access. Relays will verify the
token to ensure that the request is authorized.</t>
        <section anchor="replay-attacks">
          <name>Replay Attacks</name>
          <t>Replay protection for authorization tokens is the responsibility of
the specific token scheme used. Token schemes such as <xref target="CAT"/> and
<xref target="PPA"/> include requirements for relays when processing tokens and
requests.</t>
        </section>
      </section>
      <section anchor="sec-media">
        <name>Media Security</name>
        <t>MOQT uses secure transports that provide confidentiality and integrity
protection. However, media objects are accessible to relays,
and are subject to both intentional and accidental modification,
unless they are additionally end-to-end protected.</t>
        <t>The media objects transported by MOQT in various tracks from various
original publishers are subject to several considerations. The first
is source authenticity, i.e. to know that the received media objects
are what the original publisher actually published. In addition to
the media objects, it can also be important to authenticate some
Track and Object Properties. For example, timestamps are crucial to
understand where on the timeline this media fragment belongs.</t>
        <t>The second aspect is content confidentiality. Beyond direct relay
access to media objects, object sizes and traffic patterns enable
analysis of content. Track namespace and track name can also be
analyzed and correlated between end subscribers by relays.</t>
        <t>The end-to-end media security is handled by mechanisms external to this
specification. They need to provide source authenticity and
confidentiality. MOQT's object model does enable both the object
data itself as well as Object Properties to be confidentiality and
integrity protected. MOQT also supports Object Properties being
integrity protected but not encrypted.</t>
        <t>Current proposals for media security include:
 - An E2EE scheme based on SFRAME: <xref target="I-D.ietf-moq-secure-objects"/>.</t>
        <t>Secure key distribution for end-to-end encryption is specific to the
encryption system and deployment, and outside the scope of this document.</t>
      </section>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Live content requires significant bandwidth and resources.  Failure to
set limits will quickly cause resource exhaustion.</t>
        <t>MOQT uses stream limits and flow control to impose resource limits at
the network layer.  Endpoints <bcp14>SHOULD</bcp14> set flow control limits based on the
anticipated bitrate.</t>
        <t>Endpoints <bcp14>MAY</bcp14> impose a MAX STREAM count limit which would restrict the
number of concurrent streams which an application could have in
flight.</t>
        <t>The publisher prioritizes and transmits streams out of order.  Streams
might be starved indefinitely during congestion.  The publisher and
subscriber <bcp14>MUST</bcp14> cancel a stream, preferably the one with the lowest
priority, after reaching a resource limit.</t>
      </section>
      <section anchor="security-timeouts">
        <name>Timeouts</name>
        <t>Implementations are advised to use timeouts to prevent resource
exhaustion attacks by a peer that does not send expected data within
an expected time.  Each implementation is expected to set its own timeouts.</t>
        <section anchor="idle-connection-handling">
          <name>Idle Connection Handling</name>
          <t>The transport connection (e.g., QUIC) underlying a MOQT session can close due to
idle timeout if no data is exchanged, either because there are no established
subscriptions or the established subscriptions are not publishing Objects
frequently.  This includes publisher sessions that have issued a
PUBLISH_NAMESPACE and are waiting for subscribers.</t>
          <t>Implementations that want to keep idle sessions open have several options:</t>
          <ul spacing="normal">
            <li>
              <t>Use transport-layer keep-alive mechanisms, such as QUIC PING frames, to
prevent idle timeout closure.</t>
            </li>
            <li>
              <t>Send periodic control messages, for example REQUEST_UPDATE with no
modified Message Parameters.</t>
            </li>
            <li>
              <t>Accept that idle connections can close and implement reconnection logic when
needed.</t>
            </li>
          </ul>
          <t>The choice of mechanism is implementation-specific.</t>
        </section>
      </section>
      <section anchor="relay-security-considerations">
        <name>Relay security considerations</name>
        <section anchor="state-maintenance">
          <name>State maintenance</name>
          <t>A Relay <bcp14>SHOULD</bcp14> have mechanisms to prevent malicious endpoints from flooding it
with PUBLISH_NAMESPACE, SUBSCRIBE_NAMESPACE, or SUBSCRIBE_TRACKS requests that
could bloat data structures. It could use QUIC stream limits to limit the number
of such requests, or could have application-specific policies that can reject
incoming requests that cause the state maintenance for the session to be
excessive.</t>
        </section>
        <section anchor="subscribenamespace-and-subscribetracks-with-short-prefixes">
          <name>SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS with short prefixes</name>
          <t>A Relay can use authorization rules in order to prevent subscriptions closer
to the root of a large prefix tree. Otherwise, if an entity sends a relay a
SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS message with a short prefix, it can
cause the relay to send a large volume of NAMESPACE or PUBLISH messages. As
changes occur in the tree of namespaces, the relay would have to send matching
NAMESPACE/NAMESPACE_DONE messages or initiate new PUBLISH streams.</t>
        </section>
      </section>
      <section anchor="impl-fingerprinting">
        <name>Implementation Identification Fingerprinting</name>
        <t>The MOQT_IMPLEMENTATION option (<xref target="moqt-implementation"/>) can reveal information
that contributes to fingerprinting, a set of techniques for identifying a
specific endpoint over time through its unique set of characteristics.</t>
        <t>Detailed implementation information, including specific version numbers,
build identifiers, or platform details, can create a unique fingerprint that
enables tracking endpoints across sessions without their awareness. When
combined with other session characteristics, even minimal implementation
identification can contribute to distinguishing one endpoint from another.</t>
        <t>To mitigate fingerprinting risks:</t>
        <ul spacing="normal">
          <li>
            <t>Implementations <bcp14>SHOULD</bcp14> send only the minimum information necessary for
interoperability debugging. A short implementation name and major version
number are typically sufficient.</t>
          </li>
          <li>
            <t>Implementations <bcp14>SHOULD NOT</bcp14> include detailed system information, build
numbers, or other attributes that could uniquely identify a specific
instance or user.</t>
          </li>
          <li>
            <t>Privacy-conscious deployments <bcp14>MAY</bcp14> omit the MOQT_IMPLEMENTATION option
entirely or send a generic value.</t>
          </li>
          <li>
            <t>Implementations <bcp14>MAY</bcp14> provide users with the ability to configure or disable
the MOQT_IMPLEMENTATION option.</t>
          </li>
        </ul>
        <t>Operators are advised that detailed implementation identification
facilitates the same privacy concerns as persistent identifiers, since it
enables correlation of sessions across time.</t>
      </section>
    </section>
    <section anchor="grease">
      <name>Grease</name>
      <t>To ensure that implementations correctly handle unknown values and do not
fail when encountering protocol extensions they do not understand, this document
reserves a range of values for the purpose of greasing; see <xref section="3.3" sectionFormat="of" target="RFC9170"/>.</t>
      <t>Grease values follow the pattern <tt>0x7f * N + 0x9D</tt> for non-negative
integer values of N (that is, 0x9D, 0x11C, ..., 0x3fffffffffffffde).</t>
      <t>The following registries include GREASE reservations:</t>
      <ul spacing="normal">
        <li>
          <t>Setup Options (<xref target="iana-setup-options"/>)</t>
        </li>
        <li>
          <t>Properties (<xref target="iana-properties"/>)</t>
        </li>
        <li>
          <t>Session Termination Error Codes (<xref target="iana-session-termination"/>)</t>
        </li>
        <li>
          <t>REQUEST_ERROR Codes (<xref target="iana-request-error"/>)</t>
        </li>
        <li>
          <t>PUBLISH_DONE Codes (<xref target="iana-publish-done"/>)</t>
        </li>
        <li>
          <t>Stream Reset Error Codes (<xref target="iana-reset-stream"/>)</t>
        </li>
        <li>
          <t>MOQT Auth Token Type</t>
        </li>
      </ul>
      <t>Because new values in these registries can be defined without negotiation,
implementations <bcp14>MUST</bcp14> handle unknown values gracefully. Endpoints <bcp14>MUST NOT</bcp14>
close the session solely because they received an unknown value. The
following rules apply:</t>
      <t>Setup Options with reserved identifiers have no semantics and can carry
arbitrary values. Endpoints <bcp14>MUST</bcp14> ignore unknown Setup Options as specified
in <xref target="message-setup"/>.</t>
      <t>Unknown Properties <bcp14>MUST</bcp14> be handled as specified in <xref target="properties"/>.</t>
      <t>Receipt of an unknown error code in any error context (Session Termination,
REQUEST_ERROR, PUBLISH_DONE, or Data Stream Reset) <bcp14>MUST</bcp14> be treated as
equivalent to <tt>INTERNAL_ERROR</tt> for that context. An endpoint <bcp14>MUST NOT</bcp14> close
the session because it received an unknown error code in a REQUEST_ERROR
or PUBLISH_DONE.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TODO: fill out currently missing registries:</t>
      <ul spacing="normal">
        <li>
          <t>MOQT ALPN values</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
        <li>
          <t>Session-Level Track Names</t>
        </li>
      </ul>
      <section anchor="uri-scheme-registrations">
        <name>URI Scheme Registrations</name>
        <t>This document requests the registration of the following URI schemes in the
"Uniform Resource Identifier (URI) Schemes" registry, per <xref target="RFC7595"/>:</t>
        <section anchor="moqt-uri-scheme-registration">
          <name>"moqt" URI Scheme Registration</name>
          <t>Scheme name: moqt</t>
          <t>Status: Permanent</t>
          <t>Applications/protocols that use this scheme name: Media over QUIC Transport
(MOQT) over native QUIC or WebTransport, as defined in this document.</t>
          <t>Contact: IETF MoQ Working Group (moq@ietf.org)</t>
          <t>Change controller: IETF</t>
          <t>References: This document</t>
        </section>
      </section>
      <section anchor="iana-media-type">
        <name>Media Type Registration</name>
        <t>This document registers the following media type in the "Media Types"
registry <xref target="RFC6838"/>:</t>
        <t>Type name: application</t>
        <t>Subtype name: moqt</t>
        <t>Required parameters: N/A</t>
        <t>Optional parameters: N/A</t>
        <t>Encoding considerations: This media type is used to identify resources
accessed via the <tt>moqt</tt> URI scheme. It is not used to label the
content of MOQT objects, which are defined by separate media types in
application-specific specifications.</t>
        <t>Security considerations: See the Security Considerations section of
this document.</t>
        <t>Interoperability considerations: N/A</t>
        <t>Published specification: This document</t>
        <t>Applications that use this media type: Implementations of the Media
over QUIC Transport (MOQT) protocol.</t>
        <t>Fragment identifier considerations: Fragment identifiers for
<tt>application/moqt</tt> follow the syntax defined in <xref target="moqt-fragment"/>.</t>
        <t>Additional information: N/A</t>
        <t>Contact: IETF MoQ Working Group (moq@ietf.org)</t>
        <t>Change controller: IETF</t>
      </section>
      <section anchor="iana-fragment-types">
        <name>MOQT URI Fragment Types</name>
        <t>This document establishes the "MOQT URI Fragment Types" registry. This
registry governs fragment type identifiers used in <tt>moqt</tt> URI fragments
as defined in <xref target="moqt-fragment"/>.</t>
        <t>New fragment type identifiers are registered using the Specification
Required policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <t>Each entry in the registry contains the following fields:</t>
        <t>| Fragment Type | Description | Specification |
|:--------------|:------------|:--------------|</t>
        <t>This registry is initially empty.</t>
      </section>
      <section anchor="iana-setup-options">
        <name>Setup Options</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x01</td>
              <td align="left">PATH</td>
              <td align="left">
                <xref target="path"/></td>
            </tr>
            <tr>
              <td align="right">0x03</td>
              <td align="left">AUTHORIZATION_TOKEN</td>
              <td align="left">
                <xref target="setup-auth-token"/></td>
            </tr>
            <tr>
              <td align="right">0x04</td>
              <td align="left">MAX_AUTH_TOKEN_CACHE_SIZE</td>
              <td align="left">
                <xref target="max-auth-token-cache-size"/></td>
            </tr>
            <tr>
              <td align="right">0x05</td>
              <td align="left">AUTHORITY</td>
              <td align="left">
                <xref target="authority"/></td>
            </tr>
            <tr>
              <td align="right">0x07</td>
              <td align="left">MOQT_IMPLEMENTATION</td>
              <td align="left">
                <xref target="moqt-implementation"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown Setup Options as specified in
<xref target="message-setup"/>.</t>
        <t>New Setup Option types are registered using the Specification Required
policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).  Provisional registrations are
permitted to allow experimentation and avoid codepoint collisions
between independent implementations.  There is no reserved range for
private or application-specific use; implementations that need custom
Setup Options <bcp14>SHOULD</bcp14> request a provisional registration.</t>
      </section>
      <section anchor="authorization-token-alias-type">
        <name>Authorization Token Alias Type</name>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">DELETE</td>
              <td align="left">
                <xref target="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="iana-auth-token-type">
        <name>MOQT Auth Token Type</name>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Reserved</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="message-parameters">
        <name>Message Parameters</name>
        <table>
          <thead>
            <tr>
              <th align="left">Parameter Type</th>
              <th align="left">Parameter Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x02</td>
              <td align="left">OBJECT_DELIVERY_TIMEOUT</td>
              <td align="left">
                <xref target="object-delivery-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">AUTHORIZATION_TOKEN</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="left">0x04</td>
              <td align="left">RENDEZVOUS_TIMEOUT</td>
              <td align="left">
                <xref target="rendezvous-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x06</td>
              <td align="left">SUBGROUP_DELIVERY_TIMEOUT</td>
              <td align="left">
                <xref target="subgroup-delivery-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x08</td>
              <td align="left">EXPIRES</td>
              <td align="left">
                <xref target="expires"/></td>
            </tr>
            <tr>
              <td align="left">0x09</td>
              <td align="left">LARGEST_OBJECT</td>
              <td align="left">
                <xref target="largest-param"/></td>
            </tr>
            <tr>
              <td align="left">0x0A</td>
              <td align="left">FILL_TIMEOUT</td>
              <td align="left">
                <xref target="fill-timeout"/></td>
            </tr>
            <tr>
              <td align="left">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>
            <tr>
              <td align="left">0x34</td>
              <td align="left">TRACK_NAMESPACE_PREFIX</td>
              <td align="left">
                <xref target="track-namespace-prefix-param"/></td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>Message Parameters - List which params can be repeated in the table.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-properties">
        <name>Properties</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x02</td>
              <td align="left">OBJECT_DELIVERY_TIMEOUT</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="object-delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x04</td>
              <td align="left">MAX_CACHE_DURATION</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="max-cache-duration"/></td>
            </tr>
            <tr>
              <td align="right">0x06</td>
              <td align="left">SUBGROUP_DELIVERY_TIMEOUT</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="subgroup-delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x0B</td>
              <td align="left">IMMUTABLE_PROPERTIES</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="immutable-properties"/></td>
            </tr>
            <tr>
              <td align="right">0x0E</td>
              <td align="left">DEFAULT_PUBLISHER_PRIORITY</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="publisher-priority"/></td>
            </tr>
            <tr>
              <td align="right">0x22</td>
              <td align="left">DEFAULT_PUBLISHER_GROUP_ORDER</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="group-order-pref"/></td>
            </tr>
            <tr>
              <td align="right">0x30</td>
              <td align="left">DYNAMIC_GROUPS</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="dynamic-groups"/></td>
            </tr>
            <tr>
              <td align="right">0x3C</td>
              <td align="left">PRIOR_GROUP_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-group-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x3E</td>
              <td align="left">PRIOR_OBJECT_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-object-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">Any</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>The following table contains provisional registrations for other active drafts in the moq wg.
These entries share the same Property Type space as the table above.</t>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x06</td>
              <td align="left">TIMESTAMP</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x08</td>
              <td align="left">TIMESCALE</td>
              <td align="left">Track, Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0A</td>
              <td align="left">VIDEO_FRAME_MARKING</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0C</td>
              <td align="left">AUDIO_LEVEL</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0D</td>
              <td align="left">VIDEO_CONFIG</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
          </tbody>
        </table>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown Property types, skipping them using
the length field.</t>
        <ul spacing="normal">
          <li>
            <t>MOQ Properties - we wish to define the following registration policies:
            </t>
            <ul spacing="normal">
              <li>
                <t>0x00 to 0x77: Standards Action or IESG Approval (1-byte encoding)</t>
              </li>
              <li>
                <t>0x78 to 0x7F: Reserved for application-specific use (1-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x80 to 0x37FF: Specification Required (2-byte encoding)</t>
              </li>
              <li>
                <t>0x3800 to 0x3FFF: Reserved for application-specific use (2-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x4000 to 0x7FFF: Reserved for Mandatory Track Properties
(see <xref target="mandatory-track-properties"/>). Properties registered in this range
<bcp14>MUST</bcp14> have Track scope; Object scope properties <bcp14>MUST NOT</bcp14> be registered in
this range.</t>
              </li>
              <li>
                <t>0x8000 and above: First Come First Served</t>
              </li>
            </ul>
            <t>
Code points reserved for application-specific use will never be allocated
by IANA. Applications using these values do not need to coordinate with
IANA.  Note that applications consuming tracks from uncoordinated sources may
encounter different semantics for the same code points, creating potential
collision risks.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-session-level-tracks">
        <name>Session-Level Track Names</name>
        <t>This document establishes a registry for session-level track names
under the <tt>.session</tt> namespace (see <xref target="session-level-tracks"/>). The
registration policy is Specification Required (per <xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <t>Each registration must include:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Track Namespace</td>
              <td align="left">The track namespace under the <tt>.session</tt> namespace, can be empty</td>
            </tr>
            <tr>
              <td align="left">Track Name</td>
              <td align="left">The track name (bytes) within the full namespace</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">Brief description of the track's purpose</td>
            </tr>
            <tr>
              <td align="left">Change Controller</td>
              <td align="left">Who may update the registration</td>
            </tr>
            <tr>
              <td align="left">Specification</td>
              <td align="left">Reference to the defining specification</td>
            </tr>
          </tbody>
        </table>
        <t>This document does not define any initial entries.</t>
      </section>
      <section anchor="iana-error-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">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>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-request-error">
          <name>REQUEST_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="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">GOING_AWAY</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</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">NAMESPACE_TOO_LARGE</td>
                <td align="center">0x31</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>
              <tr>
                <td align="left">UNSUPPORTED_EXTENSION</td>
                <td align="center">0x33</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">REDIRECT</td>
                <td align="center">0x34</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-publish-done">
          <name>PUBLISH_DONE Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="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">TOO_FAR_BEHIND</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED</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">EXCESSIVE_LOAD</td>
                <td align="center">0x9</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>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-reset-stream">
          <name>Stream Reset Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">CANCELLED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">DELIVERY_TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">SESSION_CLOSED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_OBJECT_STATUS</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>The original design behind this protocol was inspired by three independent
proposals: WARP <xref target="I-D.draft-lcurley-warp"/> by Luke Curley, RUSH
<xref target="I-D.draft-kpugin-rush"/> by Kirill Pugin, Nitin Garg, Alan Frindell, Jordi
Cenzano and Jake Weissman, and QUICR <xref target="I-D.draft-jennings-moq-quicr-proto"/> by
Cullen Jennings, Suhas Nandakumar and Christian Huitema.  The authors of those
documents merged their proposals to create the first draft of moq-transport.
The IETF MoQ Working Group received an enormous amount of support from many
people. The following people provided substantive contributions to this
document:</t>
      <ul spacing="normal">
        <li>
          <t>Ali Begen</t>
        </li>
        <li>
          <t>Charles Krasic</t>
        </li>
        <li>
          <t>Christian Huitema</t>
        </li>
        <li>
          <t>Cullen Jennings</t>
        </li>
        <li>
          <t>James Hurley</t>
        </li>
        <li>
          <t>Jordi Cenzano</t>
        </li>
        <li>
          <t>Kirill Pugin</t>
        </li>
        <li>
          <t>Luke Curley</t>
        </li>
        <li>
          <t>Martin Duke</t>
        </li>
        <li>
          <t>Mike English</t>
        </li>
        <li>
          <t>Mo Zanaty</t>
        </li>
        <li>
          <t>Will Law</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="use-of-generative-ai">
      <name>Use of Generative AI</name>
      <t>Anthropic's Claude was used to assist with drafting and editing text for this
document. All AI-generated content was reviewed and approved by the editors.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="WebTransport">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>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="2" month="March" year="2026"/>
            <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-15"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="I-D.draft-ietf-quic-reliable-stream-reset">
          <front>
            <title>QUIC Stream Resets with Partial Delivery</title>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="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="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="2" month="March" year="2026"/>
            <abstract>
              <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with an abstract model that allows them to be used interchangeably.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-12"/>
        </reference>
        <reference anchor="RFC9221">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="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>
        <reference anchor="RFC7595">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes. It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CAT">
          <front>
            <title>Authentication scheme for MOQT using Common Access Tokens</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <author fullname="Chris Lemmons" initials="C." surname="Lemmons">
              <organization>Comcast</organization>
            </author>
            <author fullname="Gwendal Simon" initials="G." surname="Simon">
              <organization>Synamedia</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="19" month="September" year="2025"/>
            <abstract>
              <t>   A token-based authentication scheme for use with Media Over QUIC
   Transport.

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-secure-objects-00"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack. This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data. Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC9438">
          <front>
            <title>CUBIC for Fast and Long-Distance Networks</title>
            <author fullname="L. Xu" initials="L." surname="Xu"/>
            <author fullname="S. Ha" initials="S." surname="Ha"/>
            <author fullname="I. Rhee" initials="I." surname="Rhee"/>
            <author fullname="V. Goel" initials="V." surname="Goel"/>
            <author fullname="L. Eggert" initials="L." role="editor" surname="Eggert"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>CUBIC is a standard TCP congestion control algorithm that uses a cubic function instead of a linear congestion window increase function to improve scalability and stability over fast and long-distance networks. CUBIC has been adopted as the default TCP congestion control algorithm by the Linux, Windows, and Apple stacks.</t>
              <t>This document updates the specification of CUBIC to include algorithmic improvements based on these implementations and recent academic work. Based on the extensive deployment experience with CUBIC, this document also moves the specification to the Standards Track and obsoletes RFC 8312. This document also updates RFC 5681, to allow for CUBIC's occasionally more aggressive sending behavior.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9438"/>
          <seriesInfo name="DOI" value="10.17487/RFC9438"/>
        </reference>
        <reference anchor="RFC6582">
          <front>
            <title>The NewReno Modification to TCP's Fast Recovery Algorithm</title>
            <author fullname="T. Henderson" initials="T." surname="Henderson"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="A. Gurtov" initials="A." surname="Gurtov"/>
            <author fullname="Y. Nishida" initials="Y." surname="Nishida"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>RFC 5681 documents the following four intertwined TCP congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. RFC 5681 explicitly allows certain modifications of these algorithms, including modifications that use the TCP Selective Acknowledgment (SACK) option (RFC 2883), and modifications that respond to "partial acknowledgments" (ACKs that cover new data, but not all the data outstanding when loss was detected) in the absence of SACK. This document describes a specific algorithm for responding to partial acknowledgments, referred to as "NewReno". This response to partial acknowledgments was first proposed by Janey Hoe. This document obsoletes RFC 3782. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6582"/>
          <seriesInfo name="DOI" value="10.17487/RFC6582"/>
        </reference>
        <reference anchor="I-D.ietf-scone-protocol">
          <front>
            <title>Standard Communication with Network Elements (SCONE) Protocol</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Matt Joras" initials="M." surname="Joras">
              <organization>Meta</organization>
            </author>
            <author fullname="Marcus Ihlar" initials="L. M." surname="Ihlar">
              <organization>Ericsson</organization>
            </author>
            <date day="14" month="December" year="2025"/>
            <abstract>
              <t>   This document describes a protocol where on-path network elements can
   give endpoints their perspective on what the maximum achievable
   throughput might be for QUIC flows.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scone-protocol-04"/>
        </reference>
        <reference anchor="RFC9170">
          <front>
            <title>Long-Term Viability of Protocol Extension Mechanisms</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The ability to change protocols depends on exercising the extension and version-negotiation mechanisms that support change. This document explores how regular use of new protocol features can ensure that it remains possible to deploy changes to a protocol. Examples are given where lack of use caused changes to be more difficult or costly.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9170"/>
          <seriesInfo name="DOI" value="10.17487/RFC9170"/>
        </reference>
        <reference anchor="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 5184?>

<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-17">
        <name>Since draft-ietf-moq-transport-17</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Unified moqt:// URI scheme for QUIC and WebTransport (#1486)</t>
          </li>
          <li>
            <t>Add fragment identifier support for moqt URIs (#1571)</t>
          </li>
          <li>
            <t>Split SUBSCRIBE_NAMESPACE into SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS
(#1542)</t>
          </li>
          <li>
            <t>Remove Required Request ID (#1615)</t>
          </li>
          <li>
            <t>Add REDIRECT for request errors and established subscriptions (#1534)</t>
          </li>
          <li>
            <t>Allow GOAWAY on request streams to migrate individual requests (#1617)</t>
          </li>
          <li>
            <t>Add Request ID to GOAWAY (#1559)</t>
          </li>
          <li>
            <t>Remove PUBLISH_OK message type, make it a REQUEST_OK alias (#1611)</t>
          </li>
          <li>
            <t>Generalize stream reset codes to all request streams, add new codes,
align with PUBLISH_DONE (#1606)</t>
          </li>
          <li>
            <t>Add Track Properties to REQUEST_OK (#1576)</t>
          </li>
          <li>
            <t>Add support for mandatory-to-understand track extensions (#1509)</t>
          </li>
          <li>
            <t>Exclude your own tracks from SUBSCRIBE_NAMESPACE (#1596)</t>
          </li>
          <li>
            <t>Add Session-Level Tracks reserved namespace (#1562)</t>
          </li>
          <li>
            <t>Allow coalescing REQUEST_UPDATE processing (#1540)</t>
          </li>
          <li>
            <t>SUBSCRIBE takes precedence over SUBSCRIBE_NAMESPACE at relay (#1533)</t>
          </li>
          <li>
            <t>Don't close the Session for unknown errors (#1561)</t>
          </li>
          <li>
            <t>Clarify REQUEST_UPDATE failure behavior for all request types (#1539)</t>
          </li>
          <li>
            <t>Clarify SUBSCRIBE_NAMESPACE stream closure semantics (#1541)</t>
          </li>
          <li>
            <t>FETCH to a track with no objects returns INVALID_RANGE (#1537)</t>
          </li>
          <li>
            <t>Clarify FETCH_OK End Location semantics (#1536)</t>
          </li>
          <li>
            <t>Clarify definition of scope (#1629)</t>
          </li>
          <li>
            <t>Clarify Joining Fetch behavior:
            </t>
            <ul spacing="normal">
              <li>
                <t>Joining FETCH is unaffected by forward changing to 0 (#1620)</t>
              </li>
              <li>
                <t>Joining Fetch forward state mismatch is a request error (#1609)</t>
              </li>
              <li>
                <t>Clarify Joining Fetch ordering with Forward State transitions (#1577)</t>
              </li>
            </ul>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Make Object ID and Group ID delta encoded in Fetch responses (#1586)</t>
          </li>
          <li>
            <t>Add FIRST_OBJECT bit to SUBGROUP_HEADER type (#1618)</t>
          </li>
          <li>
            <t>Split DELIVERY_TIMEOUT into two types of timeout (#1605)</t>
          </li>
          <li>
            <t>FILL_TIMEOUT parameter (#1490)</t>
          </li>
          <li>
            <t>Forbid relays from lying about LARGEST_OBJECT (#1621)</t>
          </li>
          <li>
            <t>Allow publisher to reopen subgroup after REQUEST_UPDATE forward 0-&gt;1
(#1583)</t>
          </li>
          <li>
            <t>Allow 7-byte varint and non-minimal encodings (#1595)</t>
          </li>
          <li>
            <t>Padding streams and datagrams (#1475)</t>
          </li>
          <li>
            <t>Close session when delta encoding wraps (#1560)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify Object existence and cross-source contradictions (#1566)</t>
          </li>
          <li>
            <t>Clarify immutable track properties (#1535)</t>
          </li>
          <li>
            <t>Improve Startup Latency and 0-RTT guidance (#1544)</t>
          </li>
          <li>
            <t>Improve Security Considerations section (#1625)</t>
          </li>
          <li>
            <t>Rewrite abstract and introduction (#1556)</t>
          </li>
          <li>
            <t>Define textual aliases for REQUEST_OK by request type (#1610)</t>
          </li>
          <li>
            <t>Add IANA registry for Setup Options (#1564)</t>
          </li>
          <li>
            <t>Add provisional registry for LOC properties (#1624)</t>
          </li>
          <li>
            <t>Update MOQ Properties registration policies (#1525)</t>
          </li>
          <li>
            <t>Add stream type column to message type table (#1555)</t>
          </li>
          <li>
            <t>Fix grease examples to match 0x7f multiplier (#1569)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-16">
        <name>Since draft-ietf-moq-transport-16</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Change control stream from bidi to a pair of uni streams (#1510)</t>
          </li>
          <li>
            <t>Collapse CLIENT_SETUP and SERVER_SETUP into a single SETUP message (#1510)</t>
          </li>
          <li>
            <t>Move requests to bidirectional streams; remove cancel messages (#1389)</t>
          </li>
          <li>
            <t>Remove MAX_REQUEST_ID/REQUESTS_BLOCKED (#1471)</t>
          </li>
          <li>
            <t>New variable-length integer encoding (#1016)</t>
          </li>
          <li>
            <t>Encode Message Parameters as Type-Value pairs (#1462)</t>
          </li>
          <li>
            <t>Add GREASE for Setup Options, Properties, and error code registries (#1460)</t>
          </li>
          <li>
            <t>Add RENDEZVOUS_TIMEOUT parameter for SUBSCRIBE (#1447)</t>
          </li>
          <li>
            <t>Add PUBLISH_BLOCKED message for SUBSCRIBE_NAMESPACE flow control (#1452)</t>
          </li>
          <li>
            <t>Add Timeout field to GOAWAY message (#1497)</t>
          </li>
          <li>
            <t>Add GOING_AWAY to REQUEST_ERROR codes (#1434)</t>
          </li>
          <li>
            <t>Add EXCESSIVE_LOAD error code (#1479)</t>
          </li>
          <li>
            <t>Add NAMESPACE_TOO_LARGE error and stream reset for large namespaces (#1496)</t>
          </li>
          <li>
            <t>Add TOO_FAR_BEHIND stream reset code (#1445)</t>
          </li>
          <li>
            <t>Add REQUEST_UPDATE to list of REQUEST_ERROR causes (#1466)</t>
          </li>
          <li>
            <t>Enforce REQUEST_OK/ERROR as first message on the response stream (#1499)</t>
          </li>
          <li>
            <t>Allow joining FETCH for PUBLISH and REQUEST_UPDATE with forward=1 (#1335)</t>
          </li>
          <li>
            <t>Allow DELIVERY_TIMEOUT value of 0 to mean no timeout (#1450)</t>
          </li>
          <li>
            <t>Allow zero-element namespaces (#1472)</t>
          </li>
          <li>
            <t>Clarify EXPIRES parameter update mechanism (#1448)</t>
          </li>
          <li>
            <t>Remove TRACK_STATUS from REQUEST_UPDATE (#1436)</t>
          </li>
          <li>
            <t>Define how to use auth token cache safely with multiple streams (#1430)</t>
          </li>
          <li>
            <t>Constrain encoding/parsing of track namespace and names (#1512)</t>
          </li>
          <li>
            <t>Reserve Property type ranges for application-specific use (#1473)</t>
          </li>
          <li>
            <t>Make EndGroup in Subscription Filters a delta (#1470)</t>
          </li>
          <li>
            <t>Copy DELIVERY_TIMEOUT min requirement from parameter to property (#1427)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify prior Object semantics after End of Range indicators in FETCH (#1513)</t>
          </li>
          <li>
            <t>Clarify datagram status and properties cases (#1444)</t>
          </li>
          <li>
            <t>Clarify Stream Count includes empty subgroups (#1449)</t>
          </li>
          <li>
            <t>Clarify language for malformed tracks in a subgroup with END_OF_GROUP (#1464)</t>
          </li>
          <li>
            <t>Properties can appear in mutable list or inside Immutable Properties (#1442)</t>
          </li>
          <li>
            <t>Clarify immutable property preservation requirements (#1441)</t>
          </li>
          <li>
            <t>Clarification for Track Alias uniqueness (#1418)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Setup Parameters to Setup Options (#1461)</t>
          </li>
          <li>
            <t>Rename Extension Headers to Properties (#1504)</t>
          </li>
          <li>
            <t>Add security/privacy considerations for MOQT_IMPLEMENTATION (#1511)</t>
          </li>
          <li>
            <t>Add editorial text on bandwidth probing techniques (#1477)</t>
          </li>
          <li>
            <t>Explain idle connection handling (#1443)</t>
          </li>
          <li>
            <t>Fix "SUBSCRIBE_NAMESPACE with short prefixes" (#1502)</t>
          </li>
          <li>
            <t>Add generative AI disclosure per IRTF guidelines</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-15">
        <name>Since draft-ietf-moq-transport-15</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Key-Value-Pairs for Parameters and Headers (#1315)</t>
          </li>
          <li>
            <t>Use Request ID in PUBLISH_NAMESPACE_{DONE/CANCEL} (#1329)</t>
          </li>
          <li>
            <t>Remove delivery related params from TRACK_STATUS for Subscribers (#1325)</t>
          </li>
          <li>
            <t>PUBLISH does not imply PUBLISH_NAMESPACE (#1364)</t>
          </li>
          <li>
            <t>Allow Start Location to decrease in SUBSCRIBE_UPDATE (#1323)</t>
          </li>
          <li>
            <t>Change SUBSCRIBE_UPDATE to REQUEST_UPDATE and expand ability to update (#1332)</t>
          </li>
          <li>
            <t>Put SUBSCRIBE_NAMESPACE on a stream, make Namespaces and PUBLISH independent
(#1344)</t>
          </li>
          <li>
            <t>Require NAMESPACE before NAMESPACE_DONE (#1392)</t>
          </li>
          <li>
            <t>Allow the '*' or the empty namespace in SUBSCRIBE_NAMESPACE (#1393)</t>
          </li>
          <li>
            <t>Relays match SUBSCRIBE to both Tracks and Namespaces (#1397)</t>
          </li>
          <li>
            <t>Clarify sending requests after sending GOAWAY (#1398)</t>
          </li>
          <li>
            <t>Add Retry Interval to REQUEST_ERROR (#1339)</t>
          </li>
          <li>
            <t>Add Extension Headers to PUBLISH, SUBSCRIBE_OK, and FETCH_OK (#1374)</t>
          </li>
          <li>
            <t>Move track properties to extensions, scope parameters (#1390)</t>
          </li>
          <li>
            <t>Add LARGEST_OBJECT parameter to TRACK_STATUS (#1367)</t>
          </li>
          <li>
            <t>Duplicate subscription processing (#1341)</t>
          </li>
          <li>
            <t>Address Track Name/Namespace edge cases (#1399)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Enable mixing datagrams with streams in one track (#1350)</t>
          </li>
          <li>
            <t>Clarify datagrams and subgroups (#1382)</t>
          </li>
          <li>
            <t>Redo the way we deal with missing Objects and Object Status (#1342)</t>
          </li>
          <li>
            <t>Allow unknown ranges in a FETCH response (#1331)</t>
          </li>
          <li>
            <t>Do not reopen subgroups after delivery timeout or STOP_SENDING (#1396)</t>
          </li>
          <li>
            <t>Clarify handling of unknown extensions (#1395)</t>
          </li>
          <li>
            <t>Clarify Delivery Timeout for datagrams (#1406)</t>
          </li>
          <li>
            <t>Disallow DELIVERY_TIMEOUT=0 (#1330)</t>
          </li>
          <li>
            <t>Malformed track due to multiple priorities for one subgroup (#1317)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Subscribers can migrate networks too (#1410)</t>
          </li>
          <li>
            <t>Rename Version Specific Parameters to Message Parameters (#1411)</t>
          </li>
          <li>
            <t>Clarify valid joining fetch subscription states (#1363)</t>
          </li>
          <li>
            <t>Formatting names for logs (#1355)</t>
          </li>
          <li>
            <t>A Publisher might not use the congestion window (#1408)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-14">
        <name>Since draft-ietf-moq-transport-14</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Always use ALPN for version negotiation (#499)</t>
          </li>
          <li>
            <t>Consolidate all the Error Message types (#1159)</t>
          </li>
          <li>
            <t>Change MOQT IMPLEMENTATION code point to 0x7 (#1191)</t>
          </li>
          <li>
            <t>Add Forward to SUBSCRIBE_NAMESPACE (#1220)</t>
          </li>
          <li>
            <t>Parameters for Group Order, Subscribe Priority and Subscription Filter (redo) (#1273)</t>
          </li>
          <li>
            <t>REQUEST_OK message (#1274)</t>
          </li>
          <li>
            <t>Subscribe Update Acknowledgements (#1275)</t>
          </li>
          <li>
            <t>Disallow DELETE and USE_ALIAS in CLIENT_SETUP (#1277)</t>
          </li>
          <li>
            <t>Remove Expires field from SUBSCRIBE_OK (#1282)</t>
          </li>
          <li>
            <t>Make Forward a Parameter (#1283)</t>
          </li>
          <li>
            <t>Allow SUBSCRIBE_UPDATE to increase the end location (#1288)</t>
          </li>
          <li>
            <t>Add default port for raw QUIC (#1289)</t>
          </li>
          <li>
            <t>Unsubscribe Namespace should be linked to Subscribe Namespace (#1292)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Fetch Object serialization optimization (#949)</t>
          </li>
          <li>
            <t>Make default PUBLISHER PRIORITY a parameter, optional in Subgroup/Datagram (#1056)</t>
          </li>
          <li>
            <t>Allow datagram status with object ID=0 (#1197)</t>
          </li>
          <li>
            <t>Disallow object extension headers in all non-Normal status objects (#1266)</t>
          </li>
          <li>
            <t>Objects for malformed track must not be cached (#1290)</t>
          </li>
          <li>
            <t>Remove NO_OBJECTS fetch error code (#1303)</t>
          </li>
          <li>
            <t>Clarify what happens when max_cache_duration parameter is omitted (#1287)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Request ID field in MAX_REQUEST_ID (#1250)</t>
          </li>
          <li>
            <t>Define and draw subscription state machine (#1296)</t>
          </li>
          <li>
            <t>Omitting a subgroup object necessitates reset (#1295)</t>
          </li>
          <li>
            <t>Define duplication rules for header extensions (#1293)</t>
          </li>
          <li>
            <t>Clarify joining fetch end location (#1286)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-13">
        <name>Since draft-ietf-moq-transport-13</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add an AUTHORITY parameter (#1058)</t>
          </li>
          <li>
            <t>Add a free-form SETUP parameter identifying the implementation (#1114)</t>
          </li>
          <li>
            <t>Add a Request ID to SUBSCRIBE_UDPATE (#1106)</t>
          </li>
          <li>
            <t>Indicate which params can appear PUBLISH* messages (#1071)</t>
          </li>
          <li>
            <t>Add TRACK_STATUS to the list of request types affected by GOAWAY (#1105)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Object IDs within Subgroups (#1042)</t>
          </li>
          <li>
            <t>Use a bit in Datagram Type to convey Object ID = 0 (#1055)</t>
          </li>
          <li>
            <t>Corrected missed code point updates to Object Datagram Status (#1082)</t>
          </li>
          <li>
            <t>Merge OBJECT_DATAGRAM and OBJECT_DATAGRAM_STATUS description (#1179)</t>
          </li>
          <li>
            <t>Objects are not schedulable if flow-control blocked (#1054)</t>
          </li>
          <li>
            <t>Clarify DELIVERY_TIMEOUT reordering computation (#1120)</t>
          </li>
          <li>
            <t>Receiving unrequested Objects (#1112)</t>
          </li>
          <li>
            <t>Clarify End of Track (#1111)</t>
          </li>
          <li>
            <t>Malformed tracks apply to FETCH (#1083)</t>
          </li>
          <li>
            <t>Remove early FIN from the definition of malformed tracks (#1096)</t>
          </li>
          <li>
            <t>Prior Object ID Gap Extension header (#939)</t>
          </li>
          <li>
            <t>Add Extension containing immutable extensions (#1025)</t>
          </li>
        </ul>
        <t><strong>Relay Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain FETCH routing for relays (#1165)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> for multi-publisher relay handling (#1115)</t>
          </li>
          <li>
            <t>Filters don't (usually) determine the end of subscription (#1113)</t>
          </li>
          <li>
            <t>Allow self-subscriptions (#1110)</t>
          </li>
          <li>
            <t>Explain Namespace Prefix Matching in more detail (#1116)</t>
          </li>
        </ul>
        <t><strong>Explanatory</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain Modularity of MOQT (#1107)</t>
          </li>
          <li>
            <t>Explain how to resume publishing after losing state (#1087)</t>
          </li>
        </ul>
        <t><strong>Major Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename ANNOUNCE to PUBLISH_NAMESPACE (#1104)</t>
          </li>
          <li>
            <t>Rename SUBSCRIBE_DONE to PUBLISH_DONE (#1108)</t>
          </li>
          <li>
            <t>Major FETCH Reorganization (#1173)</t>
          </li>
          <li>
            <t>Reformat Error Codes (#1091)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-12">
        <name>Since draft-ietf-moq-transport-12</name>
        <ul spacing="normal">
          <li>
            <t>TRACK_STATUS_REQUEST and TRACK_STATUS have changed to directly mirror
SUBSCRIBE/OK/ERROR (#1015)</t>
          </li>
          <li>
            <t>SUBSCRIBE_ANNOUNCES was renamed back to SUBSCRIBE_NAMESPACE (#1049)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-11">
        <name>Since draft-ietf-moq-transport-11</name>
        <ul spacing="normal">
          <li>
            <t>Move Track Alias from SUBSCRIBE to SUBSCRIBE_OK (#977)</t>
          </li>
          <li>
            <t>Expand cases FETCH_OK returns Invalid Range (#946) and clarify fields (#936)</t>
          </li>
          <li>
            <t>Add an error code to FETCH_ERROR when an Object status is unknown (#825)</t>
          </li>
          <li>
            <t>Rename Latest Object to Largest Object (#1024) and clarify what to
do when it's incomplete (#937)</t>
          </li>
          <li>
            <t>Explain Malformed Tracks and what to do with them (#938)</t>
          </li>
          <li>
            <t>Allow End of Group to be indicated in a normal Object (#1011)</t>
          </li>
          <li>
            <t>Relays <bcp14>MUST</bcp14> have an upstream subscription to send SUBSCRIBE_OK (#1017)</t>
          </li>
          <li>
            <t>Allow AUTHORIZATION TOKEN in CLIENT_SETUP, SERVER_SETUP and
other fixes (#1013)</t>
          </li>
          <li>
            <t>Add PUBLISH for publisher initiated subscriptions (#995) and
fix the PUBLISH codepoints (#1048, #1051)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-10">
        <name>Since draft-ietf-moq-transport-10</name>
        <ul spacing="normal">
          <li>
            <t>Added Common Structure definitions - Location, Key-Value-Pair and Reason
Phrase</t>
          </li>
          <li>
            <t>Limit lengths of all variable length fields, including Track Namespace and Name</t>
          </li>
          <li>
            <t>Control Message length is now 16 bits instead of variable length</t>
          </li>
          <li>
            <t>Subscribe ID became Request ID, and was added to most control messages. Request ID
is used to correlate OK/ERROR responses for ANNOUNCE, SUBSCRIBE_NAMESPACE,
and TRACK_STATUS.  Like Subscribe ID, Request IDs are flow controlled.</t>
          </li>
          <li>
            <t>Explain rules for caching in more detail</t>
          </li>
          <li>
            <t>Changed the SETUP parameter format for even number parameters to match the
Object Header Extension format</t>
          </li>
          <li>
            <t>Rotated SETUP code points</t>
          </li>
          <li>
            <t>Added Parameters to TRACK_STATUS and TRACK_STATUS_REQUEST</t>
          </li>
          <li>
            <t>Clarified how subscribe filters work</t>
          </li>
          <li>
            <t>Added Next Group Filter to SUBSCRIBE</t>
          </li>
          <li>
            <t>Added Forward flag to SUBSCRIBE</t>
          </li>
          <li>
            <t>Renamed FETCH_OK field to End and clarified how to set it</t>
          </li>
          <li>
            <t>Added Absolute Joining Fetch</t>
          </li>
          <li>
            <t>Clarified No Error vs Invalid Range FETCH_ERROR cases</t>
          </li>
          <li>
            <t>Use bits in SUBGROUP_HEADER and DATAGRAM* types to compress subgroup ID and
extensions</t>
          </li>
          <li>
            <t>Coalesced END_OF_GROUP and END_OF_TRACK_AND_GROUP status</t>
          </li>
          <li>
            <t>Objects that Do Not Exist cannot have extensions when sent on the wire</t>
          </li>
          <li>
            <t>Specified error codes for resetting data streams</t>
          </li>
          <li>
            <t>Defined an Object Header Extension for communicating a known Group ID gap</t>
          </li>
          <li>
            <t>Replaced AUTHORIZATION_INFO with AUTHORIZATION_TOKEN, which has more structure,
compression, and additional Auth related error codes (#760)</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8S96XobyZUg+j+eIkf6vinJBiCS2uWlGxKpKo4lkk1SVfa4
PWISSJLZBSJhZEIULKmfZZ7lPtk9e5zITFCq7vK9+j67CCAzlhMnzr4Mh8PQ
lM2seJHdeVtMyzyrPhTL7N/e7b/KTpf5vF5Uy+ZOyM/Pl8WHF9l19fdho1+H
aTWZ59fw6nSZXzTDsmguhskTw+1nYZo38MSn3fHp3pcwgQ+X1XL9IqubaQjl
Yvkia5arutnZ2nq+tRPyZZG/yLI7PxXnWT6fZvvzpljOi8avpV6dX5d1XVbz
0/UCht7fO30dbqrlz5fLarWwfRzqPu6En4s1/D59EbJhdh03+fdVOQkfivmq
gF+yjW9nWUPz3PkJ5ijnl9n3+CR+f52XM/getvyvuPdRtbzEr/Pl5Aq+vmqa
Rf3iwQN8Cr8qPxQjfewBfvHgfFnd1MUDeP8BvndZNlercx5weHP5IAElPjAD
6NWNH5oeHPGLo7JKX3mw6VhGV8317E4IdQMwfp/Pqjlsb13Uob7Ol837v68q
mOdFNq/ConyR/bWpJoOshveWxUUNf62v+Q84/ut8sQCQ/C2EfNVcVUsE5BD+
l2XlHEY4GWUHMEX+8woGpq8ZX05WV3nd/gnAks/Lf+QNnOyL7FVZTyr6vmAw
13N+/F8n+MtoUl2HdLIfR9mPeV3OyuKDm+rHctJUy/SXdKbvq+pyVvipPuDD
Hz786yX90jPV/ig7uSmaxs2zn8/dd1+boYSTwIf9FPjzssKbCBgIa27NOR5l
r5flfFrMZm7a8QzmTb5Pp35bNLmfOL/AZ//1Gr7eMOm8Wl7Dyx/oUuANeJEd
v371fGtrCz7DvbSbCHse7hJGD2+Kc0KuISLmQ7jX8ws/yqvxqXsYUXHyCKc+
Ohq3vl8syw/5ZD1c5HU9RJSCp5IH6mKyWhbD6vw/iklTvwhhOBxm+XkN00+a
EE6vyhrxcnVdzJtsWlyU86LONhK27N7bw387vT/I8myxOp+V9dUDoC71ZFme
F2GxrADzq1nWXOVNtlzNazcEEicPjFGGI2WzAp7IL2HO5qrILoq8gdXCexcB
PtdFZlcQ79FqcpXBNYC1F/k13qe8yS+X9CfAoVqWTVnA3zjVAu5lmc/CspiV
+TlgcrOWGasFTAjXNTuvmqtsUZXzZthUQ/qDXm2ugFxdXgESASkl6tcUGYyT
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
wWDYuAzOGm9ScRnNk/RWyxIMOW20mwXXff1IEhu/tc6a3WukTV9fNvofKJVt
q2VPIXfPWt3rdvO3Znu7QWduxdNu57y1eakNpknYDKMcZZ/Hs5lYFY9sYMBt
LpA+3KlaPNSaB1eiJ8rlyR6QZQCjP2dFB85lm251UorMULQAN+PMlT88oQy2
6chI1CxqiOtqHhk+dEFoh+bimjv7ulahRkUOt/aNzHJ4JLOcn4TEss5kWJmJ
G7bABNG7tTaQXehItls/PDdLFRtf0evd4l1SyxAZfn6+/U53/9RO96ruaFcX
u6SDXqTz5xVkBkzuIOzkKcYhCiOfO/oSKNPUusG5DSTNJvE9w1N4MSTy/+SK
hEH7s1zoSgBVgnkxmZ97x30S86KwRIm7nETn6Dt0mhrOwv85wHuXzOOwNIQm
tur5orGgbhiSHNAwZq6bZwR+dqLA/ekMcx8gl0i9xzpJqdkGmbQUUzQz8TSR
L9GO9Yzk31wiD1HXfy2nfp5RZEscH+NnZH1IAoHC8vPBSZejiKoffyBlTntC
0kG64GKWUuTNec79sX6oNREo75PiB1Bca1GsXvJSxt75deexBqSa2pcpZVye
xT77HXnqk6pqcrAaBesLMH9plR/B47aOmH3QCm6UUrFfMZj0keBkXNGNBXjN
ew1LxQKN+L06UrzWt0iS4YMSrpfPomx1aTgQo3DalRmj1+gA90Z1OyDEg4la
jmYI3Z6/GC3gzjB91QjmTtIrzbzURUAyTGiouLtPnbvbTPDxIQXC4XI2iheJ
9sk6FSCvFEQuFmZx47i4Q2X/2bG5++aqG0RKMT4W3KxWo5FucCpPQi40osIV
Ipfsu2Txbkj7yFGCzvqgG6G8Hfn/OY9I+ObqgRX/cqgPnWitqegBWr8r+SZF
64sXxdNRkLOCrxKG41fG1zaNv+pYz0PzrGD93U3jVxsdBOPrm/f/W6Nt9HIb
3m+dBeP3No0/u+q1W6eNoaQ1Wz+aHb+/afyH5t/Zm3Z93u1fNoZDoz3KWdL4
g233Dyf96vkdbRp/2WjTws2CGWj88abxF93Gx4Y3O1e+f3XDeKPEDvvm8xnl
e9C4aOqJML626fwbw8Y1V6nlN4HxuxvGr8QhusaMPm93P8r4+tbfX83ElwDj
9zaMN6sNyL/TaV50hy32vp03Wu3mGY/f3/r7+fX1+x9spL8Pne7HzuruZfzh
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
SPla/wvxjtQM1MIDAA==

-->

</rfc>
