<?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.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-frindell-webtrans-devious-baton-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="devious-baton">Devious Baton Protocol for Exercising WebTransport</title>
    <seriesInfo name="Internet-Draft" value="draft-frindell-webtrans-devious-baton-00"/>
    <author fullname="Alan Frindell">
      <organization>Meta</organization>
      <address>
        <email>afrind@meta.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>Applications and Real-Time</area>
    <workgroup>WebTransport</workgroup>
    <keyword>WebTransport</keyword>
    <abstract>
      <?line 35?>

<t>This document describes a simple protocol that can be used to exercise the
functionality provided by WebTransport.  The protocol passes a "baton" between
endpoints, using both unidirectional and bidirectional streams.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://afrind.github.io/draft-frindell-webtrans-devious-baton/draft-frindell-webtrans-devious-baton.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-frindell-webtrans-devious-baton/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WebTransport Working Group mailing list (<eref target="mailto:webtransport@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/webtransport/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/webtransport/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/afrind/draft-frindell-webtrans-devious-baton"/>.</t>
    </note>
  </front>
  <middle>
    <?line 41?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>WebTransport offers applications the ability to send and receive data over
bidirectional and unidirectional streams, as well as send and received
datagrams.  The Devious Baton protocol is an application that can be used to
test the full suite of functionality in a WebTransport implementation and
demonstrate interoperability.</t>
      <t>The protocol works by passing a "baton" -- a one byte integer -- between
endpoints using streams.  A receiving endpoint increments the baton value modulo
256 and sends it to the peer until the baton's value reaches 0.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<dl>
        <dt>Client:</dt>
        <dd>
          <t>The endpoint that initiates the WebTransport session</t>
        </dd>
        <dt>Server:</dt>
        <dd>
          <t>The endpoint that did not initiate the WebTransport session</t>
        </dd>
        <dt>Devious Baton Session:</dt>
        <dd>
          <t>A single WebTransport session initiated as described in
 <xref target="session-establishment"/></t>
        </dd>
      </dl>
    </section>
    <section anchor="session-establishment">
      <name>Session Establishment</name>
      <t>The client initiates a WebTransport session as defined in
<xref target="OVERVIEW"/>.  The protocol can be used by
any endpoint, but for interoperability it is <bcp14>RECOMMENDED</bcp14> that the URL
path be /webtransport/devious-baton.</t>
      <section anchor="query-parameters">
        <name>Query Parameters</name>
        <t>The behavior of the protocol can be configured by parameters indicated by the
client. These parameters are transmitted in query parameters in the session
establishment URL. Sending parameters is optional but omission of a parameter
requires the server to interpret that as the default value.</t>
        <t>The server <bcp14>MUST</bcp14> support the following optional query parameters:</t>
        <ul spacing="normal">
          <li>
            <tt>version</tt> - an integer specifying the draft version of Devious Baton the
client intends to use</li>
        </ul>
        <t>If the version is invalid or the server does not support the specified version,
it <bcp14>MUST</bcp14> reject the WebTransport session with a 4xx status code.  The default
value is 0.</t>
        <ul spacing="normal">
          <li>
            <tt>baton</tt> - an integer between 1 and 255, inclusive, which the server will use
as the initial baton value for all batons.</li>
        </ul>
        <t>If the baton value is invalid, the server <bcp14>MUST</bcp14> reject the WebTransport session
with a 4xx status code.  There is no default - if unspecified the server chooses
a random baton value between 1 and 255, inclusive.</t>
        <ul spacing="normal">
          <li>
            <tt>count</tt> - a positive integer specifying how many batons will be sent in
parallel</li>
        </ul>
        <t>The default value is 1.  If the client asks for more batons than the server is
capable of sending, the server <bcp14>MUST</bcp14> reject the WebTransport session with a 4xx
status code.</t>
      </section>
      <section anchor="protocol-version">
        <name>Protocol Version</name>
        <t>This draft defines Devious Baton protocol version 0.</t>
      </section>
    </section>
    <section anchor="protocol-behavior">
      <name>Protocol Behavior</name>
      <section anchor="setup">
        <name>Setup</name>
        <t>Upon successful negotiation of a WebTransport session to the Devious Baton
endpoint, the server opens a unidirectional stream for each baton.  If there is
insufficient stream credit to open a unidirectional stream, the server <bcp14>MUST</bcp14>
close the WebTransport session with the DA_YAMN session error code.
The server sends a Baton message with the initial baton value on each stream and
closes it.</t>
      </section>
      <section anchor="processing-a-baton-message">
        <name>Processing a Baton Message</name>
        <t>When either endpoint receives a Baton message on a stream, it takes the
following actions:</t>
        <ul spacing="normal">
          <li>If the value of the baton is 0, the endpoint decrements the number of active
batons by one.</li>
          <li>If the value of the baton is not 0, the endpoint <bcp14>MUST</bcp14> send a new Baton message
with a baton value equal to the incoming baton value + 1 modulo 256.  The new
Baton message is sent on a stream, decribed below.</li>
          <li>After sending the Baton message, the endpoint <bcp14>MUST</bcp14> send a FIN on the stream.</li>
        </ul>
        <t>The endpoint selects the outgoing Baton message stream based on how the incoming
Baton message arrived.</t>
        <ul spacing="normal">
          <li>If the incoming Baton message arrived on a unidirectional stream, the endpoint
opens a bidirectional stream and sends the outgoing Baton message on it.</li>
          <li>If the Baton message arrived on a peer-initiated bidirectional stream, the
endpoint sends the outgoing Baton message on that stream.</li>
          <li>If the Baton message arrived on a self-initiated bidirectional stream, the
endpoint opens a unidirectional stream and sends the outgoing Baton message on
it.</li>
        </ul>
        <t>If an endpoint receives a baton message with an unexpected value, it <bcp14>MAY</bcp14> close
the WebTransport session with the SUS session error code.</t>
        <t>If the endpoint has insufficient stream credit to open the correct type of
stream, it <bcp14>MUST</bcp14> close the WebTransport session with the DA_YAMN
session error code.</t>
        <t>If the endpoint has insufficient flow control credit to send the Baton message,
it <bcp14>SHOULD</bcp14> send as much as limits allow, and wait for additional credit.  The
endpoint <bcp14>SHOULD</bcp14> close the WebTransport session with the BORED session error code
if the peer takes too long to grant credit.</t>
      </section>
      <section anchor="baton-message">
        <name>Baton message</name>
        <artwork type="ascii-art"><![CDATA[
Baton Message {
  padding length(i)
  padding(...)
  baton(1)
}
]]></artwork>
        <t>To allow for exercising of long streams and flow control, the Baton message
begins with an aribtrary amount of padding.  <tt>padding length</tt> specifies the
number of bytes of padding.  The <tt>padding</tt> field contains <tt>padding length</tt>
octets of padding.  The receiver ignores the bytes themselves so they can be any
value, for example 0 or random data.</t>
        <t><tt>baton</tt> contains the current value of the baton.  It is a single byte to enforce
the modulo 256 arithmetic.</t>
      </section>
      <section anchor="datagrams">
        <name>Datagrams</name>
        <t>When a client endpoint receives a Baton message with a baton value = 1 modulo 7,
it sends a datagram with an identical Baton message.  When a server endpoint
receives a Baton message with a baton value = 0 modulo 7, it sends a datagram
with an identical Baton message. Note that a Baton message in a datagram <bcp14>MUST</bcp14>
use a padding value small enough such that the entire Baton message fits in a
single datagram.</t>
      </section>
      <section anchor="session-closure">
        <name>Session Closure</name>
        <t>Each endpoint tracks the number of active batons.  It is initally equal to the
client's <tt>count</tt> parameter.  Each time a baton exchange completes or is reset,
the number of active batons is decreased by 1. When the number of active batons
reaches 0, the endpoint <bcp14>MUST</bcp14> close the WebTransport session with no error.</t>
        <t>To close a Devious Baton Session with an error, the endpoint
initiating the close sends a CLOSE_WEBTRANSPORT_SESSION capsule with
the specified session error code.  To close the session without an error, the
endpoint initiating the close sends a FIN on the CONNECT stream.</t>
      </section>
      <section anchor="error-handling">
        <name>Error Handling</name>
        <t>If an endpoint receives a gracefully closed stream or datagram with an
incomplete Baton message, it <bcp14>MUST</bcp14> close the WebTransport session with the BRUH
session error code.</t>
        <t>Either endpoint can send a STOP_SENDING or RESET_STREAM on an open stream.
STOP_SENDING <bcp14>MUST</bcp14> use the IDC stream error code. Upon receipt of a STOP_SENDING
on a stream, or a RESET_STREAM on a bidirectional stream, the endpoint <bcp14>MUST</bcp14> send
a RESET_STREAM for that stream with the WHATEVER stream error code unless it has
already closed the stream.  A RESET_STREAM sent spontaneously <bcp14>MUST</bcp14> use the
I_LIED stream error code.</t>
        <t>If an endpoint gets tired of waiting for the next Baton message, it <bcp14>MAY</bcp14> close
the WebTransport session with the BORED error code.</t>
        <section anchor="stream-error-codes">
          <name>Stream Error Codes</name>
          <t>The following error codes can be sent in RESET_STREAM and STOP_SENDING frames.</t>
          <table>
            <name>Stream Error Codes</name>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">IDC</td>
                <td align="center">0x01</td>
                <td align="left">I don't care about this stream</td>
              </tr>
              <tr>
                <td align="left">WHATEVER</td>
                <td align="center">0x02</td>
                <td align="left">The peer asked for this</td>
              </tr>
              <tr>
                <td align="left">I_LIED</td>
                <td align="center">0x03</td>
                <td align="left">Spontaneous reset</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="session-error-codes">
          <name>Session Error Codes</name>
          <t>The following error codes can be sent in the CLOSE_WEBTRANSPORT_SESSION capsule.</t>
          <table>
            <name>Session Error Codes</name>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">DA_YAMN</td>
                <td align="center">0x01</td>
                <td align="left">There is insufficient stream credit to continue the protocol</td>
              </tr>
              <tr>
                <td align="left">BRUH</td>
                <td align="center">0x02</td>
                <td align="left">Received a malformed Baton message</td>
              </tr>
              <tr>
                <td align="left">SUS</td>
                <td align="center">0x03</td>
                <td align="left">Received an unexpected Baton message</td>
              </tr>
              <tr>
                <td align="left">BORED</td>
                <td align="center">0x04</td>
                <td align="left">Got tired of waiting for the next message</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>There are not believed to be any further security considerations beyond those
presented in QUIC Transport.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <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="OVERVIEW">
        <front>
          <title>The WebTransport Protocol Framework</title>
          <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
            <organization>Google</organization>
          </author>
          <date day="24" month="January" year="2023"/>
          <abstract>
            <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with a model that allows them to be used interchangeably.

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

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-05"/>
      </reference>
    </references>
    <?line 268?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Martin Thomson, Christian Huitema and Lucas Pardue contributed ideas to this
protocol.  David Schinazi suggested the name Devious Baton.</t>
      <t>Error code naming inspiration by middle schoolers everywhere, but
specifically James Frindell.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
G8lommgmAAA=

-->

</rfc>
