<?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.6.17 (Ruby 3.0.2) -->
<?rfc docindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qlog-h3-events-09" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>HTTP/3 qlog event definitions</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-09"/>
    <author initials="R." surname="Marx" fullname="Robin Marx" role="editor">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <author initials="L." surname="Niccolini" fullname="Luca Niccolini" role="editor">
      <organization>Meta</organization>
      <address>
        <email>lniccolini@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Seemann" fullname="Marten Seemann" role="editor">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines a qlog event schema containing concrete events for the
core HTTP/3 protocol and selected extensions.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
      <t>Concrete examples of integrations of this schema in
various programming languages can be found at
<eref target="https://github.com/quiclog/qlog/">https://github.com/quiclog/qlog/</eref>.</t>
    </note>
  </front>
  <middle>
    <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 the core HTTP/3 protocol <xref target="RFC9114"/> and selected
extensions (<xref target="EXTENDED-CONNECT"/>, <xref target="H3_PRIORITIZATION"/>, and
<xref target="H3-DATAGRAM"/>).</t>
      <t>The event namespace with identifier <tt>http3</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="h3-events"/> 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="h3-events">
        <name>HTTP/3 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">http3:parameters_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">http3:parameters_restored</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersrestored"/></td>
          </tr>
          <tr>
            <td align="left">http3:stream_type_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-streamtypeset"/></td>
          </tr>
          <tr>
            <td align="left">http3:priority_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-priorityupdated"/></td>
          </tr>
          <tr>
            <td align="left">http3:frame_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-framecreated"/></td>
          </tr>
          <tr>
            <td align="left">http3:frame_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-frameparsed"/></td>
          </tr>
          <tr>
            <td align="left">http3:datagram_created</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramcreated"/></td>
          </tr>
          <tr>
            <td align="left">http3:datagram_parsed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramparsed"/></td>
          </tr>
          <tr>
            <td align="left">http3:push_resolved</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="h3-pushresolved"/></td>
          </tr>
        </tbody>
      </table>
      <t>When any event from this document is included in a qlog trace, the
"protocol_types" qlog array field <bcp14>MUST</bcp14> contain an entry with the value "HTTP/3":</t>
      <figure anchor="protocoltype-extension-h3">
        <name>ProtocolType extension for HTTP/3</name>
        <sourcecode type="cddl"><![CDATA[
$ProtocolType /= "HTTP/3"
]]></sourcecode>
      </figure>
      <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 HTTP/3 connection. 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 anchor="notational-conventions">
        <name>Notational Conventions</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>
        <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, protocol_types, importance, RawInfo, and time-related
fields.</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>
    <section anchor="schema-def">
      <name>Event Schema Definition</name>
      <t>This document describes how the core HTTP/3 protocol and selected extensions can
be expressed in qlog using a newly defined event schema. Per the requirements in
<xref section="8" sectionFormat="of" target="QLOG-MAIN"/>, this document registers the <tt>http3</tt> namespace. The
event schema URI is <tt>urn:ietf:params:qlog:events:http3</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:http3</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 07 of this
document is identified using the URI <tt>urn:ietf:params:qlog:events:http3-07</tt>.</t>
        <t>The namespace identifier itself is not affected by this requirement.</t>
      </section>
    </section>
    <section anchor="h3-ev">
      <name>HTTP/3 Events</name>
      <t>HTTP/3 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="h3-events-def">
        <name>HTTP3EventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
HTTP3EventData = HTTP3ParametersSet /
              HTTP3ParametersRestored /
              HTTP3StreamTypeSet /
              HTTP3PriorityUpdated /
              HTTP3FrameCreated /
              HTTP3FrameParsed /
              HTTP3DatagramCreated /
              HTTP3DatagramParsed /
              HTTP3PushResolved

$ProtocolEventData /= HTTP3EventData
]]></sourcecode>
      </figure>
      <t>HTTP 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>HTTP/3 frames are transmitted on QUIC streams, which allows them to span
multiple QUIC packets. Some implementations might send a single large frame,
rather than a sequence of smaller frames, in order to amortize frame header
overhead. HTTP/3 frame headers are represented by the frame_created
(<xref target="h3-framecreated"/>) and frame_parsed (<xref target="h3-frameparsed"/>) events. Subsequent
frame payload data transfer is indicated by stream_data_moved events.
Furthermore, stream_data_moved events can appear before frame_parsed events
because implementations need to read data from a stream in order to parse the
frame header.</t>
      <t>The concrete HTTP/3 event types are further defined below, their type identifier
is the heading name.</t>
      <section anchor="h3-parametersset">
        <name>parameters_set</name>
        <t>The <tt>parameters_set</tt> event contains HTTP/3 and QPACK-level settings, mostly
those received from the HTTP/3 SETTINGS frame. It has Base importance level; see
<xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>All these parameters are typically set once and never change. However, they
might be set at different times during the connection, therefore a qlog can have
multiple instances of <tt>parameters_set</tt> with different fields set.</t>
        <t>The "owner" field reflects how Settings are exchanged on a connection. Sent
settings have the value "local" and received settings have the value
"received".</t>
        <figure anchor="h3-parametersset-def">
          <name>HTTP3ParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ParametersSet = {
    ? owner: Owner

    ; RFC9114
    ? max_field_section_size: uint64

    ; RFC9204
    ? max_table_capacity: uint64
    ? blocked_streams_count: uint64

    ; RFC9220 (SETTINGS_ENABLE_CONNECT_PROTOCOL)
    ? extended_connect: uint16

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint16

    ; qlog-specific
    ; indicates whether this implementation waits for a SETTINGS
    ; frame before processing requests
    ? waits_for_settings: bool

    * $$http3-parametersset-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>parameters_set</tt> event can contain any number of unspecified fields. This
allows for representation of reserved settings (aka GREASE) or ad-hoc support
for extension settings that do not have a related qlog schema definition.</t>
      </section>
      <section anchor="h3-parametersrestored">
        <name>parameters_restored</name>
        <t>When using QUIC 0-RTT, HTTP/3 clients are expected to remember and reuse the
server's SETTINGs from the previous connection. The <tt>parameters_restored</tt> event
is used to indicate which HTTP/3 settings were restored and to which values when
utilizing 0-RTT. It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <figure anchor="h3-parametersrestored-def">
          <name>HTTP3ParametersRestored definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ParametersRestored = {
    ; RFC9114
    ? max_field_section_size: uint64

    ; RFC9204
    ? max_table_capacity: uint64
    ? blocked_streams_count: uint64

    ; RFC9220 (SETTINGS_ENABLE_CONNECT_PROTOCOL)
    ? extended_connect: uint16

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint16

    * $$http3-parametersrestored-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-streamtypeset">
        <name>stream_type_set</name>
        <t>The <tt>stream_type_set</tt> event conveys when a HTTP/3 stream type becomes known; see
Sections <xref target="RFC9114" section="6.1" sectionFormat="bare"/> and <xref target="RFC9114" section="6.2" sectionFormat="bare"/> of <xref target="RFC9114"/>. It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>Client bidirectional streams always have a stream_type value of "request".
Server bidirectional streams have no defined use, although extensions could
change that.</t>
        <t>Unidirectional streams in either direction begin with with a variable-length
integer type. Where the type is not known, the stream_type value of "unknown"
type can be used and the value captured in the stream_type_bytes field; a
numerical value without variable-length integer encoding.</t>
        <t>The generic <tt>$HTTP3StreamType</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional HTTP/3 stream types.</t>
        <figure anchor="h3-streamtypeset-def">
          <name>HTTP3StreamTypeSet definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3StreamTypeSet = {
    ? owner: Owner
    stream_id: uint64
    stream_type: $HTTP3StreamType

    ; only when stream_type === "unknown"
    ? stream_type_bytes: uint64

    ; only when stream_type === "push"
    ? associated_push_id: uint64

    * $$http3-streamtypeset-extension
}

$HTTP3StreamType /=   "request" /
                      "control" /
                      "push" /
                      "reserved" /
                      "unknown" /
                      "qpack_encode" /
                      "qpack_decode"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-priorityupdated">
        <name>priority_updated</name>
        <t>Emitted when the priority of a request stream or push stream is initialized or
updated through mechanisms defined in <xref target="RFC9218"/>. For example, the priority
can be updated through signals received from client and/or server (e.g., in
HTTP/3 HEADERS or PRIORITY_UPDATE frames) or it can be changed or overridden due
to local policies. The event has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <figure anchor="h3-priorityupdated-def">
          <name>HTTP3PriorityUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3PriorityUpdated = {
    ; if the prioritized element is a request stream
    ? stream_id: uint64

    ; if the prioritized element is a push stream
    ? push_id: uint64

    ? old: HTTP3Priority
    new: HTTP3Priority

    * $$http3-priorityupdated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-framecreated">
        <name>frame_created</name>
        <t>The <tt>frame_created</tt> event is emitted when the HTTP/3 framing actually happens.
It has Core importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event does not necessarily coincide with HTTP/3 data getting passed to the
QUIC layer. For that, see the <tt>stream_data_moved</tt> event in <xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-framecreated-def">
          <name>HTTP3FrameCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3FrameCreated = {
    stream_id: uint64
    ? length: uint64
    frame: $HTTP3Frame
    ? raw: RawInfo

    * $$http3-framecreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-frameparsed">
        <name>frame_parsed</name>
        <t>The <tt>frame_parsed</tt> event is emitted when the HTTP/3 frame is parsed. It has Core
importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event is not necessarily the same as when the HTTP/3 data is actually
received on the QUIC layer. For that, see the <tt>stream_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-frameparsed-def">
          <name>HTTP3FrameParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3FrameParsed = {
    stream_id: uint64
    ? length: uint64
    frame: $HTTP3Frame
    ? raw: RawInfo

    * $$h3-frameparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-datagramcreated">
        <name>datagram_created</name>
        <t>The <tt>datagram_created</tt> event is emitted when an HTTP/3 Datagram is created (see
<xref target="RFC9297"/>). It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event does not necessarily coincide with the HTTP/3 Datagram getting passed
to the QUIC layer. For that, see the <tt>datagram_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-datagramcreated-def">
          <name>HTTP3DatagramCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3DatagramCreated = {
    quarter_stream_id: uint64
    ? datagram: $HTTP3Datagram
    ? raw: RawInfo

    * $$http3-datagramcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-datagramparsed">
        <name>datagram_parsed</name>
        <t>The <tt>datagram_parsed</tt> event is emitted when the HTTP/3 Datagram is parsed (see
<xref target="RFC9297"/>). It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event is not necessarily the same as when the HTTP/3 Datagram is actually
received on the QUIC layer. For that, see the <tt>datagram_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-datagramparsed-def">
          <name>HTTP3DatagramParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3DatagramParsed = {
    quarter_stream_id: uint64
    ? datagram: $HTTP3Datagram
    ? raw: RawInfo

    * $$http3-datagramparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-pushresolved">
        <name>push_resolved</name>
        <t>The <tt>push_resolved</tt> event is emitted when a pushed resource (<xref section="4.6" sectionFormat="of" target="RFC9114"/>) is successfully claimed (used) or, conversely, abandoned (rejected)
by the application on top of HTTP/3 (e.g., the web browser). This event provides
additional context that can is aid debugging issues related to server push. It
has Extra importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <figure anchor="h3-pushresolved-def">
          <name>HTTP3PushResolved definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3PushResolved = {
    ? push_id: uint64

    ; in case this is logged from a place that does not have access
    ; to the push_id
    ? stream_id: uint64
    decision: HTTP3PushDecision

    * $$http3-pushresolved-extension
}

HTTP3PushDecision = "claimed" /
                 "abandoned"
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="http3-data-type-definitions">
      <name>HTTP/3 Data Type Definitions</name>
      <t>The following data type definitions can be used in HTTP/3 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="http3frame">
        <name>HTTP3Frame</name>
        <t>The generic <tt>$HTTP3Frame</tt> is defined here as a CDDL "type socket" extension point.
It can be extended to support additional HTTP/3 frame types.</t>
        <figure anchor="h3-frame-def">
          <name>HTTP3Frame type socket definition</name>
          <artwork><![CDATA[
; The HTTP3Frame is any key-value map (e.g., JSON object)
$HTTP3Frame /= {
    * text => any
}
]]></artwork>
        </figure>
        <t>The HTTP/3 frame types defined in this document are as follows:</t>
        <figure anchor="h3baseframe-def">
          <name>HTTP3BaseFrames definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3BaseFrames = HTTP3DataFrame /
                  HTTP3HeadersFrame /
                  HTTP3CancelPushFrame /
                  HTTP3SettingsFrame /
                  HTTP3PushPromiseFrame /
                  HTTP3GoawayFrame /
                  HTTP3MaxPushIDFrame /
                  HTTP3ReservedFrame /
                  HTTP3UnknownFrame

$HTTP3Frame /= HTTP3BaseFrames
]]></sourcecode>
        </figure>
      </section>
      <section anchor="http3datagram">
        <name>HTTP3Datagram</name>
        <t>The generic <tt>$HTTP3Datagram</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional HTTP/3 datagram types. This
document intentionally does not define any specific qlog schemas for specific
HTTP/3 Datagram types.</t>
        <figure anchor="h3-datagram-def">
          <name>HTTP3Datagram type socket definition</name>
          <artwork><![CDATA[
; The HTTP3Datagram is any key-value map (e.g., JSON object)
$HTTP3Datagram /= {
    * text => any
}
]]></artwork>
        </figure>
        <section anchor="http3dataframe">
          <name>HTTP3DataFrame</name>
          <figure anchor="h3dataframe-def">
            <name>HTTP3DataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3DataFrame = {
    frame_type: "data"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3headersframe">
          <name>HTTP3HeadersFrame</name>
          <t>The payload of an HTTP/3 HEADERS frame is the QPACK-encoding of an HTTP field
section; see <xref section="7.2.2" sectionFormat="of" target="RFC9114"/>. <tt>HTTP3HeaderFrame</tt>, in contrast,
contains the HTTP field section without QPACK encoding.</t>
          <figure anchor="h3field-def">
            <name>HTTP3HTTPField definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3HTTPField = {
    ? name: text
    ? name_bytes: hexstring
    ? value: text
    ? value_bytes: hexstring
}
]]></sourcecode>
          </figure>
          <figure anchor="h3-headersframe-def">
            <name>HTTP3HeadersFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3HeadersFrame = {
    frame_type: "headers"
    headers: [* HTTP3HTTPField]
}
]]></sourcecode>
          </figure>
          <t>For example, the HTTP field section</t>
          <artwork><![CDATA[
:path: /index.html
:method: GET
:authority: example.org
:scheme: https
]]></artwork>
          <t>would be represented in a JSON serialization as:</t>
          <figure anchor="h3-headersframe-ex">
            <name>HTTP3HeadersFrame example</name>
            <artwork><![CDATA[
headers: [
  {
    "name": ":path",
    "value": "/"
  },
  {
    "name": ":method",
    "value": "GET"
  },
  {
    "name": ":authority",
    "value": "example.org"
  },
  {
    "name": ":scheme",
    "value": "https"
  }
]
]]></artwork>
          </figure>
          <t><xref section="4.2" sectionFormat="of" target="RFC9114"/> and <xref section="5.1" sectionFormat="of" target="RFC9110"/> define rules for the
characters used in HTTP field sections names and values. Characters outside the
range are invalid and result in the message being treated as malformed. It can
however be useful to also log these invalid HTTP fields. Characters in the
allowed range can be safely logged by the text type used in the <tt>name</tt> and
<tt>value</tt> fields of <tt>HTTP3HTTPField</tt>. Characters outside the range are unsafe for the
text type and need to be logged using the <tt>name_bytes</tt> and <tt>value_bytes</tt> field.
An instance of <tt>HTTP3HTTPField</tt> <bcp14>MUST</bcp14> include either the <tt>name</tt> or <tt>name_bytes</tt>
field and <bcp14>MAY</bcp14> include both. An <tt>HTTP3HTTPField</tt> <bcp14>MAY</bcp14> include a <tt>value</tt> or
<tt>value_bytes</tt> field or neither.</t>
        </section>
        <section anchor="http3cancelpushframe">
          <name>HTTP3CancelPushFrame</name>
          <figure anchor="h3-cancelpushframe-def">
            <name>HTTP3CancelPushFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3CancelPushFrame = {
    frame_type: "cancel_push"
    push_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3settingsframe">
          <name>HTTP3SettingsFrame</name>
          <t>The settings field can contain zero or more entries. Each setting has a name
field, which corresponds to Setting Name as defined (or as would be defined if
registered) in the "HTTP/3 Settings" registry maintained at
<eref target="https://www.iana.org/assignments/http3-parameters">https://www.iana.org/assignments/http3-parameters</eref>.</t>
          <t>An endpoint that receives unknown settings is not able to log a specific name.
Instead, the name value of "unknown" can be used and the value captured in the
<tt>name_bytes</tt> field; a numerical value without variable-length integer encoding.</t>
          <figure anchor="h3settingsframe-def">
            <name>HTTP3SettingsFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3SettingsFrame = {
    frame_type: "settings"
    settings: [* HTTP3Setting]
}

HTTP3Setting = {
    ? name: $HTTP3SettingsName
    ; only when name === "unknown"
    ? name_bytes: uint64

    value: uint64
}

$HTTP3SettingsName /= "settings_qpack_max_table_capacity" /
                   "settings_max_field_section_size" /
                   "settings_qpack_blocked_streams" /
                   "settings_enable_connect_protocol" /
                   "settings_h3_datagram" /
                   "reserved" /
                   "unknown"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3pushpromiseframe">
          <name>HTTP3PushPromiseFrame</name>
          <figure anchor="h3pushpromiseframe-def">
            <name>HTTP3PushPromiseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3PushPromiseFrame = {
    frame_type: "push_promise"
    push_id: uint64
    headers: [* HTTP3HTTPField]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3goawayframe">
          <name>HTTP3GoAwayFrame</name>
          <figure anchor="h3goawayframe-def">
            <name>HTTP3GoawayFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3GoawayFrame = {
    frame_type: "goaway"

    ; Either stream_id or push_id.
    ; This is implicit from the sender of the frame
    id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3maxpushidframe">
          <name>HTTP3MaxPushIDFrame</name>
          <figure anchor="h3maxpushidframe-def">
            <name>HTTP3MaxPushIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3MaxPushIDFrame = {
    frame_type: "max_push_id"
    push_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3priorityupdateframe">
          <name>HTTP3PriorityUpdateFrame</name>
          <t>The PRIORITY_UPDATE frame is defined in <xref target="RFC9218"/>.</t>
          <figure anchor="h3priorityupdateframe-def">
            <name>HTTP3PriorityUpdateFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3PriorityUpdateFrame = {
    frame_type: "priority_update"

    ; if the prioritized element is a request stream
    ? stream_id: uint64

    ; if the prioritized element is a push stream
    ? push_id: uint64

    priority_field_value: HTTP3Priority
}

; The priority value in ASCII text, encoded using Structured Fields
; Example: u=5, i
HTTP3Priority = text
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3reservedframe">
          <name>HTTP3ReservedFrame</name>
          <figure anchor="h3reservedframe-def">
            <name>HTTP3ReservedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3ReservedFrame = {
    frame_type: "reserved"
    ? length: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3unknownframe">
          <name>HTTP3UnknownFrame</name>
          <t>The frame_type_bytes field is the numerical value without variable-length
integer encoding.</t>
          <figure anchor="h3unknownframe-def">
            <name>HTTP3UnknownFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3UnknownFrame = {
    frame_type: "unknown"
    frame_type_bytes: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3applicationerror">
          <name>HTTP3ApplicationError</name>
          <figure anchor="h3-applicationerror-def">
            <name>HTTP3ApplicationError definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3ApplicationError = "http_no_error" /
                       "http_general_protocol_error" /
                       "http_internal_error" /
                       "http_stream_creation_error" /
                       "http_closed_critical_stream" /
                       "http_frame_unexpected" /
                       "http_frame_error" /
                       "http_excessive_load" /
                       "http_id_error" /
                       "http_settings_error" /
                       "http_missing_settings" /
                       "http_request_rejected" /
                       "http_request_cancelled" /
                       "http_request_incomplete" /
                       "http_early_response" /
                       "http_connect_error" /
                       "http_version_fallback"
]]></sourcecode>
          </figure>
          <t>The HTTP3ApplicationError extends the general $ApplicationError
definition in the qlog QUIC document, see <xref target="QLOG-QUIC"/>.</t>
          <sourcecode type="cddl"><![CDATA[
; ensure HTTP errors are properly validated in QUIC events as well
; e.g., QUIC's ConnectionClose Frame
$ApplicationError /= HTTP3ApplicationError
]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy 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.</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:http3</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>http3</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>parameters_set,parameters_restored,stream_type_set,priority_updated,frame_created,frame_parsed,datagram_created,datagram_parsed,push_resolved</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Event definitions related to the HTTP/3 application protocol.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9110" to="HTTP"/>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC9110">
        <front>
          <title>HTTP Semantics</title>
          <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
          <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
          <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
            <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="97"/>
        <seriesInfo name="RFC" value="9110"/>
        <seriesInfo name="DOI" value="10.17487/RFC9110"/>
      </reference>
      <reference anchor="RFC9114">
        <front>
          <title>HTTP/3</title>
          <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9114"/>
        <seriesInfo name="DOI" value="10.17487/RFC9114"/>
      </reference>
      <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="8" month="July" year="2024"/>
          <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.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-09"/>
      </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="8" month="July" year="2024"/>
          <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.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-08"/>
      </reference>
      <reference anchor="EXTENDED-CONNECT">
        <front>
          <title>Bootstrapping WebSockets with HTTP/3</title>
          <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9220"/>
        <seriesInfo name="DOI" value="10.17487/RFC9220"/>
      </reference>
      <reference anchor="H3_PRIORITIZATION">
        <front>
          <title>Extensible Prioritization Scheme for HTTP</title>
          <author fullname="K. Oku" initials="K." surname="Oku"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>This document describes a scheme that allows an HTTP client to communicate its preferences for how the upstream server prioritizes responses to its requests, and also allows a server to hint to a downstream intermediary how its responses should be prioritized when they are forwarded. This document defines the Priority header field for communicating the initial priority in an HTTP version-independent manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing responses. These share a common format structure that is designed to provide future extensibility.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9218"/>
        <seriesInfo name="DOI" value="10.17487/RFC9218"/>
      </reference>
      <reference anchor="H3-DATAGRAM">
        <front>
          <title>HTTP Datagrams and the Capsule Protocol</title>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
            <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
            <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9297"/>
        <seriesInfo name="DOI" value="10.17487/RFC9297"/>
      </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>
      <reference anchor="RFC9218">
        <front>
          <title>Extensible Prioritization Scheme for HTTP</title>
          <author fullname="K. Oku" initials="K." surname="Oku"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>This document describes a scheme that allows an HTTP client to communicate its preferences for how the upstream server prioritizes responses to its requests, and also allows a server to hint to a downstream intermediary how its responses should be prioritized when they are forwarded. This document defines the Priority header field for communicating the initial priority in an HTTP version-independent manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing responses. These share a common format structure that is designed to provide future extensibility.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9218"/>
        <seriesInfo name="DOI" value="10.17487/RFC9218"/>
      </reference>
      <reference anchor="RFC9297">
        <front>
          <title>HTTP Datagrams and the Capsule Protocol</title>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
            <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
            <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9297"/>
        <seriesInfo name="DOI" value="10.17487/RFC9297"/>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Much of the initial work by Robin Marx was done at the Hasselt and KU Leuven
Universities.</t>
      <t>Thanks to Jana Iyengar, Brian Trammell, Dmitri Tikhonov, Stephen Petrides, Jari
Arkko, Marcus Ihlar, Victor Vasiliev, Mirja Kuehlewind, Jeremy Laine, Kazu
Yamamoto, Christian Huitema, Hugo Landau and Jonathan Lennox for their feedback
and suggestions.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-08">
        <name>Since draft-ietf-quic-qlog-h3-events-08:</name>
        <ul spacing="normal">
          <li>Removed individual categories and put every event in the single <tt>http3</tt> event
schema namespace. Major change (#439)</li>
          <li>Changed protocol id from <tt>HTTP3</tt> to <tt>HTTP/3</tt> (#428)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-07">
        <name>Since draft-ietf-quic-qlog-h3-events-07:</name>
        <ul spacing="normal">
          <li>TODO (we forgot...)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-06">
        <name>Since draft-ietf-quic-qlog-h3-events-06:</name>
        <ul spacing="normal">
          <li>ProtocolEventBody is now called ProtocolEventData (#352)</li>
          <li>Editorial changes (#402)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-05">
        <name>Since draft-ietf-quic-qlog-h3-events-05:</name>
        <ul spacing="normal">
          <li>Removed all qpack event definitions (#335)</li>
          <li>Various editorial changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-04">
        <name>Since draft-ietf-quic-qlog-h3-events-04:</name>
        <ul spacing="normal">
          <li>Renamed 'http' category to 'h3' (#300)</li>
          <li>H3HTTPField.value is now optional (#296)</li>
          <li>Added definitions for RFC9297 (HTTP/3 Datagram extension) (#310)</li>
          <li>Added definitions for RFC9218 (HTTP Extensible Prioritizations extension) (#312)</li>
          <li>Added definitions for RFC9220 (Extended Connect extension) (#325)</li>
          <li>Editorial and formatting changes (#298, #258, #299, #304, #327)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-03">
        <name>Since draft-ietf-quic-qlog-h3-events-03:</name>
        <ul spacing="normal">
          <li>Ensured consistent use of RawInfo to indicate raw wire bytes (#243)</li>
          <li>Changed HTTPStreamTypeSet:raw_stream_type to stream_type_value (#54)</li>
          <li>Changed HTTPUnknownFrame:raw_frame_type to frame_type_value (#54)</li>
          <li>Renamed max_header_list_size to max_field_section_size (#282)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-02">
        <name>Since draft-ietf-quic-qlog-h3-events-02:</name>
        <ul spacing="normal">
          <li>Renamed HTTPStreamType data to request (#222)</li>
          <li>Added HTTPStreamType value unknown (#227)</li>
          <li>Added HTTPUnknownFrame (#224)</li>
          <li>Replaced old and new fields with stream_type in HTTPStreamTypeSet (#240)</li>
          <li>Changed HTTPFrame to a CDDL plug type (#257)</li>
          <li>Moved data definitions out of the appendix into separate sections</li>
          <li>Added overview Table of Contents</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-01">
        <name>Since draft-ietf-quic-qlog-h3-events-01:</name>
        <ul spacing="normal">
          <li>No changes - new draft to prevent expiration</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-00">
        <name>Since draft-ietf-quic-qlog-h3-events-00:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-02">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-02:</name>
        <ul spacing="normal">
          <li>These changes were done in preparation of the adoption of the drafts by the QUIC
working group (#137)</li>
          <li>Split QUIC and HTTP/3 events into two separate documents</li>
          <li>Moved RawInfo, Importance, Generic events and Simulation events to the main
schema document.</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-01">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-01:</name>
        <t>Major changes:</t>
        <ul spacing="normal">
          <li>Moved data_moved from http to transport. Also made the "from" and "to" fields
flexible strings instead of an enum (#111,#65)</li>
          <li>Moved packet_type fields to PacketHeader. Moved packet_size field out of
PacketHeader to RawInfo:length (#40)</li>
          <li>Made events that need to log packet_type and packet_number use a header field
instead of logging these fields individually</li>
          <li>Added support for logging retry, stateless reset and initial tokens (#94,#86,#117)</li>
          <li>Moved separate general event categories into a single category "generic" (#47)</li>
          <li>Added "transport:connection_closed" event (#43,#85,#78,#49)</li>
          <li>Added version_information and alpn_information events (#85,#75,#28)</li>
          <li>Added parameters_restored events to help clarify 0-RTT behaviour (#88)</li>
        </ul>
        <t>Smaller changes:</t>
        <ul spacing="normal">
          <li>Merged loss_timer events into one loss_timer_updated event</li>
          <li>Field data types are now strongly defined (#10,#39,#36,#115)</li>
          <li>Renamed qpack instruction_received and instruction_sent to instruction_created
and instruction_parsed (#114)</li>
          <li>Updated qpack:dynamic_table_updated.update_type. It now has the value "inserted"
instead of "added" (#113)</li>
          <li>Updated qpack:dynamic_table_updated. It now has an "owner" field to
differentiate encoder vs decoder state (#112)</li>
          <li>Removed push_allowed from http:parameters_set (#110)</li>
          <li>Removed explicit trigger field indications from events, since this was moved to
be a generic property of the "data" field (#80)</li>
          <li>Updated transport:connection_id_updated to be more in line with other similar
events. Also dropped importance from Core to Base (#45)</li>
          <li>Added length property to PaddingFrame (#34)</li>
          <li>Added packet_number field to transport:frames_processed (#74)</li>
          <li>Added a way to generically log packet header flags (first 8 bits) to
PacketHeader</li>
          <li>Added additional guidance on which events to log in which situations (#53)</li>
          <li>Added "simulation:scenario" event to help indicate simulation details</li>
          <li>Added "packets_acked" event (#107)</li>
          <li>Added "datagram_ids" to the datagram_X and packet_X events to allow tracking of
coalesced QUIC packets (#91)</li>
          <li>Extended connection_state_updated with more fine-grained states (#49)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-00">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-00:</name>
        <ul spacing="normal">
          <li>Event and category names are now all lowercase</li>
          <li>Added many new events and their definitions</li>
          <li>"type" fields have been made more specific (especially important for PacketType
fields, which are now called packet_type instead of type)</li>
          <li>Events are given an importance indicator (issue #22)</li>
          <li>Event names are more consistent and use past tense (issue #21)</li>
          <li>Triggers have been redefined as properties of the "data" field and updated for most events (issue #23)</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
AiGSCVXdlZVT5G4m4KH/Bv5/NJchcgAA

-->

</rfc>
