<?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-05" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>HTTP/3 and QPACK qlog event definitions</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-05"/>
    <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>Protocol Labs</organization>
      <address>
        <email>marten@protocol.ai</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes concrete qlog event definitions and their metadata for
HTTP/3 and QPACK-related events. These events can then be embedded in the higher
level schema defined in <xref target="QLOG-MAIN"/>.</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 describes the values of the qlog name ("category" + "event") and
"data" fields and their semantics for the HTTP/3 protocol <xref target="HTTP3"/>,
QPACK <xref target="QPACK"/>, and some of their extensions (see
<xref target="EXTENDED-CONNECT"/>, <xref target="H3_PRIORITIZATION"/> and
<xref target="H3-DATAGRAM"/>).</t>
      <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, category,
type, data, group_id, protocol_type, importance, RawInfo, and time-related
fields.</t>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This document describes how the HTTP/3 and QPACK can be expressed in qlog using
the schema defined in <xref target="QLOG-MAIN"/>. HTTP/3 and QPACK events are defined with a
category, a name (the concatenation of "category" and "event"), an "importance",
an optional "trigger", and "data" fields.</t>
      <t>Some data fields use complex datastructures. These are represented as enums or
re-usable definitions, which are grouped together on the bottom of this document
for clarity.</t>
      <t>When any event from this document is included in a qlog trace, the
"protocol_type" qlog array field <bcp14>MUST</bcp14> contain an entry with the value "HTTP3".</t>
      <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>
    <section anchor="http3-and-qpack-event-overview">
      <name>HTTP/3 and QPACK Event Overview</name>
      <t>This document defines events in two categories, written as lowercase to follow
convention: h3 (<xref target="h3-ev"/>) and qpack (<xref target="qpack-ev"/>).</t>
      <t>As described in <xref section="3.4.2" sectionFormat="of" target="QLOG-MAIN"/>, the qlog "name" field is the
concatenation of category and type.</t>
      <t><xref target="h3-qpack-events"/> summarizes the name value of each event type that is defined
in this specification.</t>
      <table anchor="h3-qpack-events">
        <name>HTTP/3 and QPACK 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">h3:parameters_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">h3:parameters_restored</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersrestored"/></td>
          </tr>
          <tr>
            <td align="left">h3:stream_type_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-streamtypeset"/></td>
          </tr>
          <tr>
            <td align="left">h3:priority_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-priorityupdated"/></td>
          </tr>
          <tr>
            <td align="left">h3:frame_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-framecreated"/></td>
          </tr>
          <tr>
            <td align="left">h3:frame_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-frameparsed"/></td>
          </tr>
          <tr>
            <td align="left">h3:datagram_created</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramcreated"/></td>
          </tr>
          <tr>
            <td align="left">h3:datagram_parsed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramparsed"/></td>
          </tr>
          <tr>
            <td align="left">h3:push_resolved</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="h3-pushresolved"/></td>
          </tr>
          <tr>
            <td align="left">qpack:state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="qpack-stateupdated"/></td>
          </tr>
          <tr>
            <td align="left">qpack:stream_state_updated</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="qpack-streamstateupdate"/></td>
          </tr>
          <tr>
            <td align="left">qpack:dynamic_table_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="qpack-dynamictableupdate"/></td>
          </tr>
          <tr>
            <td align="left">qpack:headers_encoded</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="qpack-headersencoded"/></td>
          </tr>
          <tr>
            <td align="left">qpack:headers_decoded</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="qpack-headersdecoded"/></td>
          </tr>
          <tr>
            <td align="left">qpack:instruction_created</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="qpack-instructioncreated"/></td>
          </tr>
          <tr>
            <td align="left">qpack:instruction_parsed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="qpack-instructionparsed"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="h3-ev">
      <name>HTTP/3 Events</name>
      <t>HTTP/3 events extend the <tt>$ProtocolEventBody</tt> extension point defined in <xref target="QLOG-MAIN"/>.</t>
      <figure anchor="h3-events-def">
        <name>H3Events definition and ProtocolEventBody extension</name>
        <sourcecode type="cddl"><![CDATA[
H3Events = H3ParametersSet /
           H3ParametersRestored /
           H3StreamTypeSet /
           H3PriorityUpdated /
           H3FrameCreated /
           H3FrameParsed /
           H3DatagramCreated /
           H3DatagramParsed /
           H3PushResolved

$ProtocolEventBody /= H3Events
]]></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>
      <section anchor="h3-parametersset">
        <name>parameters_set</name>
        <t>Importance: Base</t>
        <t>This event contains HTTP/3 and QPACK-level settings, mostly those received from
the HTTP/3 SETTINGS frame. All these parameters are typically set once and never
change. However, they are typically set at different times during the connection,
so there can be several instances of this event 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". A qlog can have multiple instances of this event.</t>
        <t>As a reminder the CDDL unwrap operator (~), see <xref target="RFC8610"/>), copies the fields
from the referenced type (H3Parameters) into the target type directly, extending the
target with the unwrapped fields.</t>
        <t>Definition:</t>
        <figure anchor="h3-parametersset-def">
          <name>H3ParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
H3ParametersSet = {
    ? owner: Owner
    ~H3Parameters

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

H3Parameters = {
    ; 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

    ; additional settings for grease and extensions
    * text => uint64
}
]]></sourcecode>
        </figure>
        <t>This 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>Importance: Base</t>
        <t>When using QUIC 0-RTT, HTTP/3 clients are expected to remember and reuse the
server's SETTINGs from the previous connection. This event is used to indicate
which HTTP/3 settings were restored and to which values when utilizing 0-RTT.</t>
        <t>Definition:</t>
        <figure anchor="h3-parametersrestored-def">
          <name>H3ParametersRestored definition</name>
          <sourcecode type="cddl"><![CDATA[
H3ParametersRestored = {
    ~H3Parameters
}
]]></sourcecode>
        </figure>
        <t>Similar to H3ParametersSet this event can contain any number of unspecified
fields to allow for reserved or extension settings.</t>
      </section>
      <section anchor="h3-streamtypeset">
        <name>stream_type_set</name>
        <t>Importance: Base</t>
        <t>Emitted when a stream's type becomes known. This is typically when a stream is
opened and the stream's type indicator is sent or received.</t>
        <t>The stream_type_value field is the numerical value without VLIE encoding.</t>
        <t>Definition:</t>
        <figure anchor="h3-streamtypeset-def">
          <name>H3StreamTypeSet definition</name>
          <sourcecode type="cddl"><![CDATA[
H3StreamTypeSet = {
    ? owner: Owner
    stream_id: uint64
    stream_type: H3StreamType

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

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

H3StreamType =  "request" /
                  "control" /
                  "push" /
                  "reserved" /
                  "unknown" /
                  "qpack_encode" /
                  "qpack_decode"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-priorityupdated">
        <name>priority_updated</name>
        <t>Importance: Base</t>
        <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.</t>
        <t>Definition:</t>
        <figure anchor="h3-priorityupdated-def">
          <name>H3PriorityUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
H3PriorityUpdated = {
    ; if the prioritized element is a request stream
    ? stream_id: uint64

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

    ? old: H3Priority
    new: H3Priority
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-framecreated">
        <name>frame_created</name>
        <t>Importance: Core</t>
        <t>This event is emitted when the HTTP/3 framing actually happens. This does not
necessarily coincide with HTTP/3 data getting passed to the QUIC layer. For
that, see the "stream_data_moved" event in <xref target="QLOG-QUIC"/>.</t>
        <t>Definition:</t>
        <figure anchor="h3-framecreated-def">
          <name>H3FrameCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
H3FrameCreated = {
    stream_id: uint64
    ? length: uint64
    frame: $H3Frame
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-frameparsed">
        <name>frame_parsed</name>
        <t>Importance: Core</t>
        <t>This event is emitted when the HTTP/3 frame is parsed. This is not
necessarily the same as when the HTTP/3 data is actually received on the QUIC
layer. For that, see the "stream_data_moved" event in <xref target="QLOG-QUIC"/>.</t>
        <t>Definition:</t>
        <figure anchor="h3-frameparsed-def">
          <name>H3FrameParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
H3FrameParsed = {
    stream_id: uint64
    ? length: uint64
    frame: $H3Frame
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
        <t>HTTP/3 DATA frames can have arbitrarily large lengths to reduce frame header
overhead. As such, DATA frames can span multiple QUIC packets. In this case, the
frame_parsed event is emitted once for the frame header, and further streamed
data is indicated using the stream_data_moved event.</t>
      </section>
      <section anchor="h3-datagramcreated">
        <name>datagram_created</name>
        <t>Importance: Base</t>
        <t>This event is emitted when an HTTP/3 Datagram is created (see <xref target="RFC9297"/>).
This does not necessarily coincide with the HTTP/3 Datagram getting passed to
the QUIC layer. For that, see the "datagram_data_moved" event in <xref target="QLOG-QUIC"/>.</t>
        <t>Definition:</t>
        <figure anchor="h3-datagramcreated-def">
          <name>H3DatagramCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
H3DatagramCreated = {
    quarter_stream_id: uint64
    ? datagram: $H3Datagram
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-datagramparsed">
        <name>datagram_parsed</name>
        <t>Importance: Base</t>
        <t>This event is emitted when the HTTP/3 Datagram is parsed (see <xref target="RFC9297"/>).
This is not necessarily the same as when the HTTP/3 Datagram is actually
received on the QUIC layer. For that, see the "datagram_data_moved" event in
<xref target="QLOG-QUIC"/>.</t>
        <t>Definition:</t>
        <figure anchor="h3-datagramparsed-def">
          <name>H3DatagramParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
H3DatagramParsed = {
    quarter_stream_id: uint64
    ? datagram: $H3Datagram
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-pushresolved">
        <name>push_resolved</name>
        <t>Importance: Extra</t>
        <t>This event is emitted when a pushed resource is successfully claimed (used) or,
conversely, abandoned (rejected) by the application on top of HTTP/3 (e.g., the
web browser). This event is added to help debug problems with unexpected PUSH
behaviour, which is commonplace with HTTP/2.</t>
        <t>Definition:</t>
        <figure anchor="h3-pushresolved-def">
          <name>H3PushResolved definition</name>
          <sourcecode type="cddl"><![CDATA[
H3PushResolved = {
    ? push_id: uint64

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

H3PushDecision = "claimed" /
                   "abandoned"
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="http3-data-field-definitions">
      <name>HTTP/3 Data Field Definitions</name>
      <t>The following data field 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="h3frame">
        <name>H3Frame</name>
        <t>The generic <tt>$H3Frame</tt> is defined here as a CDDL extension point (a "socket"
or "plug"). It can be extended to support additional HTTP/3 frame types.</t>
        <figure anchor="h3-frame-def">
          <name>H3Frame plug definition</name>
          <sourcecode type="cddl"><![CDATA[
; The H3Frame is any key-value map (e.g., JSON object)
$H3Frame /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <t>The HTTP/3 frame types defined in this document are as follows:</t>
        <figure anchor="h3baseframe-def">
          <name>H3BaseFrames definition</name>
          <sourcecode type="cddl"><![CDATA[
H3BaseFrames = H3DataFrame /
               H3HeadersFrame /
               H3CancelPushFrame /
               H3SettingsFrame /
               H3PushPromiseFrame /
               H3GoawayFrame /
               H3MaxPushIDFrame /
               H3ReservedFrame /
               H3UnknownFrame

$H3Frame /= H3BaseFrames
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3datagram">
        <name>H3Datagram</name>
        <t>The generic <tt>$H3Datagram</tt> is defined here as a CDDL extension point (a "socket"
or "plug"). It can be extended to support additional HTTP/3 datagram types. This
document intentionally does not define any specific HTTP/3 Datagram types.</t>
        <figure anchor="h3-datagram-def">
          <name>H3Datagram plug definition</name>
          <sourcecode type="cddl"><![CDATA[
; The H3Datagram is any key-value map (e.g., JSON object)
$H3Datagram /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <section anchor="h3dataframe">
          <name>H3DataFrame</name>
          <figure anchor="h3dataframe-def">
            <name>H3DataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3DataFrame = {
    frame_type: "data"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3headersframe">
          <name>H3HeadersFrame</name>
          <t>This represents an <em>uncompressed</em>, plaintext HTTP Headers frame (e.g., no QPACK
compression is applied).</t>
          <t>For example:</t>
          <figure anchor="h3-headersframe-ex">
            <name>H3HeadersFrame example</name>
            <artwork><![CDATA[
headers: [
  {
    "name": ":path",
    "value": "/"
  },
  {
    "name": ":method",
    "value": "GET"
  },
  {
    "name": ":authority",
    "value": "127.0.0.1:4433"
  },
  {
    "name": ":scheme",
    "value": "https"
  }
]
]]></artwork>
          </figure>
          <figure anchor="h3-headersframe-def">
            <name>H3HeadersFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3HeadersFrame = {
    frame_type: "headers"
    headers: [* H3HTTPField]
}
]]></sourcecode>
          </figure>
          <figure anchor="h3field-def">
            <name>H3HTTPField definition</name>
            <sourcecode type="cddl"><![CDATA[
H3HTTPField = {
    name: text
    ? value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3cancelpushframe">
          <name>H3CancelPushFrame</name>
          <figure anchor="h3-cancelpushframe-def">
            <name>H3CancelPushFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3CancelPushFrame = {
    frame_type: "cancel_push"
    push_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3settingsframe">
          <name>H3SettingsFrame</name>
          <figure anchor="h3settingsframe-def">
            <name>H3SettingsFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3SettingsFrame = {
    frame_type: "settings"
    settings: [* H3Setting]
}

H3Setting = {
    name: text
    value: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3pushpromiseframe">
          <name>H3PushPromiseFrame</name>
          <figure anchor="h3pushpromiseframe-def">
            <name>H3PushPromiseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3PushPromiseFrame = {
    frame_type: "push_promise"
    push_id: uint64
    headers: [* H3HTTPField]
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3goawayframe">
          <name>H3GoAwayFrame</name>
          <figure anchor="h3goawayframe-def">
            <name>H3GoawayFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3GoawayFrame = {
    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="h3maxpushidframe">
          <name>H3MaxPushIDFrame</name>
          <figure anchor="h3maxpushidframe-def">
            <name>H3MaxPushIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3MaxPushIDFrame = {
    frame_type: "max_push_id"
    push_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3priorityupdateframe">
          <name>H3PriorityUpdateFrame</name>
          <t>The PRIORITY_UPDATE frame is defined in <xref target="RFC9218"/>.</t>
          <figure anchor="h3priorityupdateframe-def">
            <name>h3priorityupdateframe definition</name>
            <sourcecode type="cddl"><![CDATA[
H3PriorityUpdateFrame = {
    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: H3Priority
}

; The priority value in ASCII text, encoded using Structured Fields
; Example: u=5, i
H3Priority = text
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3reservedframe">
          <name>H3ReservedFrame</name>
          <figure anchor="h3reservedframe-def">
            <name>H3ReservedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3ReservedFrame = {
    frame_type: "reserved"
    ? length: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3unknownframe">
          <name>H3UnknownFrame</name>
          <t>The frame_type_value field is the numerical value without VLIE encoding.</t>
          <figure anchor="h3unknownframe-def">
            <name>UnknownFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
H3UnknownFrame = {
    frame_type: "unknown"
    frame_type_value: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="h3applicationerror">
          <name>H3ApplicationError</name>
          <figure anchor="h3-applicationerror-def">
            <name>H3ApplicationError definition</name>
            <sourcecode type="cddl"><![CDATA[
H3ApplicationError = "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 H3ApplicationError defines the general $ApplicationError
definition in the qlog QUIC definition, see <xref target="QLOG-QUIC"/>.</t>
          <sourcecode type="cddl"><![CDATA[
; ensure HTTP errors are properly validate in QUIC events as well
; e.g., QUIC's ConnectionClose Frame
$ApplicationError /= H3ApplicationError
]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="qpack-ev">
      <name>QPACK Events</name>
      <t>QPACK events extend the <tt>$ProtocolEventBody</tt> extension point defined in
<xref target="QLOG-MAIN"/>.</t>
      <figure anchor="qpackevents-def">
        <name>QPACKEvents definition and ProtocolEventBody extension</name>
        <sourcecode type="cddl"><![CDATA[
QPACKEvents = QPACKStateUpdate /
              QPACKStreamStateUpdate /
              QPACKDynamicTableUpdate /
              QPACKHeadersEncoded /
              QPACKHeadersDecoded /
              QPACKInstructionCreated /
              QPACKInstructionParsed

$ProtocolEventBody /= QPACKEvents
]]></sourcecode>
      </figure>
      <t>QPACK events mainly serve as an aid to debug low-level QPACK issues.The
higher-level, plaintext header values <bcp14>SHOULD</bcp14> (also) be logged in the
http.frame_created and http.frame_parsed event data (instead).</t>
      <t>QPACK does not have its own parameters_set event. This was merged with
http.parameters_set for brevity, since qpack is a required extension for HTTP/3
anyway. Other HTTP/3 extensions <bcp14>MAY</bcp14> also log their SETTINGS fields in
http.parameters_set or <bcp14>MAY</bcp14> define their own events.</t>
      <section anchor="qpack-stateupdated">
        <name>state_updated</name>
        <t>Importance: Base</t>
        <t>This event is emitted when one or more of the internal QPACK variables changes
value. Note that some variables have two variations (one set locally, one
requested by the remote peer). This is reflected in the "owner" field. As such,
this field <bcp14>MUST</bcp14> be correct for all variables included a single event instance. If
you need to log settings from two sides, you <bcp14>MUST</bcp14> emit two separate event
instances.</t>
        <t>Definition:</t>
        <figure anchor="qpack-stateupdate-def">
          <name>QPACKStateUpdate definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKStateUpdate = {
    owner: Owner
    ? dynamic_table_capacity: uint64

    ; effective current size, sum of all the entries
    ? dynamic_table_size: uint64
    ? known_received_count: uint64
    ? current_insert_count: uint64
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="qpack-streamstateupdate">
        <name>stream_state_updated</name>
        <t>Importance: Core</t>
        <t>This event is emitted when a stream becomes blocked or unblocked by header
decoding requests or QPACK instructions.</t>
        <t>This event is of "Core" importance, as it might have a large impact on
HTTP/3's observed performance.</t>
        <t>Definition:</t>
        <figure anchor="qpack-streamstateupdate-def">
          <name>QPACKStreamStateUpdate definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKStreamStateUpdate = {
    stream_id: uint64

    ; streams are assumed to start "unblocked"
    ; until they become "blocked"
    state: QPACKStreamState
}

QPACKStreamState = "blocked" /
                   "unblocked"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="qpack-dynamictableupdate">
        <name>dynamic_table_updated</name>
        <t>Importance: Extra</t>
        <t>This event is emitted when one or more entries are inserted or evicted from QPACK's dynamic table.</t>
        <t>Definition:</t>
        <figure anchor="qpack-dynamictableupdate-def">
          <name>QPACKDynamicTableUpdate definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKDynamicTableUpdate = {

    ; local = the encoder's dynamic table
    ; remote = the decoder's dynamic table
    owner: Owner
    update_type: QPACKDynamicTableUpdateType
    entries: [+ QPACKDynamicTableEntry]
}

QPACKDynamicTableUpdateType = "inserted" /
                              "evicted"

QPACKDynamicTableEntry = {
    index: uint64
    ? name: text /
            hexstring
    ? value: text /
             hexstring
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="qpack-headersencoded">
        <name>headers_encoded</name>
        <t>Importance: Base</t>
        <t>This event is emitted when an uncompressed header block is encoded successfully.</t>
        <t>This event has overlap with http.frame_created for the HeadersFrame type.
When outputting both events, implementers <bcp14>MAY</bcp14> omit the "headers" field in this
event.</t>
        <t>Definition:</t>
        <figure anchor="qpack-headersencoded-def">
          <name>QPACKHeadersEncoded definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKHeadersEncoded = {
    ? stream_id: uint64
    ? headers: [+ H3HTTPField]
    block_prefix: QPACKHeaderBlockPrefix
    header_block: [+ QPACKHeaderBlockRepresentation]
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="qpack-headersdecoded">
        <name>headers_decoded</name>
        <t>Importance: Base</t>
        <t>This event is emitted when a compressed header block is decoded successfully.</t>
        <t>This event has overlap with http.frame_parsed for the HeadersFrame type.
When outputting both events, implementers <bcp14>MAY</bcp14> omit the "headers" field in this
event.</t>
        <t>Definition:</t>
        <figure anchor="qpack-headersdecoded-def">
          <name>QPACKHeadersDecoded definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKHeadersDecoded = {
    ? stream_id: uint64
    ? headers: [+ H3HTTPField]
    block_prefix: QPACKHeaderBlockPrefix
    header_block: [+ QPACKHeaderBlockRepresentation]
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="qpack-instructioncreated">
        <name>instruction_created</name>
        <t>Importance: Base</t>
        <t>This event is emitted when a QPACK instruction (both decoder and encoder) is
created and added to the encoder/decoder stream.</t>
        <t>Definition:</t>
        <figure anchor="qpack-instructioncreated-def">
          <name>QPACKInstructionCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKInstructionCreated = {

    ; see definition in appendix
    instruction: QPACKInstruction
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
        <t>Encoder/decoder semantics and stream_id's are implicit in either the
instruction types or can be logged via other events (e.g., http.stream_type_set)</t>
      </section>
      <section anchor="qpack-instructionparsed">
        <name>instruction_parsed</name>
        <t>Importance: Base</t>
        <t>This event is emitted when a QPACK instruction (both decoder and encoder) is read
from the encoder/decoder stream.</t>
        <t>Definition:</t>
        <figure anchor="qpack-instructionparsed-def">
          <name>QPACKInstructionParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKInstructionParsed = {

    ; see QPACKInstruction definition in appendix
    instruction: QPACKInstruction
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
        <t>Encoder/decoder semantics and stream_id's are implicit in either the
instruction types or can be logged via other events (e.g., http.stream_type_set)</t>
      </section>
    </section>
    <section anchor="qpack-data-field-definitions">
      <name>QPACK Data Field Definitions</name>
      <t>The following data field definitions can be used in QPACK events.</t>
      <section anchor="qpackinstruction">
        <name>QPACKInstruction</name>
        <t>The instructions do not have explicit encoder/decoder types, since there is
no overlap between the instructions of both types in neither name nor function.</t>
        <figure anchor="qpackinstruction-def">
          <name>QPACKInstruction definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKInstruction = SetDynamicTableCapacityInstruction /
                   InsertWithNameReferenceInstruction /
                   InsertWithoutNameReferenceInstruction /
                   DuplicateInstruction /
                   SectionAcknowledgementInstruction /
                   StreamCancellationInstruction /
                   InsertCountIncrementInstruction
]]></sourcecode>
        </figure>
        <section anchor="setdynamictablecapacityinstruction">
          <name>SetDynamicTableCapacityInstruction</name>
          <figure anchor="setdynamictablecapacityinstruction-def">
            <name>SetDynamicTableCapacityInstruction definition</name>
            <sourcecode type="cddl"><![CDATA[
SetDynamicTableCapacityInstruction = {
    instruction_type: "set_dynamic_table_capacity"
    capacity: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="insertwithnamereferenceinstruction">
          <name>InsertWithNameReferenceInstruction</name>
          <figure anchor="insertwithnamereferenceinstruction-def">
            <name>InsertWithNameReferenceInstruction definition</name>
            <sourcecode type="cddl"><![CDATA[
InsertWithNameReferenceInstruction = {
    instruction_type: "insert_with_name_reference"
    table_type: QPACKTableType
    name_index: uint32
    huffman_encoded_value: bool
    ? value_length: uint32
    ? value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="insertwithoutnamereferenceinstruction">
          <name>InsertWithoutNameReferenceInstruction</name>
          <figure anchor="insertwithoutnamereferenceinstruction-def">
            <name>InsertWithoutNameReferenceInstruction definition</name>
            <sourcecode type="cddl"><![CDATA[
InsertWithoutNameReferenceInstruction = {
    instruction_type: "insert_without_name_reference"
    huffman_encoded_name: bool
    ? name_length: uint32
    ? name: text
    huffman_encoded_value: bool
    ? value_length: uint32
    ? value: text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="duplicateinstruction">
          <name>DuplicateInstruction</name>
          <figure anchor="duplicateinstruction-def">
            <name>DuplicateInstruction definition</name>
            <sourcecode type="cddl"><![CDATA[
DuplicateInstruction = {
    instruction_type: "duplicate"
    index: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sectionacknowledgementinstruction">
          <name>SectionAcknowledgementInstruction</name>
          <figure anchor="sectionacknowledgementinstruction-def">
            <name>SectionAcknowledgementInstruction definition</name>
            <sourcecode type="cddl"><![CDATA[
SectionAcknowledgementInstruction = {
    instruction_type: "section_acknowledgement"
    stream_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamcancellationinstruction">
          <name>StreamCancellationInstruction</name>
          <figure anchor="streamcancellationinstruction-def">
            <name>StreamCancellationInstruction definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamCancellationInstruction = {
    instruction_type: "stream_cancellation"
    stream_id: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="insertcountincrementinstruction">
          <name>InsertCountIncrementInstruction</name>
          <figure anchor="insertcountincrementinstruction-def">
            <name>InsertCountIncrementInstruction definition</name>
            <sourcecode type="cddl"><![CDATA[
InsertCountIncrementInstruction = {
    instruction_type: "insert_count_increment"
    increment: uint32
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="qpackheaderblockrepresentation">
        <name>QPACKHeaderBlockRepresentation</name>
        <figure anchor="qpackheaderblockrepresentation-def">
          <name>QPACKHeaderBlockRepresentation definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKHeaderBlockRepresentation = IndexedHeaderField /
                                 LiteralHeaderFieldWithName /
                                 LiteralHeaderFieldWithoutName
]]></sourcecode>
        </figure>
        <section anchor="indexedheaderfield">
          <name>IndexedHeaderField</name>
          <t>This is also used for "indexed header field with post-base index"</t>
          <figure anchor="indexedheaderfield-def">
            <name>IndexedHeaderField definition</name>
            <sourcecode type="cddl"><![CDATA[
IndexedHeaderField = {
    header_field_type: "indexed_header"

    ; MUST be "dynamic" if is_post_base is true
    table_type: QPACKTableType
    index: uint32

    ; to represent the "indexed header field with post-base index"
    ; header field type
    is_post_base: bool .default false
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="literalheaderfieldwithname">
          <name>LiteralHeaderFieldWithName</name>
          <t>This is also used for "Literal header field with post-base name reference".</t>
          <figure anchor="literalheaderfieldwithname-def">
            <name>LiteralHeaderFieldWithName definition</name>
            <sourcecode type="cddl"><![CDATA[
LiteralHeaderFieldWithName = {
    header_field_type: "literal_with_name"

    ; the 3rd "N" bit
    preserve_literal: bool

    ; MUST be "dynamic" if is_post_base is true
    table_type: QPACKTableType
    name_index: uint32
    huffman_encoded_value: bool
    ? value_length: uint32
    ? value: text

    ; to represent the "indexed header field with post-base index"
    ; header field type
    is_post_base: bool .default false
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="literalheaderfieldwithoutname">
          <name>LiteralHeaderFieldWithoutName</name>
          <figure anchor="literalheaderfieldwithoutname-def">
            <name>LiteralHeaderFieldWithoutName definition</name>
            <sourcecode type="cddl"><![CDATA[
LiteralHeaderFieldWithoutName = {
    header_field_type: "literal_without_name"

    ; the 3rd "N" bit
    preserve_literal: bool
    huffman_encoded_name: bool
    ? name_length: uint32
    ? name: text
    huffman_encoded_value: bool
    ? value_length: uint32
    ? value: text
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="qpackheaderblockprefix">
        <name>QPACKHeaderBlockPrefix</name>
        <figure anchor="qpackheaderblockprefix-def">
          <name>QPACKHeaderBlockPrefix definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKHeaderBlockPrefix = {
    required_insert_count: uint32
    sign_bit: bool
    delta_base: uint32
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="qpacktabletype">
        <name>QPACKTableType</name>
        <figure anchor="qpacktabletype-def">
          <name>QPACKTableType definition</name>
          <sourcecode type="cddl"><![CDATA[
QPACKTableType = "static" /
                 "dynamic"
]]></sourcecode>
        </figure>
      </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>TBD</t>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <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>Main logging schema 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">
              <organization>Protocol Labs</organization>
            </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="13" month="February" year="2023"/>
            <abstract>
              <t>   This document describes a high-level schema for a standardized
   logging format called qlog.  This format allows easy sharing of data
   and the creation of reusable visualization and debugging tools.  The
   high-level schema in this document is intended to be protocol-
   agnostic.  Separate documents specify how the format should be used
   for specific protocol data.  The schema is also format-agnostic, and
   can be represented in for example JSON, csv or protobuf.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-05"/>
        </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">
              <organization>Protocol Labs</organization>
            </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="13" month="February" year="2023"/>
            <abstract>
              <t>   This document describes concrete qlog event definitions and their
   metadata for QUIC events.  These events can then be embedded in the
   higher level schema defined in [QLOG-MAIN].

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-04"/>
        </reference>
        <reference anchor="HTTP3">
          <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="QPACK">
          <front>
            <title>QPACK: Field Compression for HTTP/3</title>
            <author fullname="C. Krasic" initials="C." surname="Krasic"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="A. Frindell" initials="A." role="editor" surname="Frindell"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification defines QPACK: a compression format for efficiently representing HTTP fields that is to be used in HTTP/3. This is a variation of HPACK compression that seeks to reduce head-of-line blocking.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9204"/>
          <seriesInfo name="DOI" value="10.17487/RFC9204"/>
        </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>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8610">
          <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>
    </references>
    <section anchor="change-log">
      <name>Change Log</name>
      <section 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 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 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 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 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 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 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 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>
    <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, and Christian Huitema for their feedback and suggestions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
