<?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.39 (Ruby 3.4.9) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-19" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-19"/>
    <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 collection of objects within a track. A group represents a join point
in a track. See (<xref target="model-group"/>).</t>
          </dd>
          <dt>Subgroup:</dt>
          <dd>
            <t>A sequence of one or more objects from the same group, sent on a single
transport stream whenever possible. See (<xref target="model-subgroup"/>).</t>
          </dd>
          <dt>Object:</dt>
          <dd>
            <t>An object is an addressable unit whose payload is a sequence of
bytes. Objects form the base element in the MOQT data model. See
(<xref target="model-object"/>).</t>
          </dd>
          <dt>Track:</dt>
          <dd>
            <t>A track is a collection of groups. See (<xref target="model-track"/>).</t>
          </dd>
        </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. Note that, as
a result, the same numeric value can be represented by more than one byte
sequence. For example, the value 0 can be encoded as <tt>0x00</tt>, <tt>0x8000</tt>,
<tt>0xc00000</tt>, or any longer form.</t>
          <dl>
            <dt>x (vi64):</dt>
            <dd>
              <t>Indicates that x holds an integer value using the variable-length
encoding as described above.</t>
            </dd>
          </dl>
        </section>
        <section anchor="location-structure">
          <name>Location Structure</name>
          <t>Location identifies a particular Object in a Group within a Track.</t>
          <figure anchor="moq-location">
            <name>Location structure</name>
            <artwork><![CDATA[
Location {
  Group (vi64),
  Object (vi64)
}
]]></artwork>
          </figure>
          <t>In this document, a Location can be expressed in the form of {GroupID,
ObjectID}, where GroupID and ObjectID indicate the Group ID and Object ID of the
Location, respectively.  The constituent parts of any Location A can be referred
to using A.Group or A.Object.</t>
          <t>Location A &lt; Location B if:</t>
          <t><tt>A.Group &lt; B.Group || (A.Group == B.Group &amp;&amp; A.Object &lt; B.Object)</tt></t>
        </section>
        <section anchor="key-value-pair-structure">
          <name>Key-Value-Pair Structure</name>
          <t>Key-Value-Pair is a flexible structure 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="namespace-name-format">
        <name>Representing Namespace and Track Names</name>
        <t>There is often a need to render namespace tuples and track names for
purposes such as logging, representing track filenames, or use in
certain authorization verification schemes. The namespace and track name
are binary, 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>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>
            <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>
          </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.</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>A gap in the observed Object IDs does not by itself convey any information about
the skipped Objects. Skipped Objects remain in the unknown state until they are
received or their non-existence is signalled, for example in a FETCH stream (see
<xref target="fetch-header"/>) or via a Prior Object ID Gap (see <xref target="prior-object-id-gap"/>).</t>
        <t>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 Location filters which span multiple Groups in FETCH or
SUBSCRIBE.  SUBSCRIBE and FETCH delivery use Group Order, so they could have
an unexpected delivery order if Group IDs do not increase with time.</t>
          <t>The amount of time elapsed between publishing an Object in Group ID N and in a
Group ID &gt; N, or even which will be published first, is not defined by this
specification and is defined by the applications using MOQT.</t>
        </section>
      </section>
      <section anchor="model-track">
        <name>Track</name>
        <t>A track is a sequence of groups (<xref target="model-group"/>). It is the entity
against which a subscriber issues a subscription request.  A subscriber
can request to receive individual tracks starting at a group boundary,
including any new objects pushed by the publisher while the track is
active.</t>
        <section anchor="track-name">
          <name>Track Naming</name>
          <t>In MOQT, every track is identified by a Full Track Name, consisting of a Track
Namespace and a Track Name.</t>
          <t>Track Namespace is an ordered set of between 0 and 32 Track Namespace Fields,
encoded as 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>MUST</bcp14> follow the processing rules in the
Property's definition.  Unless those rules permit otherwise, a Relay <bcp14>MUST NOT</bcp14>
modify, add, or remove the Property; it <bcp14>MUST</bcp14> forward the Property to downstream
subscribers and <bcp14>MUST</bcp14> cache it with the Track or Object if the Track or Object is
cached.</t>
        <t>Properties are serialized as Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).
Track Properties always appear as the final field in the messages that
carry them; their length is the remaining bytes of the message after all
preceding fields have been consumed. Object Properties (<xref target="object-properties"/>)
are preceded by an explicit length field.</t>
        <t>Property types are registered in the IANA table 'MOQ Properties'.
See <xref target="iana"/>.</t>
        <t>Certain Property type ranges are reserved for application-specific
use and will never be allocated by IANA in future MOQT specifications:</t>
        <ul spacing="normal">
          <li>
            <t>0x78 to 0x7F (1-byte encoding): 8 code points for applications with
tight space constraints</t>
          </li>
          <li>
            <t>0x3800 to 0x3FFF (2-byte encoding): 2048 code points (including grease
<xref target="grease"/>) for applications with moderate space constraints</t>
          </li>
        </ul>
        <t>Applications <bcp14>MAY</bcp14> use code points in these ranges without registration for
format-specific metadata or other application-defined purposes. Relays that
do not understand the application format <bcp14>MUST</bcp14> forward these properties
unchanged but <bcp14>MUST NOT</bcp14> attempt to interpret their semantic meaning. Different
applications using the same code point in these ranges may assign different
meanings; the interpretation depends on the track or application
context known to the publisher and subscriber.</t>
        <section 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>The ALPN value <xref target="RFC7301"/> for the final version of this specification
is <tt>moqt</tt>.</t>
        <t>[[RFC editor: please remove the remainder of this section before publication.]]</t>
        <t>ALPNs used to identify IETF drafts are created by appending
the draft number to "moqt-". For example, draft-ietf-moq-transport-13
would be identified as "moqt-13".</t>
        <t>Note: Draft versions prior to -15 all used moq-00 ALPN, followed by version
negotiation in the SETUP messages.</t>
        <section anchor="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>
        </section>
        <section anchor="dereferencing-a-moqt-uri">
          <name>Dereferencing a MOQT URI</name>
          <t>The default operation for dereferencing a <tt>moqt</tt> URI is to establish a
MOQT session to the identified server.</t>
          <t>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,
new Parameter values, or new framing for Streams and Datagrams.</t>
        <t>The client and server <bcp14>MUST</bcp14> include all Setup Options <xref target="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. When this is done before the
handshake completes using 0-RTT, the security implications described in
<xref target="zero-rtt"/> apply.</t>
        <t>Unidirectional streams containing Objects or bidirectional stream(s) beginning
with a request message could arrive prior to the control streams, in which case
the data <bcp14>SHOULD</bcp14> be buffered until both control streams arrive and setup is
complete. If an implementation does not want to buffer or if the message type is
not supported, it <bcp14>MAY</bcp14> reset such 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="zero-rtt">
          <name>0-RTT</name>
          <t>QUIC supports 0-RTT (<xref section="2.3" sectionFormat="of" target="RFC8446"/>), but WebTransport over QUIC
is not expected to use 0-RTT, because initializing a WebTransport session
uses CONNECT, which is not a safe method. <xref target="RFC8470"/> describes the use of
0-RTT with HTTP in more detail. If 0-RTT is used with an existing or future
version of WebTransport, the following would apply to it as well as QUIC.</t>
          <t>MOQT Messages and Objects as defined in this draft are safe to replay in most
circumstances.</t>
          <ul spacing="normal">
            <li>
              <t>TRACK_STATUS gets the Largest Object and Track Properties, but does not
change the state of a Track or any Object in the Track.</t>
            </li>
            <li>
              <t>SUBSCRIBE requests Objects be delivered, but does not change the Objects
being requested.</t>
            </li>
            <li>
              <t>PUBLISH initiates a Subscription. Objects can be immediately sent to
the Subscriber. Processing the same Objects multiple times is
idempotent, as the subscriber or relay can identify and discard
duplicates based on the Group ID and Object ID.</t>
            </li>
            <li>
              <t>SUBSCRIBE_NAMESPACE requests a list of namespaces and the establishment
of new subscriptions, but does not change the available Namespaces,
Tracks, or Objects contained within a Track.</t>
            </li>
            <li>
              <t>PUBLISH_NAMESPACE requests that Subscriptions under the namespace be sent
to that Publisher. If a Subscription was sent to the replaying endpoint, it
would fail because the endpoint cannot complete the handshake.</t>
            </li>
          </ul>
          <t>Some potential side effects of replay are:</t>
          <ul spacing="normal">
            <li>
              <t>Publishing Objects that were previously published could cause those
Objects to be distributed to active Subscriptions if the relays do
not identify them as already having been published. This re-distribution could
also make them available in cache again after they previously expired.</t>
            </li>
          </ul>
          <t>Replays could increase load on the MOQT network. For relay to client
traffic, this is no worse than 0-RTT in HTTP/3, since the server is limited by
the amplification factor until address validation. However, it could cause
the relay to initiate new upstream Subscriptions. For a SUBSCRIBE_TRACKS
request, sending that upstream could cause the Relay to receive a number of new
Subscriptions on the replaying client's behalf.</t>
          <t>Relays <bcp14>MAY</bcp14> defer initiating upstream subscriptions until the handshake is complete
or reject 0-RTT entirely to mitigate resource exhaustion from replayed packets.</t>
        </section>
        <section anchor="graceful-request-closure">
          <name>Graceful Request Stream Closure</name>
          <t>A request stream is bidirectional and each direction is closed independently,
either gracefully with a FIN or abruptly with RESET_STREAM.</t>
          <t>A FIN only indicates that an endpoint will send no further messages in that
direction; it is not a request cancellation. An endpoint <bcp14>MUST NOT</bcp14> send a FIN on
a direction of a request stream until it has sent all required messages on that
direction for its request type. In particular, an endpoint sending a response to
a request <bcp14>MUST</bcp14> send the corresponding response message, and the publisher of an
<tt>Established</tt> subscription <bcp14>MUST</bcp14> send PUBLISH_DONE, before sending a FIN. A FIN
sent by the responder after its response and any subsequent messages for the
request signals that the request is complete; if it has not already done so, the
requester <bcp14>SHOULD</bcp14> then send a FIN on its direction, gracefully closing the stream.
An endpoint that receives a FIN before all required messages have arrived treats
the request as failed.</t>
          <t>An endpoint <bcp14>SHOULD</bcp14> send a FIN promptly after a message when it has nothing
further to send on that direction and will not need to respond to a future
REQUEST_UPDATE. A requester, with the exception of the sender of PUBLISH,
<bcp14>MAY</bcp14> FIN immediately after sending a message if it will not send a
REQUEST_UPDATE.</t>
        </section>
        <section anchor="request-cancellation">
          <name>Request Cancellation and Rejection</name>
          <t>Once a request stream has been opened, the request <bcp14>MAY</bcp14> be cancelled by either
endpoint. Senders cancel requests if the response is no longer of interest;
Receivers cancel requests if they are unable to or choose not to respond.
Implementations cancel a request by abruptly terminating any directions of the
stream that are still open, using RESET_STREAM for a direction they are sending
and STOP_SENDING for a direction they are receiving. An endpoint that has
already sent a FIN on its sending direction and subsequently wishes to cancel
sends STOP_SENDING on the receiving direction.</t>
          <t>When an endpoint rejects a request without performing any application
processing, it <bcp14>SHOULD</bcp14> send a REQUEST_ERROR and FIN the stream.</t>
        </section>
        <section 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>
          <dt>TOO_MANY_REQUEST_UPDATES (0x1B):</dt>
          <dd>
            <t>The endpoint received a REQUEST_UPDATE that exceeded the per-stream limit
communicated via the MAX_REQUEST_UPDATES Setup Option
(<xref target="max-request-updates"/>).</t>
          </dd>
        </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>Session Migration</name>
        <t>MOQT requires a long-lived and stateful session. However, a service
provider needs the ability to shutdown/restart a server without waiting for all
sessions to drain naturally, as that can take days for long-form media.
MOQT enables proactively draining sessions via the GOAWAY message (<xref target="message-goaway"/>).</t>
        <t>A GOAWAY on the control stream migrates the entire session, as described in
this section. A GOAWAY on a single request stream instead migrates only that
request, leaving the rest of the session in place; see <xref target="message-goaway"/>.</t>
        <t>The server sends a GOAWAY message, signaling the client to establish a new
session and migrate any <tt>Established</tt> subscriptions. The GOAWAY message optionally
contains a new URI for the new session, otherwise the current URI is
reused. The GOAWAY message contains a Timeout indicating how long, in
milliseconds, the sender intends to wait before closing the session. The sender
<bcp14>SHOULD</bcp14> close the session with <tt>GOAWAY_TIMEOUT</tt> after the indicated timeout if
there are still open subscriptions or fetches on a connection.</t>
        <t>When the server is a subscriber, it <bcp14>SHOULD</bcp14> send a GOAWAY message to downstream
subscribers prior to unsubscribing from upstream publishers.</t>
        <t>After the client receives a GOAWAY, it's <bcp14>RECOMMENDED</bcp14> that the client waits until
there are no more <tt>Established</tt> subscriptions before closing the session with NO_ERROR.
Ideally this is transparent to the application using MOQT, which involves
establishing a new session in the background and migrating <tt>Established</tt> subscriptions
and published namespaces. The client can choose to delay closing the session if
it expects more OBJECTs to be delivered. The sender closes the session with a
<tt>GOAWAY_TIMEOUT</tt> if the peer doesn't close the session within the
indicated Timeout.</t>
      </section>
      <section 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>An endpoint <bcp14>MAY</bcp14> have multiple concurrent subscriptions to the same Track,
each identified by a unique Request ID. A publisher <bcp14>MAY</bcp14> assign the same or
different Track Aliases to these subscriptions.</t>
        <t>When an Object matches the filters of multiple subscriptions to the same Track,
the publisher <bcp14>MUST</bcp14> send the Object once for each matching subscription, even
when those subscriptions share the same Track Alias. Because subscriptions can
share a Track Alias, the subscriber re-applies each subscription's filter to
determine which subscription a received Object belongs to. Subscribers <bcp14>SHOULD</bcp14>
avoid overlapping filters across subscriptions to the same Track, as they are
responsible for deduplicating any resulting duplicate Objects.</t>
        <t>A publisher <bcp14>SHOULD</bcp14> begin sending incomplete objects when available to avoid
incurring additional latency.</t>
        <t>Publishers <bcp14>MAY</bcp14> start sending Objects on PUBLISH-initiated subscriptions before
receiving a PUBLISH_OK response to reduce latency.  Doing so can consume
unnecessary resources in cases where the Subscriber rejects the subscription
with 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="location-filters">
          <name>Location Filters</name>
          <t>Subscribers can specify a Location 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 Location 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 Location 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 Location Filter has the following structure:</t>
          <artwork><![CDATA[
Location 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 Location Filter (see
<xref target="location-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="range-filters">
          <name>Range Filters</name>
          <t>Range Filters are parameters in SUBSCRIBE, FETCH, or SUBSCRIBE_TRACKS that
tell a publisher to filter tracks (via TRACK PROPERTY FILTER) and objects
according to subscriber-provided criteria.  Range filters are specified as
ranges of integer values in Track and Object Properties and other
Object header fields (Subgroup ID, Object ID, and Publisher Priority).
There are five Range Filter parameter types, 0x25-0x29, as shown below.</t>
          <artwork><![CDATA[
SUBGROUP_FILTER { Type=0x25, Length, [SetID], Range... }
OBJECTID_FILTER { Type=0x26, Length, [SetID], Range... }
PRIORITY_FILTER { Type=0x27, Length, [SetID], Range... }
OBJECT_PROPERTY_FILTER { Type=0x28, Length, [SetID], [Property Type], Range... }
TRACK_PROPERTY_FILTER  { Type=0x29, Length, [SetID], [Property Type], Range... }
Range { Start, [End] }
]]></artwork>
          <t>Each Range Filter is a sequence of Start/End (vi64) inclusive Range pairs
prefixed with a Length (vi64) in bytes and a SetID (8 bits).
The Track and Object Property Filters include an additional prefix for Property Type (vi64).
The final End in a sequence of Ranges can be omitted to indicate no end.</t>
          <t>Start is delta encoded from the prior Range's End or from 0
for the first Range, and End is delta encoded from the current Range's Start.
Any delta encoding that results in a value that exceeds 2^64-1
<bcp14>MUST</bcp14> be rejected with REQUEST_ERROR with error code INVALID_FILTER.
For example, to express ranges 3-5 and 10-15: the first Start is 3
(delta from 0), the first End is 2 (5 minus 3), the second Start is 5
(10 minus 5), and the second End is 5 (15 minus 10).</t>
          <t>All filter parameters with the same SetID value are combined using logical
"AND" operations, then all the resulting sets are combined using logical
"OR" operations.  The final result is SetID=0 OR SetID=1 OR ... SetID=255,
where each SetID=i is the AND of filters with SetID=i.</t>
          <t>The Track Property filter parameter <bcp14>MAY</bcp14> appear multiple times in a
SUBSCRIBE_TRACKS message or REQUEST_UPDATE for it.
All other filter parameters <bcp14>MAY</bcp14> appear multiple times in a FETCH, SUBSCRIBE,
SUBSCRIBE_TRACKS, PUBLISH_OK, or REQUEST_UPDATE (on a subscription, from the subscriber only)
message.  If the same combination of Parameter Type, SetID, and Property Type
(only in the Track and Object Property Filters) repeat in any message,
an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR with error code INVALID_FILTER.</t>
          <t>In REQUEST_UPDATE, Length can be 0 to remove a filter parameter or non-zero
to replace that entire filter parameter including all sets and Property Types.
If a filter parameter is omitted from REQUEST_UPDATE, the value is unchanged.
If omitted from other messages, the default is no filter.</t>
          <t>Range Filters are only allowed if the setup option MAX_FILTER_RANGES
is non-zero, which limits the total number of Ranges allowed
in all Range Filter parameters for a given subscription or fetch.
If this limit is exceeded, an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR
with error code INVALID_FILTER.</t>
          <t>The Track Property Filter can be used in SUBSCRIBE_TRACKS to filter PUBLISH
messages with required Track Property types and values.  PUBLISH messages
which pass the filter will be forwarded while those which do not pass it
will not be forwarded nor will any Objects.</t>
          <t>The Object Property Filter can be used to filter Objects with required
Object Property types and values.  It only filters Object Properties in
the Object header, and does not evaluate Track Properties in PUBLISH
messages.</t>
        </section>
        <section anchor="combining-filters">
          <name>Combining Filters</name>
          <t>All filter types are combined using logical "AND" operations
to further restrict which tracks and objects pass all filter criteria.
This includes all Range Filters <xref target="range-filters"/> and Location
Filters <xref target="location-filters"/>, which can be evaluated in any order.
The Forward parameter is also a type of filter.  The publisher <bcp14>MUST</bcp14>
forward only objects that pass all filters.</t>
          <artwork><![CDATA[
Pass = Forward AND Location Filters AND Range Filters
]]></artwork>
        </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 using SUBSCRIBE_NAMESPACE
(see <xref target="subscribing-to-namespaces"/>).</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. The Track Namespace Prefix carried in these messages is
compared against the namespaces known to the receiver using Namespace Prefix
Matching (<xref target="namespace-prefix-matching"/>).</t>
        <t>SUBSCRIBE_NAMESPACE requests namespace discovery: the publisher 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>By sending SUBSCRIBE_NAMESPACE, the subscriber indicates that it trusts the
relay to be authoritative for namespaces matching the requested prefix.
NAMESPACE messages received on the SUBSCRIBE_NAMESPACE response stream inherit
this trust and do not independently carry authorization.</t>
        <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 or any other reason, the Publisher sends a PUBLISH_SKIPPED message on the
SUBSCRIBE_TRACKS response stream to indicate the Full Track Name of the
Subscription that was not created. The Publisher <bcp14>MUST NOT</bcp14> send a PUBLISH for a
Track for a given SUBSCRIBE_TRACKS after PUBLISH_SKIPPED has been sent,
scoped to a single PUBLISH.  If, for example, the publisher disconnects from
a relay and later reconnects and sends a new PUBLISH, the relay <bcp14>MAY</bcp14> send the new
PUBLISH downstream.
If desired, the subscriber can issue a SUBSCRIBE to establish a subscription to
that track.</t>
        <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 is cancelled as described in
<xref target="request-cancellation"/>, by resetting or sending STOP_SENDING on the 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 the Original Publisher for one or more tracks in 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
that includes this namespace to any subscriber that has sent a
SUBSCRIBE_NAMESPACE whose prefix matches this namespace.</t>
        <t>A subscriber can receive a PUBLISH_NAMESPACE on a request stream for a
namespace that falls within an active SUBSCRIBE_NAMESPACE prefix. This
occurs when SUBSCRIBE_NAMESPACE or its response is in flight at the same time
as a PUBLISH_NAMESPACE, or when an original publisher sends PUBLISH_NAMESPACE
to advertise namespaces within the prefix being discovered. Such a
PUBLISH_NAMESPACE is valid and <bcp14>MAY</bcp14> carry an AUTHORIZATION TOKEN parameter.
Its lifetime is independent of the SUBSCRIBE_NAMESPACE stream.</t>
        <t>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. 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 anchor="filtering-subscribetracks">
        <name>Filtering SUBSCRIBE_TRACKS</name>
        <t>Range Filters <xref target="range-filters"/> can be used in SUBSCRIBE_TRACKS to filter
Tracks in a namespace using the Track Property Filter. Objects published in
the resulting Subscriptions can be filtered by any Range Filter.</t>
        <section anchor="large-namespaces">
          <name>Relay Resource Protection in Large Namespaces</name>
          <t>Relays <bcp14>SHOULD</bcp14> aggregate and propagate filters upstream on subscriptions,
especially namespace subscriptions,
to conserve and protect their resources from excessive load.  They <bcp14>MAY</bcp14>
also impose limits on the number of publishers in a namespace, by rejecting
or closing namespace subscriptions with the error NAMESPACE_TOO_LARGE, or
CONFLICTING_FILTERS if too many disjoint filters are requested on downstream
subscriptions across a large number of subscribers, or PREFIX_OVERLAP if different
subscribers force an aggregated upstream subscription to overlap.</t>
        </section>
      </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 carried in the SUBSCRIBER_PRIORITY parameter
(<xref target="subscriber-priority"/>), and can be updated.  The subscriber priority of an
individual schedulable object is the subscriber priority of the request that
caused that object to be sent. When subscriber priority is changed, a best
effort <bcp14>SHOULD</bcp14> be
made to apply the change to all objects that have not been scheduled, but it is
implementation dependent what happens to objects that have already been
scheduled.</t>
        <t><tt>Publisher Priority</tt> is a priority number associated with an individual
schedulable object.  A default for the subscription is specified in the
DEFAULT_PUBLISHER_PRIORITY Track Property (<xref target="publisher-priority"/>). Publisher
priority can also be set per subgroup or datagram in the subgroup header or
datagram (see <xref target="data-streams"/>), which overrides the default.</t>
        <t><tt>Group Order</tt> is a property of an individual subscription.  It can be either
'Ascending' (groups with lower group ID are sent first), or 'Descending'
(groups with higher group ID are sent first).  The subscriber optionally
communicates its group order preference in the SUBSCRIBE or SUBSCRIBE_TRACKS
message; the publisher's preference, carried in the
DEFAULT_PUBLISHER_GROUP_ORDER Track Property (<xref target="group-order-pref"/>), is used if
the subscriber did not express one (by omitting the Group Order parameter). The
group order of an existing subscription cannot be changed.</t>
      </section>
      <section anchor="scheduling-algorithm">
        <name>Scheduling Algorithm</name>
        <t>When an MOQT publisher has multiple schedulable objects it can choose between,
the objects <bcp14>SHOULD</bcp14> be selected as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>If two objects have different subscriber priorities associated with them,
the one with <strong>the highest subscriber priority</strong> is scheduled to be sent first.</t>
          </li>
          <li>
            <t>If two objects have the same subscriber priority, but different publisher
priorities, the one with <strong>the highest publisher priority</strong> is scheduled to be
sent first.</t>
          </li>
          <li>
            <t>If two objects in 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 datagram is sent first.</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.  Either timeout value can
also be set as an Object Property on the first object in a subgroup, overriding
the Track-level value for that subgroup.  If either timeout is set as an Object
Property on any object other than the first in a subgroup, it is ignored.  For
each type of timeout, the
publisher's value is the Object Property when present on the first object of the
subgroup, and the Track Property otherwise.  If both the publisher's value and
the subscriber's value are non-zero, the smaller of the two is used.</t>
      <t>If the OBJECT_DELIVERY_TIMEOUT is not zero, the MOQT implementation <bcp14>MUST</bcp14> retain
the time at which the 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>If one or more downstream subscribers to a track have Forward=1, the relay
<bcp14>MUST</bcp14> set Forward=1 upstream in order to receive and forward the requested
Objects. When no downstream subscriber has Forward=1, the relay chooses the
upstream Forward value at its discretion, considering the following
tradeoffs and deployment considerations:</t>
        <ul spacing="normal">
          <li>
            <t>Setting Forward=1 upstream starts object delivery and pre-warms the
relay's cache, so objects are available when a downstream subscriber
sets Forward=1. This reduces latency but consumes upstream and publisher
resources for content no downstream subscriber is currently receiving.</t>
          </li>
          <li>
            <t>Setting Forward=0 upstream avoids that work, at the cost of higher
latency when forwarding is later enabled.</t>
          </li>
        </ul>
      </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.</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
Location filter to avoid churn as downstream subscribers with disparate filters
subscribe and unsubscribe from a Track. Aggregating subscriptions can also
help relays conserve resources especially with disparate filters or
SUBSCRIBE_TRACKS in a namespace with a large number of Tracks
(see <xref target="large-namespaces"/>).</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 anchor="namespace-prefix-matching">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.</t>
        <t>Relays prioritize forwarded Objects as described in <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 Body (..),
}
]]></artwork>
      </figure>
      <t>The following Message Types are defined. The Stream column indicates
which stream type each message is sent on: Control indicates the
control stream (<xref target="session-init"/>), and Request indicates a bidirectional
request stream. Messages marked "First" <bcp14>MUST</bcp14> be the first message on a
new request stream.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
            <th align="left">Stream</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x01</td>
            <td align="left">RESERVED (SETUP for version 00)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">RESERVED (CLIENT_SETUP for &lt;= 10)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">RESERVED (SERVER_SETUP for &lt;= 10)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x20</td>
            <td align="left">RESERVED (CLIENT_SETUP in &lt;= 16)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x21</td>
            <td align="left">RESERVED (SERVER_SETUP in &lt;= 16)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x2F00</td>
            <td align="left">SETUP (<xref target="message-setup"/>)</td>
            <td align="left">Control</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
            <td align="left">Control, Request</td>
          </tr>
          <tr>
            <td align="right">0x3</td>
            <td align="left">SUBSCRIBE (<xref target="message-subscribe-req"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x1D</td>
            <td align="left">PUBLISH (<xref target="message-publish"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x1E</td>
            <td align="left">RESERVED (PUBLISH_OK in &lt;= 17)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">PUBLISH_DONE (<xref target="message-publish-done"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x16</td>
            <td align="left">FETCH (<xref target="message-fetch"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x18</td>
            <td align="left">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_SKIPPED (<xref target="message-publish-skipped"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">REQUEST_UPDATE (<xref target="message-request-update"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">REQUEST_OK (<xref target="message-request-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">REQUEST_ERROR (<xref target="message-request-error"/>)</td>
            <td align="left">Request</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session.
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 the
Message Body, which is defined by each message type.  If the length does not
match the length of the Message Body, the receiver <bcp14>MUST</bcp14> close the session with 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 defined in
the following subsections.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> repeat the same Parameter Type in a message unless the
parameter definition explicitly allows multiple instances of that type to
be sent in a single message. Receivers <bcp14>SHOULD</bcp14> check that there are no
unexpected duplicate parameters and close the session with <tt>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, SUBSCRIBE_TRACKS, 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 or SUBSCRIBE_TRACKS, the publisher's preference from
the Track is used. If omitted from FETCH, the receiver uses Ascending (0x1).</t>
        </section>
        <section anchor="location-filter">
          <name>LOCATION FILTER Parameter</name>
          <t>The LOCATION_FILTER parameter (Parameter Type 0x21) uses length-prefixed
encoding. It <bcp14>MAY</bcp14> appear in a SUBSCRIBE, PUBLISH_OK or REQUEST_UPDATE (for a
subscription) message. It is a Location Filter (see <xref target="location-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="subgroup-filter">
          <name>SUBGROUP FILTER Parameter</name>
          <t>The SUBGROUP_FILTER parameter (Type 0x25) selects objects with specified
Ranges of Subgroup ID.  See <xref target="range-filters"/>.</t>
        </section>
        <section anchor="objectid-filter">
          <name>OBJECTID FILTER Parameter</name>
          <t>The OBJECTID_FILTER parameter (Type 0x26) selects objects with specified
Ranges of Object ID.  See <xref target="range-filters"/>.</t>
        </section>
        <section anchor="priority-filter">
          <name>PRIORITY FILTER Parameter</name>
          <t>The PRIORITY_FILTER parameter (Type 0x27) selects objects with specified
Ranges of Publisher Priority.  See <xref target="range-filters"/>.
If a decoded value exceeds 255, the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER since Publisher Priority
is an 8-bit field.</t>
        </section>
        <section anchor="object-property-filter">
          <name>OBJECT PROPERTY FILTER Parameter</name>
          <t>The OBJECT_PROPERTY_FILTER parameter (Type 0x28) selects objects with
required Ranges of Property Value for a required Object Property
Type which <bcp14>MUST</bcp14> be even, i.e. a single integer value
(see <xref target="moq-key-value-pair"/>), otherwise the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER. See <xref target="range-filters"/>.</t>
        </section>
        <section anchor="track-property-filter">
          <name>TRACK PROPERTY FILTER Parameter</name>
          <t>The TRACK_PROPERTY_FILTER parameter (Type 0x29) selects tracks with
required Ranges of Property Value for a required Track Property
Type which <bcp14>MUST</bcp14> be even, i.e. a single integer value
(see <xref target="moq-key-value-pair"/>), otherwise the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER. See <xref target="range-filters"/>.</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, SUBSCRIBE_NAMESPACE_OK, SUBSCRIBE_TRACKS_OK,
PUBLISH_NAMESPACE_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="location-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 anchor="max-filter-ranges">
            <name>MAX FILTER RANGES</name>
            <t>The MAX_FILTER_RANGES option (Type 0x06) limits the peer's total number of Ranges
(Start/End pairs) allowed concurrently in all Range filter <xref target="range-filters"/>
parameters for a given subscription or fetch.  The default value is 0, so if not
specified, the peer <bcp14>MUST NOT</bcp14> send any such filter parameters.  If this limit is
exceeded, an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR with error code INVALID_FILTER.</t>
          </section>
          <section anchor="max-request-updates">
            <name>MAX_REQUEST_UPDATES</name>
            <t>The MAX_REQUEST_UPDATES option (Option Type 0x08) communicates the maximum
number of unacknowledged REQUEST_UPDATE messages per request stream that
the endpoint is willing to receive.</t>
            <t>A REQUEST_UPDATE is considered outstanding from when it is sent until the
sender receives the corresponding REQUEST_OK or REQUEST_ERROR response.
The sender <bcp14>MUST NOT</bcp14> have more than MAX_REQUEST_UPDATES outstanding
REQUEST_UPDATEs on any single request stream at a time. Each REQUEST_OK
or REQUEST_ERROR response restores one credit on that stream. An
implementation that processes and responds to a REQUEST_UPDATE immediately
might not detect when a peer has pipelined messages exceeding its limit;
coalescing REQUEST_UPDATE processing (see <xref target="message-request-update"/>) can be
more effective at enforcing MAX_REQUEST_UPDATES.</t>
            <t>The value is encoded as a variable-length integer. A value of 0 means the
endpoint does not limit REQUEST_UPDATE concurrency. If not present, the default
value is 0.</t>
            <t>If an endpoint receives a REQUEST_UPDATE on a stream that already has
MAX_REQUEST_UPDATES outstanding REQUEST_UPDATEs, it <bcp14>MUST</bcp14> close the session
with <tt>TOO_MANY_REQUEST_UPDATES</tt>.</t>
          </section>
        </section>
      </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).
This allows, for example, moving the publishers and subscribers of a common set
of tracks to a common relay without draining their entire session.</t>
        <t>The GOAWAY message does not impact subscription state. A subscriber
<bcp14>SHOULD</bcp14> individually UNSUBSCRIBE 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),
}
]]></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>
        </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, SUBSCRIBE_TRACKS) and <bcp14>MUST</bcp14> be empty;
an endpoint that receives a non-empty Track Name in a Redirect for a
namespace-scoped request <bcp14>MUST</bcp14> close the session with 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>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, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS. Relays are not required to follow
redirects from upstream
and <bcp14>MAY</bcp14> forward a REDIRECT response to matching downstream requests. A relay
<bcp14>MAY</bcp14> cache a REDIRECT response for 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>INVALID_FILTER:</dt>
            <dd>
              <t>A filter parameter is invalid.</t>
            </dd>
            <dt>MALFORMED_TRACK:</dt>
            <dd>
              <t>In response to a FETCH, a relay publisher detected the track was
malformed (see <xref target="malformed-tracks"/>).</t>
            </dd>
          </dl>
          <t>The following are errors for use by the subscriber. They can appear in response
to PUBLISH or PUBLISH_NAMESPACE, unless otherwise noted.</t>
          <dl>
            <dt>UNINTERESTED:</dt>
            <dd>
              <t>The subscriber is not interested in the track or namespace.</t>
            </dd>
          </dl>
          <t>Errors below can only be used in response to one message type.</t>
          <dl>
            <dt>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>
            <dt>CONFLICTING_FILTERS:</dt>
            <dd>
              <t>In response to SUBSCRIBE_TRACKS, the filter parameters conflict among
too many subscribers to aggregate the subscription upstream or otherwise
efficiently service it.</t>
            </dd>
          </dl>
        </section>
      </section>
      <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>An endpoint that receives a REQUEST_UPDATE other than in the two cases above
<bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</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, unless it
is coalescing failed updates to produce just one REQUEST_ERROR for multiple
REQUEST_UPDATE messages.</t>
        <t>The number of outstanding REQUEST_UPDATEs on a single request stream is
limited by the MAX_REQUEST_UPDATES Setup Option (<xref target="max-request-updates"/>).</t>
        <t>If a parameter previously set on the request is not present in
<tt>REQUEST_UPDATE</tt>, its value remains unchanged.</t>
        <t>There is no 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 Location Filter
(see <xref target="location-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, SUBSCRIBE_TRACKS or PUBLISH_NAMESPACE, the
responder <bcp14>MUST</bcp14> close the bidi stream (see <xref target="graceful-request-closure"/>).</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 request
stream, it is likely to arrive at the receiver before late-arriving objects, and
often even late-opening streams. However, the receiver uses it as an indication
that it should receive any late-opening streams in a relatively short time.</t>
        <t>Note that some objects in the subscribed track might never be delivered,
because a stream was reset, or never opened in the first place, due to the
delivery timeouts (see <xref target="delivery-timeouts"/>).</t>
        <t>A sender <bcp14>MUST NOT</bcp14> send PUBLISH_DONE until it has closed all streams it will ever
open, and has no further datagrams to send, for a subscription. After sending
PUBLISH_DONE, the sender can immediately destroy subscription state, although
stream state can persist until delivery completes. The sender might persist
subscription state to enforce the subgroup delivery timeout.</t>
        <t>A sender <bcp14>MUST NOT</bcp14> destroy subscription state until it sends PUBLISH_DONE, though
it can choose to stop sending objects (and thus send PUBLISH_DONE) for any
reason.</t>
        <t>A subscriber that receives PUBLISH_DONE <bcp14>SHOULD</bcp14> set a timer of at least the
larger of SUBGROUP_DELIVERY_TIMEOUT or OBJECT_DELIVERY_TIMEOUT in case some
objects are still inbound due to prioritization or packet loss. The subscriber
<bcp14>MAY</bcp14> dispense with a timer if it unsubscribed or is otherwise no longer
interested in objects from the track. Once the timer has expired, the receiver
destroys subscription state once all open streams for the subscription have
closed. A subscriber <bcp14>MAY</bcp14> discard subscription state earlier, at the cost of
potentially not delivering some late objects to the application.  The
subscriber <bcp14>SHOULD</bcp14> send STOP_SENDING on all streams related to the subscription
when it deletes subscription state.</t>
        <t>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 location 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 unless filters were requested.  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 (vi64) = 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 (vi64) = 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, using
the serialized format from <xref target="namespace-name-format"/>, if the publisher is a
relay that has received PUBLISH_NAMESPACE messages for namespaces
<tt>example.2ecom-123-100</tt> and <tt>example.2ecom-123-200</tt>, a SUBSCRIBE_NAMESPACE for
<tt>example.2ecom-123</tt> 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"/>, though they
are handled differently from the same Parameters on Subscriptions, as outlined
below.</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>
        <section anchor="parameters-on-subscribetracks">
          <name>Parameters on SUBSCRIBE_TRACKS</name>
          <t>Any Parameter that can be specified on a Subscription (ie: in SUBSCRIBE) is valid
in SUBSCRIBE_TRACKS, unless otherwise specified. These parameters are copied
over as the default Subscription parameters when a PUBLISH is sent as a result of
SUBSCRIBE_TRACKS. The Parameters are not explicitly communicated, with the
exception of FORWARD and GROUP_ORDER as described below.</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>
          <t>If the GROUP_ORDER parameter (<xref target="group-order"/>) is present in this message,
PUBLISH messages resulting from this SUBSCRIBE_TRACKS will include the
GROUP_ORDER parameter with the same value. If the GROUP_ORDER parameter is
omitted from this message, PUBLISH messages resulting from this
SUBSCRIBE_TRACKS will use the publisher's default group order preference
(see <xref target="group-order-pref"/>).</t>
        </section>
      </section>
      <section anchor="message-publish-skipped">
        <name>PUBLISH_SKIPPED</name>
        <t>The publisher sends the <tt>PUBLISH_SKIPPED</tt> control message to indicate it will
not send a PUBLISH message to initiate a new Subscription for a Track in the
SUBSCRIBE_TRACKS's Track Namespace. All PUBLISH_SKIPPED messages are in
response to a SUBSCRIBE_TRACKS, so only the namespace tuples after the
'Track Namespace Prefix' are included in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-publish-blocked-format">
          <name>MOQT PUBLISH_SKIPPED Message</name>
          <artwork><![CDATA[
PUBLISH_SKIPPED Message {
  Type (vi64) = 0xF,
  Length (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>There is no Object Status value indicating the end of a Subgroup. The end of a
Subgroup is signaled by closing its stream with a FIN
(see <xref target="closing-subgroup-streams"/>).</t>
            <t>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"/>).
An Object <bcp14>MUST</bcp14> have an empty payload unless its Object Status value is
registered as permitting a payload in the Object Status registry
(<xref target="iana-object-status"/>). Of the values defined in this document, only Normal
(0x0) permits a payload.</t>
          </section>
          <section anchor="object-properties">
            <name>Object Properties</name>
            <t>Any Object with status Normal can have properties (<xref target="properties"/>).
If an endpoint receives properties on an Object with status that is
not Normal, it <bcp14>MUST</bcp14> close the session with 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 set by the Original Publisher that are intended to be visible
to relays, but not modified by them, <bcp14>SHOULD</bcp14> be placed in Immutable Properties
(<xref target="immutable-properties"/>), which enables end-to-end authentication schemes.</t>
            <t>Object Properties are serialized as a length in bytes followed by
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).</t>
            <artwork><![CDATA[
Object Properties {
  Properties Length (vi64),
  Properties (..),
}
]]></artwork>
            <t>Object Property types are registered in the IANA table
'MOQ Properties'. See <xref target="iana"/>.</t>
          </section>
        </section>
      </section>
      <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 (vi64) = 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. Closing a bidirectional request stream is
governed by <xref target="request-cancellation"/>.</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 (vi64) = 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; Objects with no
properties set Properties Length to 0. When set to 0, the field is never present.</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, unless the intervening Objects did not pass the
subscriber's filters.</t>
            </li>
            <li>
              <t>It determined all Object IDs between the current and previous Object IDs
on the Subgroup stream belong to different Subgroups or do not exist,
or do not pass the subscriber's filters.</t>
            </li>
          </ul>
          <t>If the relay does not know if an Object is the next Object, it <bcp14>MUST</bcp14> reset the
Subgroup stream and open a new one to forward it.</t>
          <t>Since SUBSCRIBEs always end on a group boundary, an ending subscription can
always cleanly close all its subgroups. A sender that terminates a stream
early for any other reason (e.g., to handoff to a different sender) <bcp14>MUST</bcp14>
reset the stream. Senders <bcp14>SHOULD</bcp14> terminate a stream on
Group boundaries to avoid doing so.</t>
          <t>An MOQT implementation that processes a stream FIN is assured it has received
all objects in a subgroup from the start of the subscription. If a relay, it
can forward stream FINs to its own subscribers once those objects have been
sent. A relay <bcp14>MAY</bcp14> treat receipt of 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
(0x78-0x7F, 0x3800-0x3FFF) are not defined by MOQT.
See <xref target="properties"/> for usage guidance.</t>
      <section anchor="subgroup-delivery-timeout-ext">
        <name>SUBGROUP_DELIVERY_TIMEOUT</name>
        <t>SUBGROUP_DELIVERY_TIMEOUT (Property Type 0x06) is a Track and Object Property.
It is a varint.  Its semantics are defined in <xref target="delivery-timeouts"/>.  As an
Object Property on the first object in a subgroup, it overrides the Track-level
value for that subgroup; it is ignored on any other object in the subgroup.</t>
      </section>
      <section anchor="object-delivery-timeout-ext">
        <name>OBJECT_DELIVERY_TIMEOUT</name>
        <t>OBJECT_DELIVERY_TIMEOUT (Property Type 0x02) is a Track and Object Property.
It is a varint.  Its semantics are defined in <xref target="delivery-timeouts"/>.  As an
Object Property on the first object in a subgroup, it overrides the Track-level
value for that subgroup; it is ignored on any other object in the subgroup.</t>
      </section>
      <section anchor="max-cache-duration">
        <name>MAX CACHE DURATION</name>
        <t>MAX_CACHE_DURATION (Property Type 0x04) is a Track Property.</t>
        <t>It is an integer expressing
the number of milliseconds an Object can be served from a cache. If present, the
relay <bcp14>MUST NOT</bcp14> start forwarding any individual Object received through this
subscription or fetch after the specified number of milliseconds has elapsed
since the beginning of the Object was received.  This means Objects earlier in a
multi-object stream will expire earlier than Objects later in the stream. Once
Objects have expired from cache, their state becomes unknown (see
<xref target="model-object"/>).</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 Endpoints, but also consider the impacts end to
end over several hops of MOQT.</t>
      <t>MOQT uses a trust model where on each hop the Endpoints need to be
securely identified, authorized to use resources of the peer, provide
confidentiality and integrity to prevent third party attacks and limit
monitoring and leakage of privacy sensitive information. The relays
within the chain from original publisher to end subscribers will have
access to Track names, Track Properties, Object Properties, as well as the object's content
unless it is end-to-end encrypted <xref target="sec-media"/>.</t>
      <t>Publishers, including Relays, require authorization to prevent unauthorized
subscriptions to content. Subscription requests can carry
authorization tokens (see <xref target="sec-authorization"/>) to prove the
subscriber's right to access specific tracks or namespaces. Relays
that aggregate subscriptions from multiple downstream subscribers <bcp14>MUST</bcp14>
ensure each subscriber is independently authorized.</t>
      <section anchor="subscription-amplification">
        <name>Subscription Amplification</name>
        <t>A malicious subscriber could attempt to overwhelm a publisher or relay
by requesting subscriptions to many tracks simultaneously. Relays
<bcp14>SHOULD</bcp14> implement rate limiting on subscription requests and <bcp14>MAY</bcp14> reject
excessive subscriptions with REQUEST_ERROR using the EXCESSIVE_LOAD error code.
Publishers <bcp14>SHOULD</bcp14> monitor
the number of active subscriptions and enforce limits to prevent
resource exhaustion from a single subscriber or session.</t>
        <t>TODO: Describe Cache Poisoning attacks</t>
      </section>
      <section anchor="communication-security">
        <name>Communication Security</name>
        <t>MOQT depends on a secure transport to provide confidentiality,
integrity and endpoint authentication between subscriber and
publisher. Implementations use QUIC or WebTransport to fulfill
the basic communication security requirements and these
implementations <bcp14>SHOULD</bcp14> follow best practices for TLS 1.3 and QUIC.
Relays <bcp14>MUST</bcp14> use authentication to prevent impersonation.</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 Endpoint-level identification
and token-based schemes for fine-grained access control.</t>
        <t>Mutual TLS is expected to be widely used for Endpoint 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 Endpoint level authentication is
provided, what a particular identified Endpoint 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">0x06</td>
              <td align="left">MAX_FILTER_RANGES</td>
              <td align="left">
                <xref target="max-filter-ranges"/></td>
            </tr>
            <tr>
              <td align="right">0x07</td>
              <td align="left">MOQT_IMPLEMENTATION</td>
              <td align="left">
                <xref target="moqt-implementation"/></td>
            </tr>
            <tr>
              <td align="right">0x08</td>
              <td align="left">MAX_REQUEST_UPDATES</td>
              <td align="left">
                <xref target="max-request-updates"/></td>
            </tr>
            <tr>
              <td align="right">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">LOCATION_FILTER</td>
              <td align="left">
                <xref target="location-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x22</td>
              <td align="left">GROUP_ORDER</td>
              <td align="left">
                <xref target="group-order"/></td>
            </tr>
            <tr>
              <td align="left">0x25</td>
              <td align="left">SUBGROUP_FILTER</td>
              <td align="left">
                <xref target="subgroup-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x26</td>
              <td align="left">OBJECTID_FILTER</td>
              <td align="left">
                <xref target="objectid-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x27</td>
              <td align="left">PRIORITY_FILTER</td>
              <td align="left">
                <xref target="priority-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x28</td>
              <td align="left">OBJECT_PROPERTY_FILTER</td>
              <td align="left">
                <xref target="object-property-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x29</td>
              <td align="left">TRACK_PROPERTY_FILTER</td>
              <td align="left">
                <xref target="track-property-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x32</td>
              <td align="left">NEW_GROUP_REQUEST</td>
              <td align="left">
                <xref target="new-group-request"/></td>
            </tr>
            <tr>
              <td align="left">0x34</td>
              <td align="left">TRACK_NAMESPACE_PREFIX</td>
              <td align="left">
                <xref target="track-namespace-prefix-param"/></td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>Message Parameters - List which params can be repeated in the table.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-properties">
        <name>Properties</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x02</td>
              <td align="left">OBJECT_DELIVERY_TIMEOUT</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="object-delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x04</td>
              <td align="left">MAX_CACHE_DURATION</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="max-cache-duration"/></td>
            </tr>
            <tr>
              <td align="right">0x06</td>
              <td align="left">SUBGROUP_DELIVERY_TIMEOUT</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="subgroup-delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x0B</td>
              <td align="left">IMMUTABLE_PROPERTIES</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="immutable-properties"/></td>
            </tr>
            <tr>
              <td align="right">0x0E</td>
              <td align="left">DEFAULT_PUBLISHER_PRIORITY</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="publisher-priority"/></td>
            </tr>
            <tr>
              <td align="right">0x22</td>
              <td align="left">DEFAULT_PUBLISHER_GROUP_ORDER</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="group-order-pref"/></td>
            </tr>
            <tr>
              <td align="right">0x30</td>
              <td align="left">DYNAMIC_GROUPS</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="dynamic-groups"/></td>
            </tr>
            <tr>
              <td align="right">0x3C</td>
              <td align="left">PRIOR_GROUP_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-group-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x3E</td>
              <td align="left">PRIOR_OBJECT_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-object-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">Any</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>The following table contains provisional registrations for other active drafts in the moq wg.
These entries share the same Property Type space as the table above.</t>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">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 according
to the Key-Value-Pair encoding; odd types use their length field, even
types are skipped by parsing a varint value.</t>
        <ul spacing="normal">
          <li>
            <t>MOQ Properties - we wish to define the following registration policies:
            </t>
            <ul spacing="normal">
              <li>
                <t>0x00 to 0x77: Standards Action or IESG Approval (1-byte encoding)</t>
              </li>
              <li>
                <t>0x78 to 0x7F: Reserved for application-specific use (1-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x80 to 0x37FF: Specification Required (2-byte encoding)</t>
              </li>
              <li>
                <t>0x3800 to 0x3FFF: Reserved for application-specific use (2-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x4000 to 0x7FFF: Reserved for Mandatory Track Properties
(see <xref target="mandatory-track-properties"/>). Properties registered in this range
<bcp14>MUST</bcp14> have Track scope; Object scope properties <bcp14>MUST NOT</bcp14> be registered in
this range.</t>
              </li>
              <li>
                <t>0x8000 and above: First Come First Served</t>
              </li>
            </ul>
            <t>
Code points reserved for application-specific use will never be allocated
by IANA. Applications using these values do not need to coordinate with
IANA.  Note that applications consuming tracks from uncoordinated sources may
encounter different semantics for the same code points, creating potential
collision risks.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-object-status">
        <name>Object Status</name>
        <t>This document establishes a registry for Object Status values (see
<xref target="object-status"/>). The "Payload" column indicates whether an Object with that
status is permitted to carry a non-empty payload.</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Payload</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Normal</td>
              <td align="left">Yes</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">End of Group</td>
              <td align="left">No</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">End of Track</td>
              <td align="left">No</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
          </tbody>
        </table>
        <t>New Object Status values are registered using the Specification Required
policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>). Each registration <bcp14>MUST</bcp14> indicate whether the
status permits a payload.</t>
      </section>
      <section anchor="iana-session-level-tracks">
        <name>Session-Level Track Names</name>
        <t>This document establishes a registry for session-level track names
under the <tt>.session</tt> namespace (see <xref target="session-level-tracks"/>). The
registration policy is Specification Required (per <xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <t>Each registration must include:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Track Namespace</td>
              <td align="left">The track namespace under the <tt>.session</tt> namespace, can be empty</td>
            </tr>
            <tr>
              <td align="left">Track Name</td>
              <td align="left">The track name (bytes) within the full namespace</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">Brief description of the track's purpose</td>
            </tr>
            <tr>
              <td align="left">Change Controller</td>
              <td align="left">Who may update the registration</td>
            </tr>
            <tr>
              <td align="left">Specification</td>
              <td align="left">Reference to the defining specification</td>
            </tr>
          </tbody>
        </table>
        <t>This document does not define any initial entries.</t>
      </section>
      <section anchor="iana-error-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">TOO_MANY_REQUEST_UPDATES</td>
                <td align="center">0x1B</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">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">CONFLICTING_FILTERS</td>
                <td align="center">0x35</td>
                <td align="left">
                  <xref target="message-request-error"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_FILTER</td>
                <td align="center">0x36</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>Generative AI tools were used to assist with drafting and editing text for this
document. All AI-generated content was reviewed and approved by the editors.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="WebTransport">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   WebTransport over HTTP/3 is a binding of the WebTransport protocol
   framework [OVERVIEW] to HTTP/3 [HTTP3].  It provides support for
   unidirectional streams, bidirectional streams, and datagrams, all
   multiplexed within the same HTTP/3 connection.  WebTransport enables
   application clients constrained by the Web security model to
   communicate with a remote application server using a secure
   multiplexed transport.

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

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

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-13"/>
        </reference>
        <reference anchor="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>Authorization scheme for MOQT using Common Access Tokens</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <author fullname="Chris Lemmons" initials="C." surname="Lemmons">
              <organization>Comcast</organization>
            </author>
            <author fullname="Gwendal Simon" initials="G." surname="Simon">
              <organization>Synamedia</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="18" month="June" year="2026"/>
            <abstract>
              <t>   A token-based authorization scheme for use with Media Over QUIC
   Transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-c4m-01"/>
        </reference>
        <reference anchor="PPA">
          <front>
            <title>Privacy Pass Authentication for Media over QUIC (MoQ)</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="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="6" month="July" year="2026"/>
            <abstract>
              <t>   This document specifies an end-to-end authenticated encryption scheme
   for application objects transmitted via Media over QUIC (MoQ)
   Transport.  The scheme enables original publishers that share a
   symmetric key with end subscribers, to ensuring that MoQ relays are
   unable to decrypt object contents.  Additionally, subscribers can
   verify the integrity and authenticity of received objects, confirming
   that the content has not been modified in transit.  Additionally it
   allows MoQ parameters to be protected so the publisher can select if
   they are readable and/or modifiable by relays.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-secure-objects-01"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="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 5497?>

<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-18">
        <name>Since draft-ietf-moq-transport-18</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add Range Filters that can filter Objects from Subscriptions and
SUBSCRIBE_TRACKS (#1765)</t>
          </li>
          <li>
            <t>Add MAX_REQUEST_UPDATES Setup Option and TOO_MANY_REQUEST_UPDATES error
(#1613)</t>
          </li>
          <li>
            <t>Allow multiple concurrent subscriptions per Track (#1775)</t>
          </li>
          <li>
            <t>Move GROUP_ORDER from PUBLISH_OK to SUBSCRIBE_TRACKS (#1777)</t>
          </li>
          <li>
            <t>Rename PUBLISH_BLOCKED to PUBLISH_SKIPPED (#1779)</t>
          </li>
          <li>
            <t>Remove Request ID from GOAWAY (#1623)</t>
          </li>
          <li>
            <t>Clarify session vs. per-request GOAWAY migration (#1787)</t>
          </li>
          <li>
            <t>Define FIN vs. RST/STOP_SENDING semantics on request streams (#1698)</t>
          </li>
          <li>
            <t>Unexpected REQUEST_UPDATE is a session error (#1784)</t>
          </li>
          <li>
            <t>Update Forward State handling for relays (#1782)</t>
          </li>
          <li>
            <t>Clarify authorization trust model for namespace subscriptions (#1656)</t>
          </li>
          <li>
            <t>Clarify namespace discovery and NAMESPACE sending (#1710)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delivery timeouts are both Track and Object Properties (#1476)</t>
          </li>
          <li>
            <t>Make the Object Status payload rule extensible via IANA registry (#1760)</t>
          </li>
          <li>
            <t>Datagrams take precedence in cross-forwarding-preference scheduling ties
(#1780)</t>
          </li>
          <li>
            <t>Remove relay exception for reordering or dropping objects (#1762)</t>
          </li>
          <li>
            <t>Specify relay processing rules for known Track Properties (#1771)</t>
          </li>
          <li>
            <t>Recommend Immutable Properties for relay-visible, unmodifiable data (#1759)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename control Message Payload field to Message Body (#1756)</t>
          </li>
          <li>
            <t>Clarify Group and Subgroup terminology and object model (#1708)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-17">
        <name>Since draft-ietf-moq-transport-17</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Unified moqt:// URI scheme for QUIC and WebTransport (#1486)</t>
          </li>
          <li>
            <t>Add fragment identifier support for moqt URIs (#1571)</t>
          </li>
          <li>
            <t>Split SUBSCRIBE_NAMESPACE into SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS
(#1542)</t>
          </li>
          <li>
            <t>Remove Required Request ID (#1615)</t>
          </li>
          <li>
            <t>Add REDIRECT for request errors and established subscriptions (#1534)</t>
          </li>
          <li>
            <t>Allow GOAWAY on request streams to migrate individual requests (#1617)</t>
          </li>
          <li>
            <t>Add Request ID to GOAWAY (#1559)</t>
          </li>
          <li>
            <t>Remove PUBLISH_OK message type, make it a REQUEST_OK alias (#1611)</t>
          </li>
          <li>
            <t>Generalize stream reset codes to all request streams, add new codes,
align with PUBLISH_DONE (#1606)</t>
          </li>
          <li>
            <t>Add Track Properties to REQUEST_OK (#1576)</t>
          </li>
          <li>
            <t>Add support for mandatory-to-understand track extensions (#1509)</t>
          </li>
          <li>
            <t>Exclude your own tracks from SUBSCRIBE_NAMESPACE (#1596)</t>
          </li>
          <li>
            <t>Add Session-Level Tracks reserved namespace (#1562)</t>
          </li>
          <li>
            <t>Allow coalescing REQUEST_UPDATE processing (#1540)</t>
          </li>
          <li>
            <t>SUBSCRIBE takes precedence over SUBSCRIBE_NAMESPACE at relay (#1533)</t>
          </li>
          <li>
            <t>Don't close the Session for unknown errors (#1561)</t>
          </li>
          <li>
            <t>Clarify REQUEST_UPDATE failure behavior for all request types (#1539)</t>
          </li>
          <li>
            <t>Clarify SUBSCRIBE_NAMESPACE stream closure semantics (#1541)</t>
          </li>
          <li>
            <t>FETCH to a track with no objects returns INVALID_RANGE (#1537)</t>
          </li>
          <li>
            <t>Clarify FETCH_OK End Location semantics (#1536)</t>
          </li>
          <li>
            <t>Clarify definition of scope (#1629)</t>
          </li>
          <li>
            <t>Clarify Joining Fetch behavior:
            </t>
            <ul spacing="normal">
              <li>
                <t>Joining FETCH is unaffected by forward changing to 0 (#1620)</t>
              </li>
              <li>
                <t>Joining Fetch forward state mismatch is a request error (#1609)</t>
              </li>
              <li>
                <t>Clarify Joining Fetch ordering with Forward State transitions (#1577)</t>
              </li>
            </ul>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Make Object ID and Group ID delta encoded in Fetch responses (#1586)</t>
          </li>
          <li>
            <t>Add FIRST_OBJECT bit to SUBGROUP_HEADER type (#1618)</t>
          </li>
          <li>
            <t>Split DELIVERY_TIMEOUT into two types of timeout (#1605)</t>
          </li>
          <li>
            <t>FILL_TIMEOUT parameter (#1490)</t>
          </li>
          <li>
            <t>Forbid relays from lying about LARGEST_OBJECT (#1621)</t>
          </li>
          <li>
            <t>Allow publisher to reopen subgroup after REQUEST_UPDATE forward 0-&gt;1
(#1583)</t>
          </li>
          <li>
            <t>Allow 7-byte varint and non-minimal encodings (#1595)</t>
          </li>
          <li>
            <t>Padding streams and datagrams (#1475)</t>
          </li>
          <li>
            <t>Close session when delta encoding wraps (#1560)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify Object existence and cross-source contradictions (#1566)</t>
          </li>
          <li>
            <t>Clarify immutable track properties (#1535)</t>
          </li>
          <li>
            <t>Improve Startup Latency and 0-RTT guidance (#1544)</t>
          </li>
          <li>
            <t>Improve Security Considerations section (#1625)</t>
          </li>
          <li>
            <t>Rewrite abstract and introduction (#1556)</t>
          </li>
          <li>
            <t>Define textual aliases for REQUEST_OK by request type (#1610)</t>
          </li>
          <li>
            <t>Add IANA registry for Setup Options (#1564)</t>
          </li>
          <li>
            <t>Add provisional registry for LOC properties (#1624)</t>
          </li>
          <li>
            <t>Update MOQ Properties registration policies (#1525)</t>
          </li>
          <li>
            <t>Add stream type column to message type table (#1555)</t>
          </li>
          <li>
            <t>Fix grease examples to match 0x7f multiplier (#1569)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-16">
        <name>Since draft-ietf-moq-transport-16</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Change control stream from bidi to a pair of uni streams (#1510)</t>
          </li>
          <li>
            <t>Collapse CLIENT_SETUP and SERVER_SETUP into a single SETUP message (#1510)</t>
          </li>
          <li>
            <t>Move requests to bidirectional streams; remove cancel messages (#1389)</t>
          </li>
          <li>
            <t>Remove MAX_REQUEST_ID/REQUESTS_BLOCKED (#1471)</t>
          </li>
          <li>
            <t>New variable-length integer encoding (#1016)</t>
          </li>
          <li>
            <t>Encode Message Parameters as Type-Value pairs (#1462)</t>
          </li>
          <li>
            <t>Add GREASE for Setup Options, Properties, and error code registries (#1460)</t>
          </li>
          <li>
            <t>Add RENDEZVOUS_TIMEOUT parameter for SUBSCRIBE (#1447)</t>
          </li>
          <li>
            <t>Add PUBLISH_BLOCKED message for SUBSCRIBE_NAMESPACE flow control (#1452)</t>
          </li>
          <li>
            <t>Add Timeout field to GOAWAY message (#1497)</t>
          </li>
          <li>
            <t>Add GOING_AWAY to REQUEST_ERROR codes (#1434)</t>
          </li>
          <li>
            <t>Add EXCESSIVE_LOAD error code (#1479)</t>
          </li>
          <li>
            <t>Add NAMESPACE_TOO_LARGE error and stream reset for large namespaces (#1496)</t>
          </li>
          <li>
            <t>Add TOO_FAR_BEHIND stream reset code (#1445)</t>
          </li>
          <li>
            <t>Add REQUEST_UPDATE to list of REQUEST_ERROR causes (#1466)</t>
          </li>
          <li>
            <t>Enforce REQUEST_OK/ERROR as first message on the response stream (#1499)</t>
          </li>
          <li>
            <t>Allow joining FETCH for PUBLISH and REQUEST_UPDATE with forward=1 (#1335)</t>
          </li>
          <li>
            <t>Allow DELIVERY_TIMEOUT value of 0 to mean no timeout (#1450)</t>
          </li>
          <li>
            <t>Allow zero-element namespaces (#1472)</t>
          </li>
          <li>
            <t>Clarify EXPIRES parameter update mechanism (#1448)</t>
          </li>
          <li>
            <t>Remove TRACK_STATUS from REQUEST_UPDATE (#1436)</t>
          </li>
          <li>
            <t>Define how to use auth token cache safely with multiple streams (#1430)</t>
          </li>
          <li>
            <t>Constrain encoding/parsing of track namespace and names (#1512)</t>
          </li>
          <li>
            <t>Reserve Property type ranges for application-specific use (#1473)</t>
          </li>
          <li>
            <t>Make EndGroup in Subscription Filters a delta (#1470)</t>
          </li>
          <li>
            <t>Copy DELIVERY_TIMEOUT min requirement from parameter to property (#1427)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify prior Object semantics after End of Range indicators in FETCH (#1513)</t>
          </li>
          <li>
            <t>Clarify datagram status and properties cases (#1444)</t>
          </li>
          <li>
            <t>Clarify Stream Count includes empty subgroups (#1449)</t>
          </li>
          <li>
            <t>Clarify language for malformed tracks in a subgroup with END_OF_GROUP (#1464)</t>
          </li>
          <li>
            <t>Properties can appear in mutable list or inside Immutable Properties (#1442)</t>
          </li>
          <li>
            <t>Clarify immutable property preservation requirements (#1441)</t>
          </li>
          <li>
            <t>Clarification for Track Alias uniqueness (#1418)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Setup Parameters to Setup Options (#1461)</t>
          </li>
          <li>
            <t>Rename Extension Headers to Properties (#1504)</t>
          </li>
          <li>
            <t>Add security/privacy considerations for MOQT_IMPLEMENTATION (#1511)</t>
          </li>
          <li>
            <t>Add editorial text on bandwidth probing techniques (#1477)</t>
          </li>
          <li>
            <t>Explain idle connection handling (#1443)</t>
          </li>
          <li>
            <t>Fix "SUBSCRIBE_NAMESPACE with short prefixes" (#1502)</t>
          </li>
          <li>
            <t>Add generative AI disclosure per IRTF guidelines</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-15">
        <name>Since draft-ietf-moq-transport-15</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Key-Value-Pairs for Parameters and Headers (#1315)</t>
          </li>
          <li>
            <t>Use Request ID in PUBLISH_NAMESPACE_{DONE/CANCEL} (#1329)</t>
          </li>
          <li>
            <t>Remove delivery related params from TRACK_STATUS for Subscribers (#1325)</t>
          </li>
          <li>
            <t>PUBLISH does not imply PUBLISH_NAMESPACE (#1364)</t>
          </li>
          <li>
            <t>Allow Start Location to decrease in SUBSCRIBE_UPDATE (#1323)</t>
          </li>
          <li>
            <t>Change SUBSCRIBE_UPDATE to REQUEST_UPDATE and expand ability to update (#1332)</t>
          </li>
          <li>
            <t>Put SUBSCRIBE_NAMESPACE on a stream, make Namespaces and PUBLISH independent
(#1344)</t>
          </li>
          <li>
            <t>Require NAMESPACE before NAMESPACE_DONE (#1392)</t>
          </li>
          <li>
            <t>Allow the '*' or the empty namespace in SUBSCRIBE_NAMESPACE (#1393)</t>
          </li>
          <li>
            <t>Relays match SUBSCRIBE to both Tracks and Namespaces (#1397)</t>
          </li>
          <li>
            <t>Clarify sending requests after sending GOAWAY (#1398)</t>
          </li>
          <li>
            <t>Add Retry Interval to REQUEST_ERROR (#1339)</t>
          </li>
          <li>
            <t>Add Extension Headers to PUBLISH, SUBSCRIBE_OK, and FETCH_OK (#1374)</t>
          </li>
          <li>
            <t>Move track properties to extensions, scope parameters (#1390)</t>
          </li>
          <li>
            <t>Add LARGEST_OBJECT parameter to TRACK_STATUS (#1367)</t>
          </li>
          <li>
            <t>Duplicate subscription processing (#1341)</t>
          </li>
          <li>
            <t>Address Track Name/Namespace edge cases (#1399)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Enable mixing datagrams with streams in one track (#1350)</t>
          </li>
          <li>
            <t>Clarify datagrams and subgroups (#1382)</t>
          </li>
          <li>
            <t>Redo the way we deal with missing Objects and Object Status (#1342)</t>
          </li>
          <li>
            <t>Allow unknown ranges in a FETCH response (#1331)</t>
          </li>
          <li>
            <t>Do not reopen subgroups after delivery timeout or STOP_SENDING (#1396)</t>
          </li>
          <li>
            <t>Clarify handling of unknown extensions (#1395)</t>
          </li>
          <li>
            <t>Clarify Delivery Timeout for datagrams (#1406)</t>
          </li>
          <li>
            <t>Disallow DELIVERY_TIMEOUT=0 (#1330)</t>
          </li>
          <li>
            <t>Malformed track due to multiple priorities for one subgroup (#1317)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Subscribers can migrate networks too (#1410)</t>
          </li>
          <li>
            <t>Rename Version Specific Parameters to Message Parameters (#1411)</t>
          </li>
          <li>
            <t>Clarify valid joining fetch subscription states (#1363)</t>
          </li>
          <li>
            <t>Formatting names for logs (#1355)</t>
          </li>
          <li>
            <t>A Publisher might not use the congestion window (#1408)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-14">
        <name>Since draft-ietf-moq-transport-14</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Always use ALPN for version negotiation (#499)</t>
          </li>
          <li>
            <t>Consolidate all the Error Message types (#1159)</t>
          </li>
          <li>
            <t>Change MOQT IMPLEMENTATION code point to 0x7 (#1191)</t>
          </li>
          <li>
            <t>Add Forward to SUBSCRIBE_NAMESPACE (#1220)</t>
          </li>
          <li>
            <t>Parameters for Group Order, Subscribe Priority and Subscription Filter (redo) (#1273)</t>
          </li>
          <li>
            <t>REQUEST_OK message (#1274)</t>
          </li>
          <li>
            <t>Subscribe Update Acknowledgements (#1275)</t>
          </li>
          <li>
            <t>Disallow DELETE and USE_ALIAS in CLIENT_SETUP (#1277)</t>
          </li>
          <li>
            <t>Remove Expires field from SUBSCRIBE_OK (#1282)</t>
          </li>
          <li>
            <t>Make Forward a Parameter (#1283)</t>
          </li>
          <li>
            <t>Allow SUBSCRIBE_UPDATE to increase the end location (#1288)</t>
          </li>
          <li>
            <t>Add default port for raw QUIC (#1289)</t>
          </li>
          <li>
            <t>Unsubscribe Namespace should be linked to Subscribe Namespace (#1292)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Fetch Object serialization optimization (#949)</t>
          </li>
          <li>
            <t>Make default PUBLISHER PRIORITY a parameter, optional in Subgroup/Datagram (#1056)</t>
          </li>
          <li>
            <t>Allow datagram status with object ID=0 (#1197)</t>
          </li>
          <li>
            <t>Disallow object extension headers in all non-Normal status objects (#1266)</t>
          </li>
          <li>
            <t>Objects for malformed track must not be cached (#1290)</t>
          </li>
          <li>
            <t>Remove NO_OBJECTS fetch error code (#1303)</t>
          </li>
          <li>
            <t>Clarify what happens when max_cache_duration parameter is omitted (#1287)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Request ID field in MAX_REQUEST_ID (#1250)</t>
          </li>
          <li>
            <t>Define and draw subscription state machine (#1296)</t>
          </li>
          <li>
            <t>Omitting a subgroup object necessitates reset (#1295)</t>
          </li>
          <li>
            <t>Define duplication rules for header extensions (#1293)</t>
          </li>
          <li>
            <t>Clarify joining fetch end location (#1286)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-13">
        <name>Since draft-ietf-moq-transport-13</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add an AUTHORITY parameter (#1058)</t>
          </li>
          <li>
            <t>Add a free-form SETUP parameter identifying the implementation (#1114)</t>
          </li>
          <li>
            <t>Add a Request ID to SUBSCRIBE_UDPATE (#1106)</t>
          </li>
          <li>
            <t>Indicate which params can appear PUBLISH* messages (#1071)</t>
          </li>
          <li>
            <t>Add TRACK_STATUS to the list of request types affected by GOAWAY (#1105)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Object IDs within Subgroups (#1042)</t>
          </li>
          <li>
            <t>Use a bit in Datagram Type to convey Object ID = 0 (#1055)</t>
          </li>
          <li>
            <t>Corrected missed code point updates to Object Datagram Status (#1082)</t>
          </li>
          <li>
            <t>Merge OBJECT_DATAGRAM and OBJECT_DATAGRAM_STATUS description (#1179)</t>
          </li>
          <li>
            <t>Objects are not schedulable if flow-control blocked (#1054)</t>
          </li>
          <li>
            <t>Clarify DELIVERY_TIMEOUT reordering computation (#1120)</t>
          </li>
          <li>
            <t>Receiving unrequested Objects (#1112)</t>
          </li>
          <li>
            <t>Clarify End of Track (#1111)</t>
          </li>
          <li>
            <t>Malformed tracks apply to FETCH (#1083)</t>
          </li>
          <li>
            <t>Remove early FIN from the definition of malformed tracks (#1096)</t>
          </li>
          <li>
            <t>Prior Object ID Gap Extension header (#939)</t>
          </li>
          <li>
            <t>Add Extension containing immutable extensions (#1025)</t>
          </li>
        </ul>
        <t><strong>Relay Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain FETCH routing for relays (#1165)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> for multi-publisher relay handling (#1115)</t>
          </li>
          <li>
            <t>Filters don't (usually) determine the end of subscription (#1113)</t>
          </li>
          <li>
            <t>Allow self-subscriptions (#1110)</t>
          </li>
          <li>
            <t>Explain Namespace Prefix Matching in more detail (#1116)</t>
          </li>
        </ul>
        <t><strong>Explanatory</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain Modularity of MOQT (#1107)</t>
          </li>
          <li>
            <t>Explain how to resume publishing after losing state (#1087)</t>
          </li>
        </ul>
        <t><strong>Major Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename ANNOUNCE to PUBLISH_NAMESPACE (#1104)</t>
          </li>
          <li>
            <t>Rename SUBSCRIBE_DONE to PUBLISH_DONE (#1108)</t>
          </li>
          <li>
            <t>Major FETCH Reorganization (#1173)</t>
          </li>
          <li>
            <t>Reformat Error Codes (#1091)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-12">
        <name>Since draft-ietf-moq-transport-12</name>
        <ul spacing="normal">
          <li>
            <t>TRACK_STATUS_REQUEST and TRACK_STATUS have changed to directly mirror
SUBSCRIBE/OK/ERROR (#1015)</t>
          </li>
          <li>
            <t>SUBSCRIBE_ANNOUNCES was renamed back to SUBSCRIBE_NAMESPACE (#1049)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-11">
        <name>Since draft-ietf-moq-transport-11</name>
        <ul spacing="normal">
          <li>
            <t>Move Track Alias from SUBSCRIBE to SUBSCRIBE_OK (#977)</t>
          </li>
          <li>
            <t>Expand cases FETCH_OK returns Invalid Range (#946) and clarify fields (#936)</t>
          </li>
          <li>
            <t>Add an error code to FETCH_ERROR when an Object status is unknown (#825)</t>
          </li>
          <li>
            <t>Rename Latest Object to Largest Object (#1024) and clarify what to
do when it's incomplete (#937)</t>
          </li>
          <li>
            <t>Explain Malformed Tracks and what to do with them (#938)</t>
          </li>
          <li>
            <t>Allow End of Group to be indicated in a normal Object (#1011)</t>
          </li>
          <li>
            <t>Relays <bcp14>MUST</bcp14> have an upstream subscription to send SUBSCRIBE_OK (#1017)</t>
          </li>
          <li>
            <t>Allow AUTHORIZATION TOKEN in CLIENT_SETUP, SERVER_SETUP and
other fixes (#1013)</t>
          </li>
          <li>
            <t>Add PUBLISH for publisher initiated subscriptions (#995) and
fix the PUBLISH codepoints (#1048, #1051)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-10">
        <name>Since draft-ietf-moq-transport-10</name>
        <ul spacing="normal">
          <li>
            <t>Added Common Structure definitions - Location, Key-Value-Pair and Reason
Phrase</t>
          </li>
          <li>
            <t>Limit lengths of all variable length fields, including Track Namespace and Name</t>
          </li>
          <li>
            <t>Control Message length is now 16 bits instead of variable length</t>
          </li>
          <li>
            <t>Subscribe ID became Request ID, and was added to most control messages. Request ID
is used to correlate OK/ERROR responses for ANNOUNCE, SUBSCRIBE_NAMESPACE,
and TRACK_STATUS.  Like Subscribe ID, Request IDs are flow controlled.</t>
          </li>
          <li>
            <t>Explain rules for caching in more detail</t>
          </li>
          <li>
            <t>Changed the SETUP parameter format for even number parameters to match the
Object Header Extension format</t>
          </li>
          <li>
            <t>Rotated SETUP code points</t>
          </li>
          <li>
            <t>Added Parameters to TRACK_STATUS and TRACK_STATUS_REQUEST</t>
          </li>
          <li>
            <t>Clarified how subscribe filters work</t>
          </li>
          <li>
            <t>Added Next Group Filter to SUBSCRIBE</t>
          </li>
          <li>
            <t>Added Forward flag to SUBSCRIBE</t>
          </li>
          <li>
            <t>Renamed FETCH_OK field to End and clarified how to set it</t>
          </li>
          <li>
            <t>Added Absolute Joining Fetch</t>
          </li>
          <li>
            <t>Clarified No Error vs Invalid Range FETCH_ERROR cases</t>
          </li>
          <li>
            <t>Use bits in SUBGROUP_HEADER and DATAGRAM* types to compress subgroup ID and
extensions</t>
          </li>
          <li>
            <t>Coalesced END_OF_GROUP and END_OF_TRACK_AND_GROUP status</t>
          </li>
          <li>
            <t>Objects that Do Not Exist cannot have extensions when sent on the wire</t>
          </li>
          <li>
            <t>Specified error codes for resetting data streams</t>
          </li>
          <li>
            <t>Defined an Object Header Extension for communicating a known Group ID gap</t>
          </li>
          <li>
            <t>Replaced AUTHORIZATION_INFO with AUTHORIZATION_TOKEN, which has more structure,
compression, and additional Auth related error codes (#760)</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8S9+3YbyZE3+H8+Ra10zteUDUAkdVf7MpBIdfOzRHJIqm2P
xx9ZBApkuUEUjCqIoiXNs+yz7JNt3DOyqkjJnp5dnWM3AVTlNTIyLr+IGA6H
oSmbefEyu/eumJZ5Vn0oVtm/v997nZ2s8kW9rFbNvZCfn6+KDy+zq+rvw0a/
DtNqssiv4NXpKp81w7JoZsPkieHWizDNG3ji0874ZPdLmMCHi2p18zKrm2kI
5XL1MmtW67rZ3tx8sbkd8lWRv8yye38szrN8Mc32Fk2xWhSNH0u9Pr8q67qs
Fic3S2h6b/fkTbiuVj9frKr10uZxoPO4F34ubuD36cuQDbOrOMm/r8tJ+FAs
1gX8kt36dpY11M+9P0If5eIi+wGfxO+v8nIO38OU/w3nPqpWF/h1vppcwteX
TbOsXz58iE/hV+WHYqSPPcQvHp6vquu6eAjvP8T3Lsrmcn3ODQ6vLx4mS4kP
zGH16sY3TQ+O+MVRWaWvPLxtW0aXzdX8Xgh1A2t8ms+rBUzvpqhDfZWvmtO/
ryvo52W2qMKyfJn9pakmg6yG91bFrIa/bq74D9j+q3y5hCX5awj5urmsVriQ
Q/hflpULaOF4lO1DF/nPa2iYvmZ6OV5f5nX7J1iWfFH+I29gZ19mr8t6UtH3
BS9zveDH/22Cv4wm1VVIO/tplP2U1+W8LD64rn4qJ021Sn9Je/qhqi7mhe/q
Az784cO/XdAvPV3tjbLj66JpXD97+cJ997UeStgJfNh3gT+vKjyJQIEw5laf
41H2ZlUupsV87rodz6Hf5Pu063dFk/uO8xk++29X8PUtnS6q1RW8/IEOBZ6A
l9nRm9cvNjc34TOcSzuJMOfhDlH08Lo4J+IaImE+gnO9mPlWXo9P3MNIipPH
2PXh4bj1/XJVfsgnN8NlXtdDJCl4KnmgLibrVTGszv9WTJr6ZQjD4TDLz2vo
ftKEcHJZ1kiX66ti0WTTYlYuijq7lbFlG+8O/v3kwSDLs+X6fF7Wlw+Bu9ST
VXlehOWqAsqv5llzmTfZar2oXRPInPxijDJsKZsX8ER+AX02l0U2K/IGRgvv
zQJ8rovMjiCeo/XkMoNjAGMv8is8T3mTX6zoT1iHalU2ZQF/Y1dLOJdlPg+r
Yl7m50DJzY30WC2hQziu2XnVXGbLqlw0w6Ya0h/0anMJ7OriEogIWClxv6bI
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
XFaAvfH+WBKVfvpU5oscqwafkNu61YQIXsQpMfUQ8QPJrCI7xyHJUn5WFBvE
BGKUNYpEExibZNimanMYQnJVTZ1lE68uhTtEgJKmLTpiWd7qqlgh4EPrWqV5
kY25dbT/SDR9kFa1gq5lHCMhOt4+fBQthMIwo4xpRjViAXdftboRu72OIM21
yBumj7LzONk7Aeq1uwsg0JLZuaMcitiucSaxrbaCKDMaEKe+qmq2AUkLokWt
iuWc2Ys+LtIRpju5qj6oL1h6CyI6MaqiUJWbXAuIgyNTBpeUc8kBuAgqkv0V
1kHExxDu3DcFb/mJU9byuSkVyObXvbvPDkelSqE1ifYXsUZf+k4om/PpZFG2
rSw/AEZiIdKskRRbAxuEzjIQnSHlTzlUiZaPD4t29L0bHZFg8iupNh1dkyQi
l8UB5bqyuZVKVUzufI0h4aIktliLi+EHym0n0rJ4z3aeOgoYSiifGmSskRQo
yxWdiCx1pi5SxmhJQWQCrbKnAW3w34vSqd5YbsDVIiCTugG9WCznMCO80pZI
PyTNiNRNfJ1CxbS8sGrZftQb/dEM5DLhJsUejbHybIvTEc7EKxt30Sp2p5wW
B+xY7XfA+90QvhuF48Ix4BBeSxxR0jAHBmnzEt9G5eldzgQTqlCpQNIhxAxL
RufsQ52oeZZGBL3M1uRyZc0i4fqUPGXz47PnSJ/w3zfZxtaQ8qepu+jBy+w5
J2mTAPLWgGo1ADeUSYDlGedZoPYfPd/c5B4evXkDfWx3+tjefJx2sxHhKheM
IcxgAflPBNX2DoNSF3CMeWccKYIMQe9UUN51aS4l2YeYUAO3emU5awPrvbYV
MbIXizuRjbAny0WmuadGykPpdIhoERP1ddRuSRrUZi21tz+G9YJDlqekBPVx
ZytXKIewhmOH8bFU2IbE5x1lyaEHMWX6RVyxzoKhEUXiGoy9B2melCpXNFFT
CC5Jq5F4kEYZmxtAkBR8MaY1BSmlZULNhyZ3ctZhYp/u33Fhd456koRq8+Pj
zc3NIZ4ToOLc8t3m4gdv9ep4sZYldZdh1KfF8ocq+OiOkXNEmxTfjclVJEcS
mVpXiKRrvJKvMus0lkXiOBCB0Jq4REXrVnqdStIkcZPX6kjsIVWMHYqG77bV
+5bZkBgVcYL2LVxk0W2ol5N+wbtVcyyrRrN1PfmdDd9APsuG3EFEVJ4e/IHi
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
x2qdxNHXaTUncZviFSMGlK41JzejHx4fq3fiHOVLYYtRSzt9PX794+7pASj7
b94e/JH2JfJjFQu4TAaqOR+HyOeHpMANyb04rIHnf/liOgZ8ohWkhOQO9Dvu
aoB1tE6q1pywQjdM44dbzLzT1k5In0z4ovaMC9rii8wPo/KW6KY8NT40sChk
odjf/eHgZI/uq9M34z013Txp34TTcorZhii+GDU0AbFEbJKmHNBw+si6Ur15
S1V58mzSZGWOmtxXoHcMSUuylX59WmpA6F1eVtn3K791qq6vFzFsTiIoprK4
X++130Kw9bxnO7k/Zw5AxnZrw3oLiZhyQoahrXgHWGhUFp9wF8HK8S/JiURX
TrVSEMI5zkxSnPEjkp+0s4Ox+7F1H7/nKxV7wFBTkGY4M0jJuyxWp3fj/T+f
pr4B3phXdwstyRuZlBz0lqhiJZyPTzNxalcrBQtrkI9//KdO9z4akW8ZZAQq
wayXU3SJ8mYkPktgVmLHx7VFh1HWKn9N5jfxV6QSKAEk9V7grxifMpE8ygkS
a5B4u9h9HYVlBB36O9YKaaktRULF2kOz+7bldgjqY9KEF9QrSNRY4hFfJYst
WuwwK2jbSmhA1iuKegtMUZdVOSnSWId3eoU7JS5e6xbEKHDKnC7G4bzU0DbC
kKH/3Yr8GDaCZTDoMMgxXmkpzMukSkt9uW4wN+RD9OPklH5RTocqG8mNNp/r
jpHzYUpVPKn4LxK6oLYkayClaZwikAFfpaGTREbutBHPrSALJWXTYXgNFsxb
CbraelLKFclJvW59EhR58+U5cYC0kMG8vopOTeiom4bAp1BDZ2Js2UiqjWJY
AEvNp7EbghWQ691wJaBiGLAW171Vq4nw75jj//usTlCoOkutv6zpNigbQ2t1
BuKk1n7kAmspbghPcUhrHTUpuLc74iVnUms7OAIb6SAIYq0WEYhyWFgw9rVT
AhqNbqUhSiUSTmADy7W20P1WV679E3FRRKMoZWREckPAfLgq5zCFAhlCrTYF
jt+MtXeQxPXIJj51PVYn9prmIL2lXvZZqlOcufREsZShelVKKmEkRWCjY7LF
Slw5PiK7GJszcplFIrjKZ1ft8cq1VvL2CgYGBEfoNX9NbADxQAZCMnM6RYTE
VExMbA56wN0KmP1o9/XBu3cg2O7uROu7vIN7IXAmtzqLip1Zd9DkHRvIe6P2
llHYw5JydCoZwsZxAPnKwRr7a9kZgHrxoZrDxNL8XrknbnWkYEpLFPMXU3fA
8Ok7pkLWpIhU9MGzThZFHhsv3ylDY3smD2RWKpS85mVkx5LhHBU97AmdKbzu
LmMeOkQuOAFS4lDuQhG5/4BYzWc9C3J8+Vp8jcgChp2JeVaDnM04IBkE6Bjo
s8Lg50jvUi1MyAYubBDLc7aoMJSTg8f0Vr9muM1cnIm3NEvMCxUKtRZ5H/j5
upyTTNBUS82hIK7tVxQmcz6vgPlj4Q2rVTTee7fT3xWmgfo4yl6/f4UJZgiR
/+Lxo+cYlUQYETgI/O3TJ8+3Y8ELxBTBvFyHI/+BrX01T7dgQaeWij9qZ8lw
IlM42oE5CC4bAm/hzuJyQYL9G5BUSbdaLLM6rZBa9Uojaof1XkpRqRMKu6OG
DEIoAEpUi4fVDIQaDOyaV5OftZLQHOhjMQGZgqL1roXRrSS8SJrBAmuKRnSB
sMO3jDAVtAAQN/K687Khy43EEW4diR3D2j8UVljOKoZj/S0Ob5FKxQa8Decw
wOty2lz6K4xMBBpKIpPlKnog0lTLJZ4vDZrD4PYbdv216l3A683NUhSH88Jh
ZVuwcepOjCQcU6fB8L2ERUUIbnp+AzK4wPRAl1dYQ5O0FQEGt9q6hlMLNyvG
uun0UZYor3BNgQUwJm0NjBtNxGx5CT7dGTKsOcpGdKlMCTqEbyvdxLlpih/r
iFYul7irQVrKIk0jzMkgZP1gc9erzkTcwZZsj9DeUBea5Fw1A+c0q4SiK99q
HHJcE/awYIkMfGyqUPaeMRNMY3y4V3N9Max+ZNgfMyxrDRKN2ydNKYi1mnVp
ZADnTNd0JONY4LqaFwwgp/npUqsmM6NXKSuJFLukCnsUNORPmAvrqCkKsBQL
HXBEzNdC2UmpQhoapEB0k1JTludODdi4OCZlaERPQ6rNNSV85sruXKlPn0OW
7Sq9aZoMpnZ8EXZqY/vJkwf2PiWUprPUR8NBrCoyd8axfaAqs7ReV6B/XHFU
Var2XcK2uVEGVmViwATHx5CkJR475x3VtNG2V3FKwe2Y1afRgD0381QID/t8
TIaYE4CwGp2DSeZjzX/BvIeSD70+2N8NPld6DYtUDDVZFVw3EypMxjk0Vobu
49Tr6xql7xbZX2IGFc087gVJbGldSyFctslzbRS+dtHIBZe6JEaibGgS84GA
yw9VOQ1rlHhRYF3d6J7FDGM0deDbJ5xLZ7luyLl7O5fjhNZ6h6HWckU+LdZQ
tJFBLL9d01XRSqb36tURSLKHRwevdk8RUM/xXJc5ioWmZpDpTq+ceFvmjqHg
waP8jASLPNd0yjle2Pgm0eL6KoM+4BRy0nvUtEkUkO5IqI5UHoRTr5e0to0I
N3yQET3EccFw2kUjkuKXxXQtKPtFOnriVkGgVXW91hp33UvUMzkqViDZxdjg
0EpZgxhkgx7HHUY6UWuMZL6iz0lt1FXwSknM4OOiA/GwwgbHvC6SCgXWYB9E
BA7bsDcJ7xv7Fa2dLUacRCtNEGPgaZcJ3uYQmrz+GTtKSCa3y5wzIS856pjj
STi1ayHKBnVvgSkBsUuNA2pDyyLhuKlbfcDorKEygNE4ra+HWK93icWLVhQp
c4YZR6xixZmDUA6SLBXlxaLSOOkrF63C9dh1AXFzOcu/7nAnElNKTwzcpjlE
qbjsWkAIDrTCLPKMhfCBXywhw6EqyLrC1wTb2xJF8dP9hI8KLKutTGIiBs1k
szedF2d8xNEKlFgR5brXgCNR86oPMXH02SEfJmnBQT5zH/2wQnOoi55MqvL6
yMykezJ3MkM9vwkxYqlo1x2SBPQuoFIHMUEwfJ1ZiBBj/pNemCoVgnrwB297
Uytx9TPecHAyE+AvzSN2Gr5tIpmfSIx9NY/jSQJ1vHUiHc8YTyQkFZLaFXhg
xAS0l1Zd2hBEX084WBVuUqRTkA4H3U5w92vb/VTPb9i8RuVlKeiebOvRcRS3
R+HpaUBDtpuihSlNXnQFYubYWw0LWLj1Q5I9KJydGLzECLxNJ9Z6Z89EnVcC
zzaimPjgDBe2Z/K1317v4mzv6j/RrQlg39arh1KTraUvkEbq45SUnjKrLzVZ
QTIS3k5J/iU51O+GRf5a0Wy//sqDn+GqxiLc2edfqkVq8/b24jHjx3SZeh/f
iPTxQB7fsK178NWB/ET/1/fYr1PM3687X/S9BGOVrZWP7S9aL1GbnxNypZcc
IcFLfd19/qYx9vX5uWfUvV/Dm2noBD2SsKx0g/AbbTF5M7gtiV25L3Xn3GZm
3a++OpGf7P/aE7njzV93l+wb3/ycufMNn/oJ4/OtH+zT5xZ3/WeG+5uvdxq/
6d3k9DO2nyI+WptMcR+393n3gezv8/+PnfQP/+5zFq8fbPQ3Xz3pt/TJJSm8
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
Uvw0t2PKa/NHeR0dRcfncDruorHrdpYjYxyZ//DF0UEC+0L2JfWc0P5upBaB
rv1pQJUjeuYrZRAKgsBtfVNYUA0a+ygwmu32vHrL2aQEryG3gyzo5/1EfkbL
u8S5AivnLYVnpBsJeIblYBFN7bqXVxR8dpF95yXl7A1Enipkb/gYIqrnWTbI
waQhay7XH5I4kuMgpKg7Tp8xtSuyK20fIKAOVrpneZZW/+ewrq4MF5sOG8k9
S2lMAqZsdaBq5pIne0irLoBp2SRRARbitCT1YFShyvDy+GT35MUxfiBOSPxj
NZ+BazyNN2um7J0sQ8IixS6N0w+Q5aGNEAOKkMhhGKgcUvZ5DCzR+WlGWd3o
ZZ1ubvVDzJftBLya/Cjb0ll+3YiTVNF+76en1hnybDq+PK5tqdccsRaYgdhM
vCaiSocxrbSbgIgaFUnIjYz7eImLoAmvMoa0Pee+NSQqlzmgxT291GQfx8ei
msd82/0kYuXDl0KTyyu06lCMX9VT9KSm3NsKjEW1QZS9nYN8QdpCSDI++FyP
AaEOy6z2cd0dp06trSBKUsIqNUUu4EsQAhnW6H/9139Rp7NhVR8AH4D/+wQg
NjbeTh98vTlyHz9t5q/iGdrYeZB8/H07ua42trbih79h++BKuWz/Y6ylemPN
ucJOSdFcqR9f/EZ5RJYg6TvVcdUXThTJvGNBJpitLufmzQzs+GI4ARgQmgmZ
Oy9O5CPtQsLKqsiB3MRGviacInIkiQP6cJ3RZ+Z08rqRLusFVEt+8YRgG3G7
n/nqd7/agcJgGcX8r1r1ua5ctFgmWq4cPdjjKlbt5e3++VUWwn2kvXu0vpq1
1Lv+A9C77ffbO/iyo/3j/aOf9/eqDWThRt0YiM9BHm5vb/Z71+/wHz932++/
3s569/jpwf6zk5fWyf/3u2on799n611/7uL/Hv0P6d3dtXMXhSJ07kG+tJ+t
d2vn7r+9d0+2t+EIYmc2XL5Is1xdQVSo+M+vKvn+vr3boZVlc8R171Vbv6uv
B/qnvRupjP279O4evcwlFK9JJna9OxLvLorvv9fcfZ31DsJoxQ5iQlCvd3/v
ld3Dl4nl5TrGVktxbT/X3O3sZ2c2zYGAE/tNv3ufa+6+r/zcUYF3fwLHk3be
/Hes7AN8GWfOF7Lmi/98tpV9aL3LTgR2MD0Nn3vu9uhl3nb0PaQ8aqq3LK3s
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
3OkNsLAlxaFCxWGLWrNBJc25JpZJaNL5bDPbNvAtp6ZJmtli7iZ7ulaKbcQK
Vmc6ITQFUGOwHlNsm02ptCH04EyBBdRRPvi+3CLgcSP9FXtv2WLTeb+n4BpD
UJxFb/DBNjQ1zTpb5rfzd5vELmezws4OrYgU9BrZJMt7HN+3xgWMJtgyg4kn
lmQK5v/R82FgKQquebgAkh0OdgW+KwsyYfhBXJ+lp+DnGJbvjyfdIU2+QZbD
Xbn7bw/uVmMwRDQRcNGFpOxQIFQUkLkUQy5IS76fsmHihQjHAf1R54wOPOIQ
hip7Loijl+OP+7t7+0dIlSLhDgFUInpTwSzKDV9Ja/W3Qp0qKxjKSypO/EzR
HBYxaZhWc7CefaD+lO41lGmUeeWliFaeFgtPT17fpkY0FVuZfmR+koAJ3o/y
ssBqY/v99uYfVBwIje1sDmWks66QFQrqr2TnE9y0+PHIqR4vRWr97mZa4pA0
fNaAvFHZBDmv5IF9DqtkjdzTRmy3LiAGw5UBcBlTXMA5KbRaiaLoSa0aNPp1
adygfLlz36186ZrUo8ZBHh6+fLJ79PL7/R8PnmEX7/e7eAfAlhqqB3UqhiCO
JrPnusA8DvGenaKPIFlh8U9hzosV9EEPHtwwSSIs0qPkEuz6xRq4PWgFhfG3
WJvBSpcWaFRpgQb64solGkmoFV73EN9WCLUK+UJ+ddkLhiCQe2WF8J4/F2ar
X1wIzkbBLix4Q8gtT4Fd88hQ+nRmj5AtRD+92R/v/CseFRSFOtc2Ws2OZD/0
88m5btVSyk8U8mz5GnhIsTgc2ngCffbJWagJ/sqfgwYZ4laIHxxDjlY9Ay8P
fhc/vhs/PpKYixYP8Jf34pe7Z107Wy3zL9em39mLfepd7MMIspPgnELbFtTu
05ishZ7oDSOuFr0yToaoZFwSjSfFx+tQ1FzbtYy2Z96i1bnTnpXCSEmWz3/+
4Y+LWGRZHhvyX6S8uzwY95Xh3Pwh6eh/32T0dIAsxJPP6IJ3Q9XaZJdghBgW
O2Bo6mOcZ2QYfADYKEDmAh5MbhIDyWTgui/T/d1gfDv5iOy21I1e2z7Sw30m
aenXInVcgKuf4co+trQIp11EzYf9KRsmiDZPBcFY3KRpD7XShzyqHO4Mmdp6
UfD+k/+MivtRf3cxetK/n6vZZFEP+DztwdkKMKGERYMGkP6CHEzNFOQCnvvj
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
v8hX0svevvRy/CZ+ksv0tVpPXNII+p+drSqgOtC+THdr79gN1az5pi83m2dJ
5XSk+fHx82e6+Ydmur3ht7Y+2Clt9LyYPdZAOdC5xzGUr1qRJKNY9+YSGLuA
ejy4XCr1Jq7cj1JyhXM2vvL54aAw04qXUjB1on7RWeh73R+JWyjMAETD3qTH
KAJzWDj6xf86wLoT9znUPHl5z6qHZOHArhmZHuhAri/3SMjHt55Glm5vFQmx
EBKUEeBu8HzJnkDuY9cTd5OG7PzM9kim7AVCTm2q32IS+hmmms16nz0iwEdi
RQygY/BD+3BUJHiFDVnjCDfElxRzzltK0mBL4TAvqSfER8f+NpX9hGFy7don
rc9ZMGreBogr6U12La4WLZ1qhYUXgoD7gqa3uJ+YUspaNqsC+4UIPe4FkHDW
sMSp3BliUWBXTQOMcWwa+M1D7z7fgrrMROC6JFfB2P3LT0D7rS1WhRbSNrmg
LbsMqOUT32+H71WgWvo9bH2N+//vsPbB1h5RLWZ/cnj+7IB4w7PhgwKQlT8T
2LyXeLuD/Zs/QCK/Iun9jjsZtTcpkSWngrJ/cF2++tlkUHpIn4bx5fomdYYI
6/4ybhIc5NjWpNmHEXV6T3BWPsFPgabTiociaZbb6BqZLcWyfksl8SZKF316
L9ZUheRHFXdb6zF9iVKdr0zVFUJbGZvhqIfYxfK1E3ZvndRhakndSii365eq
mUg0GzUV19qhd625Dn54XwBnlS3x9bAHald56an3uyt6JSeSmUhjbVu5bz6T
SsQkxuiDS0cFdynbaWKy5EIjAqVF9Lr8LBkDK0LMKi/BRpjRjTC2zuo/nujF
Kzcf1HxZMYl7Y0lh0wc0/rnEtjWNLzbU8I6i+DicShz6U2vfXtX+3ZnaHbtH
DeNvrmpfL7gStd9aPf/vOydO/VQfUe8oar+9qv3Ru4uT3mHnUlIo1Iqu7XdW
tf+u+xPb0q+Oz/unnctLpyTJXlL73efOHw7B+v7tr2p/2jmhgbsNPVD7g1Xt
3553fugEK0vt/DdWtHe62mXfHZ/TMQedt13bEdq3V+1/57JzxRmx1Umg/eaK
9jWf5/n33f7xyfkP0n7r2edveuJLgPbbK9q70QZk4T3rvj2/7Im1t9M76R5x
+51nn18Y365/d+X7++7s/Iez+uyl/d6K9myAbxhd2u8/8/4G13Hc/uB3rT/q
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
7XpffoEsov8PXv/Vv98GBAA=

-->

</rfc>
