<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pardue-moq-qlog-moq-events-08" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>MoQ qlog event definitions</title>
    <seriesInfo name="Internet-Draft" value="draft-pardue-moq-qlog-moq-events-08"/>
    <author fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <author fullname="Mathis Engelbart">
      <organization>Technical University of Munich</organization>
      <address>
        <email>mathis.engelbart@gmail.com</email>
      </address>
    </author>
    <author fullname="Aman Sharma">
      <organization>Meta</organization>
      <address>
        <email>amsharma@meta.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="17"/>
    <area/>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>hi fidelity</keyword>
    <abstract>
      <?line 48?>

<t>This document defines a qlog event schema containing concrete events for MoQ.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://LPardue.github.io/draft-pardue-moq-qlog-moq-events/draft-pardue-moq-qlog-moq-events.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-pardue-moq-qlog-moq-events/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC  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/LPardue/draft-pardue-moq-qlog-moq-events"/>.</t>
    </note>
  </front>
  <middle>
    <?line 53?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines a qlog event schema (<xref section="8" sectionFormat="of" target="QLOG-MAIN"/>)
containing concrete events for Media over QUIC Transport <xref target="MOQT"/>.</t>
      <t>The event namespace with identifier <tt>moqt</tt> is defined; see <xref target="schema-def"/>. In
this namespace multiple events derive from the qlog abstract Event class
(<xref section="7" sectionFormat="of" target="QLOG-MAIN"/>), each extending the "data" field and defining
their "name" field values and semantics.</t>
      <t><xref target="events-table"/> summarizes the name value of each event type that is defined in
this specification. Some event data fields use complex data types. These are
represented as enums or re-usable definitions, which are grouped together on the
bottom of this document for clarity.</t>
      <table anchor="events-table">
        <name>MOQT Events</name>
        <thead>
          <tr>
            <th align="left">Name value</th>
            <th align="left">Importance</th>
            <th align="left">Definition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">moqt:control_message_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="controlmessagecreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:control_message_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="controlmessageparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:stream_type_set</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="streamtypeset"/></td>
          </tr>
          <tr>
            <td align="left">moqt:object_datagram_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="objectdatagramcreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:object_datagram_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="objectdatagramparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:padding_datagram_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="paddingdatagramcreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:padding_datagram_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="paddingdatagramparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:subgroup_header_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="subgroupheadercreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:subgroup_header_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="subgroupheaderparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:subgroup_object_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="subgroupobjectcreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:subgroup_object_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="subgroupobjectparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:fetch_header_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="fetchheadercreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:fetch_header_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="fetchheaderparsed"/></td>
          </tr>
          <tr>
            <td align="left">moqt:fetch_object_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="fetchobjectcreated"/></td>
          </tr>
          <tr>
            <td align="left">moqt:fetch_object_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="fetchobjectparsed"/></td>
          </tr>
        </tbody>
      </table>
      <section anchor="usage-with-quic">
        <name>Usage with QUIC</name>
        <t>The events described in this document can be used with or without logging the
related QUIC events defined in <xref target="QLOG-QUIC"/>. If used with QUIC events, the QUIC
document takes precedence in terms of recommended filenames and trace separation
setups.</t>
        <t>If used without QUIC events, it is recommended that the implementation assign a
globally unique identifier to each MOQT session. This ID can then be used as the
value of the qlog "group_id" field, as well as the qlog filename or file
identifier, potentially suffixed by the vantagepoint type (For example,
abcd1234_server.qlog would contain the server-side trace of the connection with
GUID abcd1234).</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions 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 event and data structure definitions in ths document are expressed
in the Concise Data Definition Language <xref target="CDDL"/> and its
extensions described in <xref target="QLOG-MAIN"/>.</t>
      <t>The following fields from <xref target="QLOG-MAIN"/> are imported and used: name, namespace,
type, data, group_id, RawInfo, and time-related
fields.</t>
      <t>Events are defined with an importance level as described in <xref section="8.3" sectionFormat="of" target="QLOG-MAIN"/>.</t>
      <t>As is the case for <xref target="QLOG-MAIN"/>, the qlog schema definitions in this document
are intentionally agnostic to serialization formats. The choice of format is an
implementation decision.</t>
    </section>
    <section anchor="schema-def">
      <name>Event Schema Definition</name>
      <t>This document describes how the MOQT protocol is expressed in qlog with an event
schema. Per the requirements in <xref section="8" sectionFormat="of" target="QLOG-MAIN"/>, this document
registers the <tt>moqt</tt> namespace. The event schema URI is
<tt>urn:ietf:params:qlog:events:moqt</tt>.</t>
      <section removeInRFC="true" anchor="draft-event-schema-identification">
        <name>Draft Event Schema Identification</name>
        <t>Only implementations of the final, published RFC can use the events belonging to
the event schema with the URI <tt>urn:ietf:params:qlog:events:moqt</tt>. Until such an
RFC exists, implementations <bcp14>MUST NOT</bcp14> identify themselves using this URI.</t>
        <t>Implementations of draft versions of the event schema <bcp14>MUST</bcp14> append the string
"-" and the corresponding draft number to the URI. For example, draft 99 of this
document is identified using the URI <tt>urn:ietf:params:qlog:events:moqt-99</tt>.</t>
        <t>The namespace identifier itself is not affected by this requirement.</t>
      </section>
    </section>
    <section anchor="moqt-events">
      <name>MOQT Events</name>
      <t>MOQT events extend the <tt>$ProtocolEventData</tt> extension point defined in
<xref target="QLOG-MAIN"/>. Additionally, they allow for direct extensibility by their use of
per-event extension points via the <tt>$$</tt> CDDL "group socket" syntax, as also
described in <xref target="QLOG-MAIN"/>.</t>
      <figure anchor="moqt-events-def">
        <name>MOQTEventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
MOQTEventData = MOQTControlMessageCreated /
                MOQTControlMessageParsed /
                MOQTStreamTypeSet /
                MOQTObjectDatagramCreated /
                MOQTObjectDatagramParsed /
                MOQTPaddingDatagramCreated /
                MOQTPaddingDatagramParsed /
                MOQTSubgroupHeaderCreated /
                MOQTSubgroupHeaderParsed /
                MOQTSubgroupObjectCreated /
                MOQTSubgroupObjectParsed /
                MOQTFetchHeaderCreated /
                MOQTFetchHeaderParsed /
                MOQTFetchObjectCreated /
                MOQTFetchObjectParsed

$ProtocolEventData /= MOQTEventData
]]></sourcecode>
      </figure>
      <t>MOQT events are logged when a certain condition happens at the application
layer, and there isn't always a one to one mapping between HTTP and QUIC events.
The exchange of data between the HTTP and QUIC layer is logged via the
"stream_data_moved" and "datagram_data_moved" events in <xref target="QLOG-QUIC"/>.</t>
      <t>The concrete MOQT event types are further defined below, their type identifier
is the heading name.</t>
      <section anchor="controlmessagecreated">
        <name>control_message_created</name>
        <t>The <tt>control_message_created</tt> event is emitted when a control message is created.
It has Core importance level.</t>
        <t>The definition of control message content is in <xref target="moqtcontrolmessage"/>.</t>
        <figure anchor="moqt-controlmessagecreated-def">
          <name>MOQTControlMessageCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTControlMessageCreated = {
    stream_id: uint64
    ? length: uint16
    message: $MOQTControlMessage
    ? raw: RawInfo

    * $$moqt-controlmessagecreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="controlmessageparsed">
        <name>control_message_parsed</name>
        <t>The <tt>control_message_parsed</tt> event is emitted when a control message is parsed.
It has Core importance level.</t>
        <t>The definition of control message content is in <xref target="moqtcontrolmessage"/>.</t>
        <figure anchor="controlmessageparsed-def">
          <name>MOQTControlMessageParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTControlMessageParsed = {
    stream_id: uint64
    ? length: uint16
    message: $MOQTControlMessage
    ? raw: RawInfo

    * $$moqt-controlmessageparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="streamtypeset">
        <name>stream_type_set</name>
        <t>The <tt>stream_type_set</tt> event conveys when a MOQT stream type becomes known. It
has Base importance level.</t>
        <figure anchor="streamtypeset-def">
          <name>MOQTStreamTypeSet definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTStreamTypeSet = {
    ? owner: Owner
    stream_id: uint64
    stream_type: $MOQTStreamType

    * $$moqt-streamtypeset-extension
}

$MOQTStreamType /=  "control" /
                    "subgroup_header" /
                    "fetch_header" /
                    "padding"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="objectdatagramcreated">
        <name>object_datagram_created</name>
        <t>The <tt>object_datagram_created</tt> event is emitted when the OBJECT_DATAGRAM message
is created. It has Core importance level.</t>
        <t>If the publisher_priority is absent, it means that the object inherits the
Publisher Priority specified in the control message that established the subscription.</t>
        <figure anchor="objectdatagramcreated-def">
          <name>MOQTObjectDatagramCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTObjectDatagramCreated = {
    track_alias: uint64
    group_id: uint64
    ? object_id: uint64
    ? publisher_priority: uint8
    ? properties_length: uint64
    ? properties: [* MOQTProperty]
    ? object_status: uint64
    ? object_payload: RawInfo
    end_of_group: bool

    * $$moqt-objectdatagramcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="objectdatagramparsed">
        <name>object_datagram_parsed</name>
        <t>The <tt>object_datagram_parsed</tt> event is emitted when the OBJECT_DATAGRAM message
is parsed. It has Core importance level.</t>
        <t>If the publisher_priority is absent, it means that the object inherits the
Publisher Priority specified in the control message that established the subscription.</t>
        <figure anchor="objectdatagramparsed-def">
          <name>MOQTObjectDatagramParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTObjectDatagramParsed = {
    track_alias: uint64
    group_id: uint64
    ? object_id: uint64
    ? publisher_priority: uint8
    ? properties_length: uint64
    ? properties: [* MOQTProperty]
    ? object_status: uint64
    ? object_payload: RawInfo
    end_of_group: bool

    * $$moqt-objectdatagramparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="paddingdatagramcreated">
        <name>padding_datagram_created</name>
        <t>The <tt>padding_datagram_created</tt> event is emitted when a padding datagram is
created. It has Core importance level.</t>
        <t>Padding datagrams contain no application data.</t>
        <figure anchor="paddingdatagramcreated-def">
          <name>MOQTPaddingDatagramCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTPaddingDatagramCreated = {
    padding_length: uint64

    * $$moqt-paddingdatagramcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="paddingdatagramparsed">
        <name>padding_datagram_parsed</name>
        <t>The <tt>padding_datagram_parsed</tt> event is emitted when a padding datagram is
parsed. It has Core importance level.</t>
        <t>Padding datagrams contain no application data.</t>
        <figure anchor="paddingdatagramparsed-def">
          <name>MOQTPaddingDatagramParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTPaddingDatagramParsed = {
    padding_length: uint64

    * $$moqt-paddingdatagramparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="subgroupheadercreated">
        <name>subgroup_header_created</name>
        <t>The <tt>subgroup_header_created</tt> event is emitted when a stream begins and a
SUBGROUP_HEADER is created. It has Core importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>The SUBGROUP_HEADER object in MoQT uses 5 bits in the type value to convey
various properties. The <tt>subgroup_header_created</tt> event conveys these as
explicit fields, such as contains_end_of_group.</t>
        <t>If the publisher_priority is absent, it means that the subgroup inherits the
Publisher Priority specified in the control message that established the
subscription.</t>
        <figure anchor="subgroupheadercreated-def">
          <name>MOQTSubgroupHeaderCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubgroupHeaderCreated = {
    stream_id: uint64
    track_alias: uint64
    group_id: uint64
    subgroup_id_mode: uint8
    ? subgroup_id: uint64
    ? publisher_priority: uint8
    contains_end_of_group: bool
    properties_present: bool

    * $$moqt-subgroupheadercreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="subgroupheaderparsed">
        <name>subgroup_header_parsed</name>
        <t>The <tt>subgroup_header_parsed</tt> event is emitted when the SUBGROUP_HEADER is
parsed. It has Core importance level.</t>
        <t>The SUBGROUP_HEADER object in MoQT uses 5 bits in the type value to convey
various properties. The <tt>subgroup_header_created</tt> event conveys these as explicit
fields, such as contains_end_of_group.</t>
        <t>If the publisher_priority is absent, it means that the subgroup inherits the
Publisher Priority specified in the control message that established the
subscription.</t>
        <figure anchor="subgroupheaderparsed-def">
          <name>MOQTSubgroupHeaderParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubgroupHeaderParsed = {
    stream_id: uint64
    track_alias: uint64
    group_id: uint64
    subgroup_id_mode: uint8
    ? subgroup_id: uint64
    ? publisher_priority: uint8
    contains_end_of_group: bool
    properties_present: bool

    * $$moqt-subgroupheaderparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="subgroupobjectcreated">
        <name>subgroup_object_created</name>
        <t>The <tt>subgroup_object_created</tt> event is emitted when a subgroup object is
created. It has Core importance level.</t>
        <figure anchor="subgroupobjectcreated-def">
          <name>MOQTSubgroupObjectCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubgroupObjectCreated = {
    stream_id: uint64
    object_id_delta: uint64
    ? properties: [* MOQTProperty]
    object_payload_length: uint64
    ? object_status: uint64
    ? object_payload: RawInfo

    * $$moqt-subgroupobjectcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="subgroupobjectparsed">
        <name>subgroup_object_parsed</name>
        <t>The <tt>subgroup_object_parsed</tt> event is emitted when a subgroup object is parsed.
It has Core importance level.</t>
        <figure anchor="subgroupobjectparsed-def">
          <name>MOQTSubgroupObjectParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubgroupObjectParsed = {
    stream_id: uint64
    object_id_delta: uint64
    ? properties: [* MOQTProperty]
    object_payload_length: uint64
    ? object_status: uint64
    ? object_payload: RawInfo

    * $$moqt-subgroupobjectparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fetchheadercreated">
        <name>fetch_header_created</name>
        <t>The <tt>fetch_header_created</tt> event is emitted when a stream begins and a
FETCH_HEADER is created. It has Core importance level.</t>
        <figure anchor="fetchheadercreated-def">
          <name>MOQTFetchHeaderCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchHeaderCreated = {
    stream_id: uint64
    request_id: uint64

    * $$moqt-fetchheadercreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fetchheaderparsed">
        <name>fetch_header_parsed</name>
        <t>The <tt>fetch_header_parsed</tt> event is emitted when the FETCH_HEADER is
parsed. It has Core importance level.</t>
        <figure anchor="fetchheaderparsedd-def">
          <name>MOQTFetchHeaderParsed   definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchHeaderParsed = {
    stream_id: uint64
    request_id: uint64

    * $$moqt-fetchheaderparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fetchobjectcreated">
        <name>fetch_object_created</name>
        <t>The <tt>fetch_object_created</tt> event is emitted when a fetch object is created. It
has Core importance level.</t>
        <t>The FETCH object in MoQT uses serialization flags to encode various
properties. The event conveys these as explicit fields, such as
end_of_unknown_range.</t>
        <figure anchor="fetchobjectcreated-def">
          <name>MOQTFetchObjectCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchObjectCreated = {
    stream_id: uint64
    datagram: bool
    end_of_nonexistent_range: bool
    end_of_unknown_range: bool
    ? subgroup_id_bits: uint8
    ? group_id_delta: uint64
    ? subgroup_id: uint64
    ? object_id_delta: uint64
    ? publisher_priority: uint8
    ? properties_length: uint64
    ? properties: [* MOQTProperty]
    object_payload_length: uint64
    ? object_payload: RawInfo

    * $$moqt-fetchobjectcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fetchobjectparsed">
        <name>fetch_object_parsed</name>
        <t>The <tt>fetch_object_parsed</tt> event is emitted when a fetch object is parsed. It has
Core importance level.</t>
        <t>The FETCH object in MoQT uses serialization flags to encode various
properties. The event conveys these as explicit fields, such as
end_of_unknown_range.</t>
        <figure anchor="fetchobjectparsed-def">
          <name>MOQTFetchObjectParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTFetchObjectParsed = {
    stream_id: uint64
    datagram: bool
    end_of_nonexistent_range: bool
    end_of_unknown_range: bool
    ? subgroup_id_bits: uint8
    ? group_id_delta: uint64
    ? subgroup_id: uint64
    ? object_id_delta: uint64
    ? publisher_priority: uint8
    ? properties_length: uint64
    ? properties: [* MOQTProperty]
    object_payload_length: uint64
    ? object_payload: RawInfo

    * $$moqt-fetchobjectparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="moqt-data-type-definitions">
      <name>MOQT Data Type Definitions</name>
      <t>The following data type definitions can be used in MOQT events.</t>
      <section anchor="owner">
        <name>Owner</name>
        <figure anchor="owner-def">
          <name>Owner definition</name>
          <sourcecode type="cddl"><![CDATA[
Owner = "local" /
        "remote"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtlocation">
        <name>MOQTLocation</name>
        <t>A Location, as defined in <xref section="1.4.2" sectionFormat="of" target="MOQT"/></t>
        <figure anchor="moqtlocation-def">
          <name>MOQTLocation definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTLocation = {
  group: uint64
  object: uint64
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtsubscriptionfilter">
        <name>MOQTSubscriptionFilter</name>
        <t>A Subscription Filter, as defined in <xref section="5.1.2" sectionFormat="of" target="MOQT"/></t>
        <figure anchor="moqtsubscriptionfilter-def">
          <name>MOQTSubscriptionFilter definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTSubscriptionFilter = {
  filter_type: uint64
  ? start_location: MOQTLocation
  ? end_group_delta: uint64
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtaliastype">
        <name>MOQTAliasType</name>
        <figure anchor="moqtaliastype-def">
          <name>MOQTAliasType definition</name>
          <sourcecode type="cddl"><![CDATA[
$MOQTAliasType /=  "delete" /
                   "register" /
                   "use_alias" /
                   "use_value"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtsetupoption">
        <name>MOQTSetupOption</name>
        <t>The generic $MOQTSetupOption is defined here as a CDDL "type socket"
extension point. It can be extended to support additional MOQT Setup Options.</t>
        <figure anchor="moqtsetupoption-def">
          <name>MOQTSetupOption type socket definition</name>
          <sourcecode type="cddl"><![CDATA[
; The MOQTSetupOption is any key-value map (e.g., JSON object)
$MOQTSetupOption /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <figure anchor="moqtbasesetupoptions-def">
          <name>MOQTBaseSetupOptions definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTBaseSetupOptions /=  MOQTAuthoritySetupOption /
                         MOQTPathSetupOption /
                         MOQTMaxAuthTokenCacheSizeSetupOption /
                         MOQTAuthorizationTokenSetupOption /
                         MOQTImplementationSetupOption /
                         MOQTUnknownSetupOption

$MOQTSetupOption /= MOQTBaseSetupOptions
]]></sourcecode>
        </figure>
        <section anchor="moqtauthoritysetupoption">
          <name>MOQTAuthoritySetupOption</name>
          <figure anchor="moqtauthoritysetupoption-def">
            <name>MOQTAuthoritySetupOption definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTAuthoritySetupOption = {
  name: "authority"
  value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpathsetupoption">
          <name>MOQTPathSetupOption</name>
          <figure anchor="moqtpathsetupoption-def">
            <name>MOQTPathSetupOption definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPathSetupOption = {
  name: "path"
  value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtmaxauthtokencachesizesetupoption">
          <name>MOQTMaxAuthTokenCacheSizeSetupOption</name>
          <figure anchor="moqtmaxauthtokencachesizesetupoption-def">
            <name>MOQTMaxAuthTokenCacheSizeSetupOption definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTMaxAuthTokenCacheSizeSetupOption = {
  name: "max_auth_token_cache_size"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtauthorizationtokensetupoption">
          <name>MOQTAuthorizationTokenSetupOption</name>
          <figure anchor="moqtauthorizationtokensetupoption-def">
            <name>MOQTAuthorizationTokenSetupOption definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTAuthorizationTokenSetupOption = {
  name: "authorization_token"
  alias_type: $MOQTAliasType
  ? token_alias: uint64
  ? token_type: uint64
  ? token_value: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtimplementationsetupoption">
          <name>MOQTImplementationSetupOption</name>
          <figure anchor="moqtimplementationsetupoption-def">
            <name>MOQTImplementationSetupOption definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTImplementationSetupOption = {
  name: "implementation"
  value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtunknownsetupoption">
          <name>MOQTUnknownSetupOption</name>
          <figure anchor="moqtunknownsetupoption-def">
            <name>MOQTUnknownSetupOption definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTUnknownSetupOption = {
  name:"unknown"
  name_bytes: uint64
  ? length: uint64
  ? value: uint64
  ? value_bytes: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="moqtparameter">
        <name>MOQTParameter</name>
        <t>The generic $MOQTParameter is defined here as a CDDL "type socket" extension
point. It can be extended to support additional MOQT Parameters.</t>
        <figure anchor="moqtparameter-def">
          <name>MOQTParameter type socket definition</name>
          <sourcecode type="cddl"><![CDATA[
; The MOQTParameter is any key-value map (e.g., JSON object)
$MOQTParameter /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <figure anchor="moqtbaseparameters-def">
          <name>MOQTBaseParameters definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTBaseParameters /= MOQTAuthorizationTokenParameter /
                      MOQTSubgroupDeliveryTimeoutParameter /
                      MOQTObjectDeliveryTimeoutParameter /
                      MOQTFillTimeoutParameter /
                      MOQTRendezvousTimeoutParameter /
                      MOQTSubscriberPriorityParameter /
                      MOQTGroupOrderParameter /
                      MOQTSubscriptionFilterParameter /
                      MOQTExpiresParameter /
                      MOQTLargestObjectParameter /
                      MOQTForwardParameter /
                      MOQTNewGroupRequestParameter /
                      MOQTTrackNamespacePrefixParameter /
                      MOQTUnknownParameter

$MOQTParameter /= MOQTBaseParameters
]]></sourcecode>
        </figure>
        <section anchor="moqtauthorizationtokenparameter">
          <name>MOQTAuthorizationTokenParameter</name>
          <figure anchor="moqtauthorizationTokenparameter-def">
            <name>MOQTAuthorizationTokenParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTAuthorizationTokenParameter = {
  name: "authorization_token"
  alias_type: $MOQTAliasType
  ? token_alias: uint64
  ? token_type: uint64
  ? token_value: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubgroupdeliverytimeoutparameter">
          <name>MOQTSubgroupDeliveryTimeoutParameter</name>
          <figure anchor="moqtsubgroupdeliverytimeoutparameter-def">
            <name>MOQTSubgroupDeliveryTimeoutParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubgroupDeliveryTimeoutParameter = {
  name: "subgroup_delivery_timeout"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtobjectdeliverytimeoutparameter">
          <name>MOQTObjectDeliveryTimeoutParameter</name>
          <figure anchor="moqtobjectdeliverytimeoutparameter-def">
            <name>MOQTObjectDeliveryTimeoutParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTObjectDeliveryTimeoutParameter = {
  name: "object_delivery_timeout"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtfilltimeoutparameter">
          <name>MOQTFillTimeoutParameter</name>
          <figure anchor="moqtfilltimeoutparameter-def">
            <name>MOQTFillTimeoutParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTFillTimeoutParameter = {
  name: "fill_timeout"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtrendezvoustimeoutparameter">
          <name>MOQTRendezvousTimeoutParameter</name>
          <figure anchor="moqtrendezvoustimeoutparameter-def">
            <name>MOQTRendezvousTimeoutParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTRendezvousTimeoutParameter = {
  name: "rendezvous_timeout"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscriberpriorityparameter">
          <name>MOQTSubscriberPriorityParameter</name>
          <figure anchor="moqtsubscriberpriorityparameter-def">
            <name>MOQTSubscriberPriorityParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscriberPriorityParameter = {
  name: "subscriber_priority"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtgrouporderparameter">
          <name>MOQTGroupOrderParameter</name>
          <figure anchor="moqtgrouporderparameter-def">
            <name>MOQTGroupOrderParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTGroupOrderParameter = {
  name: "group_order"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscriptionfilterparameter">
          <name>MOQTSubscriptionFilterParameter</name>
          <figure anchor="moqtsubscriptionfilterparameter-def">
            <name>MOQTSubscriptionFilterParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscriptionFilterParameter = {
  name: "subscription_filter"
  value: MOQTSubscriptionFilter
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtexpiresparameter">
          <name>MOQTExpiresParameter</name>
          <figure anchor="moqtexpiresparameter-def">
            <name>MOQTExpiresParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTExpiresParameter = {
  name: "expires"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtlargestobjectparameter">
          <name>MOQTLargestObjectParameter</name>
          <figure anchor="moqtlargestobjectparameter-def">
            <name>MOQTLargestObjectParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTLargestObjectParameter = {
  name: "largest_object"
  value: MOQTLocation
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtforwardparameter">
          <name>MOQTForwardParameter</name>
          <figure anchor="moqtforwardparameter-def">
            <name>MOQTForwardParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTForwardParameter = {
  name: "forward"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtnewgrouprequestparameter">
          <name>MOQTNewGroupRequestParameter</name>
          <figure anchor="moqtnewgrouprequestparameter-def">
            <name>MOQTNewGroupRequestParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTNewGroupRequestParameter = {
  name: "new_group_request"
  value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqttracknamespaceprefixparameter">
          <name>MOQTTrackNamespacePrefixParameter</name>
          <figure anchor="moqttracknamespaceprefixparameter-def">
            <name>MOQTTrackNamespacePrefixParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTTrackNamespacePrefixParameter = {
  name: "track_namespace_prefix"
  value: [ *MOQTByteString]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtunknownparameter">
          <name>MOQTUnknownParameter</name>
          <figure anchor="moqtunknownparameter-def">
            <name>MOQTUnknownParameter definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTUnknownParameter = {
  name:"unknown"
  name_bytes: uint64
  ? length: uint64
  ? value: uint64
  ? value_bytes: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="moqtbytestring">
        <name>MOQTByteString</name>
        <t>The MOQTByteString type allows representing MOQT bytestrings, such as the value
of a Track or Track Namespace tuple field, using two different encodings. The
<tt>value</tt> field can be used for bytestrings that can be encoded in UTF-8. The
<tt>value_bytes</tt> field can be used for bytestrings of any type by using the
<tt>hexstring</tt> encoding.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> populate one of either the <tt>value</tt> or <tt>value_bytes</tt>
field. Populating both fields is redundant.</t>
        <figure anchor="MOQTByteString-def">
          <name>MOQTByteString definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTByteString = {
  ? value: text
  ? value_bytes: hexstring
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="moqtcontrolmessage">
        <name>MOQTControlMessage</name>
        <t>The generic <tt>$MOQTControlMessage</tt> is defined here as a CDDL "type socket" extension point.
It can be extended to support additional MOQT control message types.</t>
        <figure anchor="control-message-def">
          <name>MOQTControlMessage type socket definition</name>
          <artwork><![CDATA[
; The MOQTControlMessage is any key-value map (e.g., JSON object)
$MOQTControlMessage /= {
    * text => any
}
]]></artwork>
        </figure>
        <t>The MOQT control message types defined in this document are as follows:</t>
        <figure anchor="moqtbasecontrolmessage-def">
          <name>MOQTBaseControlMessages definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTBaseControlMessages = MOQTSetupMessage /
                          MOQTGoaway /
                          MOQTRequestOk /
                          MOQTRequestError /
                          MOQTSubscribe /
                          MOQTSubscribeOk /
                          MOQTRequestUpdate /
                          MOQTPublish /
                          MOQTPublishDone /
                          MOQTFetch /
                          MOQTFetchOk /
                          MOQTTrackStatus /
                          MOQTPublishNamespace /
                          MOQTNamespace /
                          MOQTNamespaceDone /
                          MOQTSubscribeNamespace /
                          MOQTSubscribeTracks /
                          MOQTPublishBlocked

$MOQTControlMessage /= MOQTBaseControlMessages
]]></sourcecode>
        </figure>
        <section anchor="moqtsetupmessage">
          <name>MOQTSetupMessage</name>
          <figure anchor="setup-def">
            <name>MOQTSetupMessage definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSetupMessage = {
  type: "setup"
  ? setup_options: [* $MOQTSetupOption]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtgoaway">
          <name>MOQTGoaway</name>
          <figure anchor="goaway-def">
            <name>MOQTGoaway definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTGoaway = {
  type: "goaway"
  new_session_uri: RawInfo
  timeout: uint64
  ? request_id : uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtrequestok">
          <name>MOQTRequestOk</name>
          <figure anchor="requestok-def">
            <name>MOQTRequestOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTRequestOk = {
  type: "request_ok"
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
  ? track_properties: [* MOQTProperty]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtrequesterror">
          <name>MOQTRequestError</name>
          <figure anchor="requesterror-def">
            <name>MOQTRequestError definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTRequestError = {
  type: "request_error"
  error_code: uint64
  retry_interval: uint64
  ? reason_phrase: text
  ? redirect: $MOQTRedirect
}

MOQTRedirect = {
  connect_uri: RawInfo
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribe">
          <name>MOQTSubscribe</name>
          <figure anchor="subscribe-def">
            <name>MOQTSubscribe definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribe = {
  type: "subscribe"
  request_id: uint64
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribeok">
          <name>MOQTSubscribeOk</name>
          <figure anchor="subscribeok-def">
            <name>MOQTSubscribeOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeOk = {
  type: "subscribe_ok"
  track_alias: uint64
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
  ? track_properties: [* MOQTProperty]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtrequestupdate">
          <name>MOQTRequestUpdate</name>
          <figure anchor="requestupdate-def">
            <name>MOQTRequestUpdate definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTRequestUpdate = {
  type: "request_update"
  request_id: uint64
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublish">
          <name>MOQTPublish</name>
          <figure anchor="publish-def">
            <name>MOQTPublish definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublish = {
  type: "publish"
  request_id: uint64
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
  track_alias: uint64
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
  ? track_properties: [* MOQTProperty]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishdone">
          <name>MOQTPublishDone</name>
          <figure anchor="publishdone-def">
            <name>MOQTPublishDone definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishDone = {
  type: "publish_done"
  status_code: uint64
  stream_count: uint64
  ? reason_phrase: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtfetch">
          <name>MOQTFetch</name>
          <figure anchor="fetch-def">
            <name>MOQTFetch definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTFetch = {
  type: "fetch"
  request_id: uint64
  fetch_type: $MOQTFetchType
  ? standalone_fetch: $MOQTStandaloneFetch
  ? joining_fetch: $MOQTJoiningFetch
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}

$MOQTStandaloneFetch = {
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
  start_location: MOQTLocation
  end_location: MOQTLocation
}

$MOQTJoiningFetch = {
  joining_request_id: uint64
  joining_start: uint64
}

$MOQTFetchType /=  "standalone" /
                   "absolute_joining" /
                   "relative_joining"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtfetchok">
          <name>MOQTFetchOk</name>
          <figure anchor="fetchok-def">
            <name>MOQTFetchOk definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTFetchOk = {
  type: "fetch_ok"
  end_of_track: uint8
  end_location: MOQTLocation
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
  ? track_properties: [* MOQTProperty]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqttrackstatus">
          <name>MOQTTrackStatus</name>
          <figure anchor="trackstatus-def">
            <name>MOQTTrackStatus definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTTrackStatus = {
  type: "track_status"
  request_id: uint64
  track_namespace: [ *MOQTByteString]
  track_name: MOQTByteString
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishnamespace">
          <name>MOQTPublishNamespace</name>
          <figure anchor="publishnamespace-def">
            <name>MOQTPublishNamespace definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishNamespace = {
  type: "publish_namespace"
  request_id: uint64
  track_namespace: [ *MOQTByteString]
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtnamespace">
          <name>MOQTNamespace</name>
          <figure anchor="namespace-def">
            <name>MOQTNamespace definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTNamespace = {
  type: "namespace"
  track_namespace_suffix: [ *MOQTByteString]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtnamespacedone">
          <name>MOQTNamespaceDone</name>
          <figure anchor="namespacedone-def">
            <name>MOQTNamespaceDone definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTNamespaceDone = {
  type: "namespace_done"
  track_namespace_suffix: [ *MOQTByteString]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribenamespace">
          <name>MOQTSubscribeNamespace</name>
          <figure anchor="subscribenamespace-def">
            <name>MOQTSubscribeNamespace definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeNamespace = {
  type: "subscribe_namespace"
  request_id: uint64
  track_namespace_prefix: [ *MOQTByteString]
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}

]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtsubscribetracks">
          <name>MOQTSubscribeTracks</name>
          <figure anchor="subscribetracks-def">
            <name>MOQTSubscribeTracks definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTSubscribeTracks = {
  type: "subscribe_tracks"
  request_id: uint64
  track_namespace_prefix: [ *MOQTByteString]
  number_of_parameters: uint64
  ? parameters: [* $MOQTParameter]
}

]]></sourcecode>
          </figure>
        </section>
        <section anchor="moqtpublishblocked">
          <name>MOQTPublishBlocked</name>
          <figure anchor="publishblocked-def">
            <name>MOQTPublishBlocked definition</name>
            <sourcecode type="cddl"><![CDATA[
MOQTPublishBlocked = {
  type: "publish_blocked"
  track_namespace_suffix: [ *MOQTByteString]
  track_name: MOQTByteString
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="moqtproperty">
        <name>MOQTProperty</name>
        <figure anchor="property-def">
          <name>Property definition</name>
          <sourcecode type="cddl"><![CDATA[
MOQTProperty = {
  type: uint64
  ? value: uint64
  ? length: uint64
  ? value_bytes: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security and privacy considerations discussed in <xref target="QLOG-MAIN"/> apply to this
document as well.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers a new entry in the "qlog event schema URIs" registry (created in <xref section="15" sectionFormat="of" target="QLOG-MAIN"/>).</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:moqt</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>moqt</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>control_message_created,
control_message_parsed,
stream_type_set,
object_datagram_created,
object_datagram_parsed,
padding_datagram_created,
padding_datagram_parsed,
subgroup_header_created,
subgroup_header_parsed,
subgroup_object_created,
subgroup_object_parsed,
fetch_header_created,
fetch_header_parsed,
fetch_object_created,
fetch_object_parsed</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Event definitions related to the MOQT protocol.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="QLOG-MAIN">
        <front>
          <title>qlog: Structured Logging for Network Protocols</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>Akamai</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Meta</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="6" month="July" year="2026"/>
          <abstract>
            <t>   qlog provides extensible structured logging for network protocols,
   allowing for easy sharing of data that benefits common debug and
   analysis methods and tooling.  This document describes key concepts
   of qlog: formats, files, traces, events, and extension points.  This
   definition includes the high-level log file schemas, and generic
   event schemas.  Requirements and guidelines for creating protocol-
   specific event schemas are also presented.  All schemas are defined
   independent of serialization format, allowing logs to be represented
   in various ways such as JSON, CSV, or protobuf.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-14"/>
      </reference>
      <reference anchor="QLOG-QUIC">
        <front>
          <title>QUIC event definitions for qlog</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>Akamai</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Meta</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="6" month="July" year="2026"/>
          <abstract>
            <t>   This document describes a qlog event schema containing concrete qlog
   event definitions and their metadata for the core QUIC protocol and
   selected extensions.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-13"/>
      </reference>
      <reference anchor="MOQT">
        <front>
          <title>Media over QUIC Transport</title>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
            <organization>Google</organization>
          </author>
          <author fullname="Ian Swett" initials="I." surname="Swett">
            <organization>Google</organization>
          </author>
          <author fullname="Alan Frindell" initials="A." surname="Frindell">
            <organization>Meta</organization>
          </author>
          <date day="8" month="September" year="2026"/>
          <abstract>
            <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>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-21"/>
      </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="CDDL">
        <front>
          <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
          <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
          <author fullname="C. Vigano" initials="C." surname="Vigano"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2019"/>
          <abstract>
            <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8610"/>
        <seriesInfo name="DOI" value="10.17487/RFC8610"/>
      </reference>
    </references>
    <?line 1203?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Lorenzo Miniero, Sujay Patel, and Aman Sharm for feedback and contributions to this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
KoKBbOLh8AkmzLkI9IOqMaXfkbJorKpFCK769bXcRGeXhLcoM2rIqtiIafR2
R8Y2WvnVgTuQpRv2Q1AUGNxF5vc1RR8eudufgrJrz7BrSSUWR+uoKDTligFM
DkAIOWYUHBWg6Vx0SewyVYpCszPQjY0Mv6vch6JE0zXJbwZgd8B9wR7Il6QW
I6jOS0gFXzylqy+BpmRZrMTF3S/oopxhzB430cpRWXg7VuV7QNc+YY8fk4M5
pTysvCZ4b/qjG9xyTzdrtQhlG8nTvrY1L1tUHsWLu1vpXQz5Q6hdBtrfWetC
IE6lOwFb1S1Zamjb3lyAxY+xfSD1a4Epxc6wpwOBVWpVNMEIVISaKXbZIDC9
S9LbZMSOigBV+wpXig7VGhoxSxSlipcMEPFszE7xT4t2NIKlMmqEltQNhg1x
B9ZAzIpsIIU/cORX/DewOvpeOL117QWSGxKDSvUmtZbOTaE1lO3bAHp45N7q
kcr3DPN5N2aU01dfH+5fTg72Lve+Ot87UX4RaPGddTj6kVg2qXViNtlkUYob
iLS0n+KuJTVz1zxM8rqHK4gFz4chsC6h7HumcEAlInHIHVTVEOeNKEIIeY49
d7FMpWVaOcVKflOIHoJhsO56WRkudkvfTcI4CnPDTlUfxwotUuSN601pCIBn
6n6WwsKliHg+0aNTPb66P2bffiJqbHHp/jtzauC8KHM3WZvwPk7DeR3G8C6s
3CbpYiKP9kzTNLb8zGljzvDmhrRs3S3vTpuv0plzM9Jj8e3prMPgZWL7c9u7
lTL/Y+5Dl331sHZ3MncKu2Hr3v3zh0eerXJp776B/gJOjmBqBLYV+0b2M2ts
Xu0xJam+miMA2+w8/QNleIoTyxxM1biF4VSOB9RSj4eobgVV0ch98MCnnq7y
2qWdnmHo11SOFRQ+RDctfuOGbNeMtwz2HOuActh5gEOVxe5hfsXI4njKl5Hc
Bg2Di6tXX52fXp1N3hzuHRyes741kjoxp3YLno8+be7PIJn2BFXKwOOGl9jw
zNnnbBoVuUoOVLyLTeoilVV+cBNCDC5zLaiKHYYuKahFQiGOneH+GVoRpDKx
QbUju/KVpeUTPbh+eGpUdP02yTFoS47uZmT7gnKrnFnJPJpP1umcm3lRu7tV
RnUqQGY38uA638qDg87U5/QZpw+7Ie1VjVOYnT5cxVbnkSmPB3dXek137Rta
/4C+yJQvBv9ffLFXb+fP6oot2dQJ2OqInbnUOkhXO6J5ZM72RHNYSy5VJqV8
qH8F6rQPc/Ok3UCqBctkzuMi3HbZYS4s3GuXD1mYuHVviLtV+SakR/umnDrV
3wjDxhFHj/K7Ctym7vv2j1tU3ys0/BtqvofXG4Ctevd5vfNY78Mjx+ldqXLX
gO0K59eHl/tvtq2abRNwbMS2GwCeZoD0o182hd9k2Sl6B5gleAdp7WKvXK15
ytkl9O5ax5Jw30LHJ+BeDraNfFssuwHVJt4zdTrbI99GJnOc/DYk3DeHEbQW
xDQTDrpKSVKOs4C0zsnF4TKng8rJDMoTJmvHwK4dOypEe7UWyMKkTGh3Z5Lh
FrlT+dskVrWa1yodOU+SJnRiC4gUczVBDFK020YVNsHi2qzRqluukO4v4DpS
wW/du9wilXSki6Y1+12qtURwqLvdo8yI5aoMHOD93cmMV8GfyJt6hdL/ONPv
60xd6amt6mrq2vIksdtOx61ob7rxPEV99Lx6+NM4fK0/+IMGX5/CEmeAxBZ7
bYH0HSxuEKez0Nj+HuAh4ILXm9S0Sa9zJMY2YgHOeZzKs1vBHlOfd8QxdO3h
ItXk3B09pTYnDX3/3nIQNV76hVwzV0oU8q4umIdoYjnWVkSF00n9hdZ4eB3F
BUpsj+lXmbjsZ+nz0W4LS80JJHML+iJPOFQsgosVYVZMFDdjU8YIgP4tnND0
NFMcekdFTOVYF9iUOUW0h20Uce6i4uyxcUOcqwBqOBiR+yTEQJ11990HMxYN
mzYAaqMNDD5pDArRZq+mzq14fNjsdCMsF91tycHEo5k8bFLf1Z/fpiOJeCpY
Hhsmn5SnhgPrnDFlLemj4mA0PW8NIXRDD+KH1RFn4bo0JRNz5nrm+BvlIwdV
YXKPD10NRXNxHW7YR3y0HO2wry9O30pn+Tho8PNEJZ1PWAGEsRf/QEy2+eCA
dONyKB2XJgBLzIYT4IkhbVhOBkNKoldmQDowCHQepaF/YkuoWG0BfhLe4SyX
6Tue7IezFb+IfuRbjJckivKBsGwx2Hy6YIuBVyJ7G1bq0qRLuoYip3BTU2bj
0G9DNba3PPIqylKyU5fC1sQbQwahgsA3s5DVjskELdurwFqM0DmZm3TLXhpb
nqY1GQRv4GY7rQjRQqaN3U1hl4laJHdatMHDOryboEQnBcJPZjhgksMIjTFn
BoGBOI6G0Sgc1MJrJ1mtluX2L7eJeXzRZWsCVPBOLx/CrKAfK6yzG+ZWISN7
40Bdb+RqcVkKUZWTTmMWdBB8t1V7+HPLzxtiLNn5Q5EhN/Npqnbjt5688vPl
n9vNkyv6Gcw0AXQuBnLtM5AXJtP7gpsKbSwQXlq+UF1Rg93qlTO18O4g1VmQ
nOGzW5wK0EY5Ut3rW4zUDz0FH1SMVBN6KhGDoC3qkHpcrypko8CbcVXh2aIC
qZlSmbPpbxqBngStt9QPeIwv1Lq/jNY8LYt+g+VZsA8ZCmV6vNWAc9T0jzdp
mW81TC4NpjxT+7r9xn1F+wyZ6Mj2n0dbgvQbd3i3iTKe9wM+DrMlz4tqLd5H
zml2G2bzfsBv+S3xfS4a3/0GXeIO9Vv1MOZZBpZ712+kjCdauGh6VtPiGzVh
5VrOilBzlb5ZWyOoI2fXpP7xMzYR7A1Dbby55dYVOTwbnN5oYUiw6s7NJfik
EPBdpZ4aqMbJYV6+O8lyM98e+dznk3sxrs57b8m2PLnbk+kOgtwsuyK23RV2
BXWDvQVA9OUJYbs4cc7opt+fQCwuWjKNwUtWwfXlqB7RxVcLDV5v9OU5dxvP
mRFtH5SAVau7h/fJIWpEm+N5yXCz6EjJFmuupG2wJE92IEQXK+IwQiY2bd0s
uKZr1Y6rOuhssrZrhwAnoi2qseRpCHc1Vru05STLzbJd2NivF7DrHoM5Lu52
6UiCealuTOIm1V1W2Q19d+1lkB0LGLlHaKmj6nxbzX4xptqAcXPimd0Tqa2a
z47SdkloRmhxtzM4CzB/YLYncZPqqzgtkr2FqUF6wm/ldoI8udHFBAwgeAnu
ZcY7vZup1orY4qy9ejbYE0dBq9ee4GFLANZ4/JZ9QlUvrPIv6C0u31n8EoYK
gRjvZbqdstZuh49Z+/bv2+nwct4g09nlqMUs2hzmNbGapze94Gtn5MFYvEFd
CaKPALWDzuL1eEB+kC5YyEgB+H498aFSBStKfOuwfDmffIHObcrm0WLBM3pP
DB4IQNx0ACC4JqTX8vXA+mYrvoNGI0WcaFbNFTpVQDuEV5evh890XEK+fTAi
J8m9fAb7vn7dT3C94ncC6Lqi1/ESI/met026KfFVYvS+DHw9cUSvlqB330ju
YGKDOHGOfMTOxFB6wUZarNTbz+htQPMymYf0LiCzxVKrUVjoS6N12DCzihXN
0Ew8jZVpPYNpXMq6rAf2jUbateOR/uvt+2lycy/Yrp/WOARPb3ImAWpdNZO4
LVtr1uDO/pokaShJan/9QEubTRHv5lHfMm++jTHM5SmHfOzo15kk5PKVStRI
rbj076KJ6jcNb8P7TjCZok7f9YU8zLLU36ZRwFW13h+yPwlXG/ydh05o+YhG
X7gDDBVdsHS2pR9UD34oUF/QYem+VNZRvWvAB0D2EkGlsP4TVEOI4d68vorR
6+aBz8s93tJo+JnvHHE1/Wx/a8TYRw0HtNdhum+KACR/D4Q2SAbigAt+nMjt
aDrOZW9s6xUYQTuPIKh5POte8nx7qSvCgUHZkq5RAQWVsHwF8KTMIv15cdl5
MGqm+qAzc1TKAm1j8SsI8PVaZBRqtFZUdDIIV/On74h4erUgHvyrO7sGufpl
JfOqWPtONEepVm49a1czKKdP3zW7MIrcVjYphLo5FdHVySzHW8gvfZjMque1
iMuMF9n9hN7uCxnT0laYg143qwwsXStJoJyh1wnK5vK5/BrI95qp75Ia+Z7k
hnmYiwznokKHGtu1cEOsxJ5HskI8HR0tX//Kckt1eRA4T+7/Cqz9ctM0HncR
5Hr7Yl1iaTiXnnndopEO5n6m8P/c7Sqymo6ns9LqeqJ0cPueLCuczlfSPa+p
/Hp6lujFfB4vkIR6zvyI3Gmf9ZG1kMGcPJr8WzrAH8R0JKeNvXQplVZJYlHk
liaVSy6JTuZwB8UqHoSzY7U88j5Ly8TOq81I3WACcXsYIYI8PT4sSV2H8k0G
6HC31yDEEw3ahiRhqDYkgVtYHsdAxIQgq9eXqcuCCAT9PqWfIzLgvhbXFNAv
96nANb3i95fbdsdxZTys7LmpSNM5lnQpwTjlr27SzFrlFZjKEIeSa234zhWH
0zyNy4JPJF7/AeaYfj2sgjOfBXCe/28zw0YmUuulpinKDCQf7CB11I9PtEj4
d4gx4rmIRmpSvLW0fsUK0NXolWtDQy6CKBFZ/j1qF5pGEOxsGksuW6Nwtdh0
h+J6LeqMx5UgfqHAfj2ZSMqqCT0RvebLsx/iEYtHHoYc7P0B8csrHdsCXoJ7
U+rIp2YDwk1xlVN/Gdmu7GlO31FG+yTuaIt4iuqtjVHu3PxmNtmssL1adnDZ
IS/R8vEJSzaEPJISgeOPKyZBn1dGkjlPM8lucrnCmrzpDmpTcXNLn+i5GJeT
yDk80UmR5z7VK3OkzZm8bPDUukPn28bzb9rJjG30oKp57YcRL/ispPf37KcJ
/jyU+Eku+SRirm7iexs2WXQTzu6xFaIBsnmUz0r1qynW7+NsNvG9+NEL/Sct
5A9k0U9KHO293XNMre8X1D+WEmKnDuqeIrtXLxkaNH8+9er8KB/IUQD4kXr4
33wc8XP7l0TVz+1oaMYBiL3jJzaCoA6JYyauCDxYi+ZwzfNu9R3RVXK8fXsn
YPbrnfGS522+rls1Ht8LIp33tOndb6Ny3XIMMl+i4LpVD3K9TaRx3QZvTuB4
2jwIDnh1CgdVeWj/gjdTP40nf5eFdrPULwKBPZxz2iGGeghGk1EeqF/woV/6
nUIkQSPem+EOeMznS/otIHBCEW75/MVgEcY5F9tlYfKOHkA/TgHpjyk7ATp4
lu6wi/L78J6dASmx+AmE+ieWaYd4wfkc56J7ZDPRtBQcSOeqvGUU/C/2Fw7k
vXwAAA==

-->

</rfc>
