<?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-rfc2629 version 1.5.26 (Ruby 3.0.3) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-core-responses-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.1 -->
  <front>
    <title>CoAP: Non-traditional response forms</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-core-responses-01"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <date year="2022" month="February" day="03"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>In CoAP as defined by RFC 7252, responses are always unicast back to a
client that posed a request.  The present memo describes two forms of
responses that go beyond that model.  These descriptions are not
intended as advocacy for adopting these approaches immediately, they
are provided to point out potential avenues for development that would
have to be carefully evaluated.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bormann-core-responses/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Constrained RESTful Environments (CoRE) Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/core-wg/core-responses"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>In CoAP as defined by RFC 7252, responses are always unicast back to a
client that posed a request.  A server may want to send a response to
a request that it did not receive, may want to multicast a response,
or both.</t>
      <t>The descriptions in this specification are not intended as advocacy
for adopting these approaches immediately, they are provided to point
out potential avenues for development that would have to be carefully
evaluated.</t>
      <section anchor="terms">
        <name>Terminology</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 term "byte" is used in its now customary sense as a synonym for
"octet".</t>
        <t>Terms used in this draft:</t>
        <dl>
          <dt>
Non-traditional response:  </dt>
          <dd>
            <t>A response that is not the single response generated for a request received
on the same transport.</t>
          </dd>
          <dt>
Non-matching response:  </dt>
          <dd>
            <t>A response that has properties
(typically options) that make it incompatible with the original request,
and thus in particular unsuitable as a cached response to that request (but
possibly suitable to populate the cache for a similar request).
Options that make a response non-matching need to be proxy unsafe.
</t>
            <t>For example,
a Block2 response with a different value of block number <contact fullname="×"/> block size than indicated in the request is non-matching.</t>
          </dd>
          <dt>
Configured request:  </dt>
          <dd>
            <t>A request that reaches the server in another way than by
transmitting a usual CoAP request on the same communication channel
a response is expected on.</t>
          </dd>
          <dt>
Embedded request:  </dt>
          <dd>
            <t>A request that is provided by the server to the recipient of its
response by embedding it into the response.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="sending-non-traditional-responses">
      <name>Sending non-traditional responses</name>
      <t>Non-traditional responses are sets of responses produced for a single request,
or responses sent without a transmitted request.</t>
      <t>Where tokens are involved,
all non-traditional responses use the request's token;
in any case, they are bound to the original request
(e.g. by using the same request_kid/request_piv pair in OSCORE <xref target="RFC8613"/>).
Where message IDs are involved,
one of the non-traditional response (the first sent, not necessarily the first received as generally the network might reorder messages)
can be sent as a piggybacked response in an ACK (thus sharing the request's message ID),
the others are CON or NON responses.</t>
      <t>Some established responses
(observations defined in <xref target="RFC7641"/>,
and multicast responses in <xref target="I-D.ietf-core-groupcomm-bis"/>)
match this definition and already follow the guidance set out here for non-traditional responses;
<xref target="extensions-explained"/> gives details for them.</t>
      <t>A second response differing from the first that can be sent by a non-deduplicating server
responding to a retransmission of a request
is not non-traditional because there is a second request --
that is probably the last corner case at the line separating traditional from non-traditional responses.</t>
      <section anchor="preconditions-to-sending-non-traditional-responses">
        <name>Preconditions to sending non-traditional responses</name>
        <t>A server may send multiple responses to a request if there is any
property in the request that indicates the client's intention to receive
them. This is typically indicated by a request option,
and rarely in external properties of the message
(in the multicast case, the destination address).</t>
        <t>A mechanism for eliciting multiple responses must specify the conditions
under which a token gets freed, as the traditional arrival of the
response is insufficient. It may also specify for which requests the
token can be reused immediately in follow-up requests. On unordered
transports, or when it's a client's follow-up request and not a response
that terminates the token, the client needs to wait until no reordered
non-traditional responses can be expected anymore.</t>
        <t>If a non-traditional response answers the original request, no further
action is required (this is the case of observation: ordering is added
on top of that to ensure that only the latest response is used). If
the response does not answer the original request,
it must be non-matching,
either by an option introduced with the eliciting option
or by a generic option like Response-For.</t>
      </section>
      <section anchor="responses-without-request">
        <name>Responses without request</name>
        <t>Endpoints may agree out of band on a token (or other request-matching
details). One way to do that is to exchange a "phantom request", which
is a request that client and server will agree to have sent and
received, respectively, without it actually being sent between those
endpoints.</t>
        <t>As tokens are managed by the client, that request needs to be
generated by the client, or in close collaboration with the client (for
example by the client allowing a third party to use a subset of its
token values in order to set up non-traditional responses).</t>
      </section>
    </section>
    <section anchor="response-with-embedded-request">
      <name>Response with embedded request</name>
      <t>A server can send a response to a request that it did not actually
receive by embedding the request which the response answers in the
response.</t>
      <t>The option "Response-For" contains a request packaged as in <xref section="5.3" sectionFormat="of" target="RFC8613"/>.  The response is then intended to serve as a
response to this request.</t>
      <table anchor="response-for-option">
        <name>The Response-For Option</name>
        <thead>
          <tr>
            <th align="right">No.</th>
            <th align="left">C</th>
            <th align="left">U</th>
            <th align="left">N</th>
            <th align="left">R</th>
            <th align="left">Name</th>
            <th align="left">Format</th>
            <th align="right">Length</th>
            <th align="left">Default</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">TBD</td>
            <td align="left">C</td>
            <td align="left">-</td>
            <td align="left">-</td>
            <td align="left">-</td>
            <td align="left">Response-For</td>
            <td align="left">opaque</td>
            <td align="right">0-1023</td>
            <td align="left">(none)</td>
          </tr>
        </tbody>
      </table>
      <t>The CoAP Token becomes meaningless for this form of response;
responses with embedded requests are therefore sent with a
zero-length Token.  (In essence, the "Response-For" option takes the
place of the request the Token usually stands for.)</t>
      <t>The congestion control considerations for confirmable and
non-confirmable messages apply unchanged.</t>
    </section>
    <section anchor="response-for-configured-request">
      <name>Response for configured request</name>
      <t>A request may reach the server using a different means than that used
for the response.  For instance, the request may be configured in the server.
Without limiting generality, we speak about <em>configured requests</em>.</t>
      <t>The client <bcp14>MUST</bcp14> be cognizant of that configuration as the request uses
a token from the token name space it controls.</t>
      <section anchor="examples-for-configured-requests">
        <name>Examples for configured requests</name>
        <section anchor="example-periodic-request">
          <name>Example: Periodic request</name>
          <t>A server may be configured to act on a configured request every day at 12:00.</t>
        </section>
        <section anchor="example-event-driven-request">
          <name>Example: Event driven request</name>
          <t>A server may be configured to act on a configured request each time it reboots.</t>
        </section>
        <section anchor="example-configured-observe">
          <name>Example: Configured observe</name>
          <t>A server may be configured with a GET request from a client that
includes an Observe option with value 0.  This means that the server
will send updates to the state of the resource addressed by the GET
request to the configured address of the client.</t>
          <t>The considerations of <xref section="4.5" sectionFormat="of" target="RFC7641"/> apply.  How losing
interest reflects back into to configuration and whether there is some
form of error notification to the source of the configuration is out
of scope of the present specification.</t>
        </section>
      </section>
      <section anchor="multicast-responses">
        <name>Multicast responses</name>
        <t>A server <bcp14>MAY</bcp14> send a response to a multicast address.
(This needs to be a response to a configured request as a normal
request cannot be sent <em>from</em> a multicast address.)</t>
        <t>Note that, as the originator of a multicast response is a unicast
address, the relaxation of matching rules described in <xref section="8.2" sectionFormat="of" target="RFC7252"/> does not apply.</t>
        <t>The token space in CoAP is owned by the client, which is identified by
a transport endpoint (address/port).  Here, the address is a multicast
address, so the token name space is shared by all nodes joined to that multicast
address.  The assumption for multicast responses is that, for each
multicast group, there is some form of management for the token space
(and the port number) that everyone can participate that needs to
join that multicast group; the specific form of management is out of
the scope of this specification.  Note that this means that multicast
responses <bcp14>MUST NOT</bcp14> be sent to unmanaged multicast addresses such as
All CoAP Nodes (<xref section="12.8" sectionFormat="of" target="RFC7252"/>).</t>
        <t>Multicast responses are always non-confirmable.  The congestion
control considerations for non-confirmable multicast messages apply
unchanged.</t>
      </section>
      <section anchor="respond-to-option">
        <name>Respond-To option</name>
        <t>What has been called "configured request" here may also be triggered
by a usual CoAP request that carries the Respond-To option.
(The term "configured request" is still appropriate as the server
ought to be configured to accept this option; see <xref target="seccons"/>.)</t>
        <t>If a single client wants to request a server to send the response to a
specific multicast address, it can include the "Respond-To" option.
This contains an opaque string with the port number as a 16-bit number
(in network byte order), followed by the IP address (4-byte IPv4 or
16-byte IPv6).</t>
        <table anchor="tbl-respond-to-option">
          <name>The Respond-To Option</name>
          <thead>
            <tr>
              <th align="right">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="right">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD</td>
              <td align="left">C</td>
              <td align="left">U</td>
              <td align="left">-</td>
              <td align="left">-</td>
              <td align="left">Respond-To</td>
              <td align="left">opaque</td>
              <td align="right">6-18</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="leisure-for-responses-option">
        <name>Leisure-For-Responses Option</name>
        <t>This new option indicates a number expressed as a uint.
It allows the server to send that number of non-traditional response messages in
addition to the requested response. They are to be sent without undue delay
after the original response.</t>
        <table anchor="tbl-leisure-for-responses-option">
          <name>The Leisure-For-Responses Option</name>
          <thead>
            <tr>
              <th align="right">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="right">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD</td>
              <td align="left"> </td>
              <td align="left">U</td>
              <td align="left">-</td>
              <td align="left"> </td>
              <td align="left">Leisure-For-Responses</td>
              <td align="left">uint</td>
              <td align="right">1-4</td>
              <td align="left">0</td>
            </tr>
          </tbody>
        </table>
        <t>The option is elective, but unsafe for proxies
(as the option would otherwise cause multiple responses to a proxy that expects only one and that needs to be a matching response).
A proxy that chooses not to implement it may forward the request
with the Leisure-For-Responses option removed.</t>
        <t>On its own, the option does not indicate which kind of additional responses the client
would expect (though further elective proxy-safe no-cache-key options
can be added on top of that to give better guidance), and the server may
choose not to send any at all.</t>
        <t>Intermediaries may add or remove the option, and use incoming responses to
populate their cache. They may serve additional responses from their
cache, but in most cases the sensible course of action is to forward the
additional responses the origin server sends.</t>
        <t>Use cases for Leisure-For-Responses include sending further blocks in a
Block2 transfer (which are obviously non-matching and thus don't need a
Response-For), or serving follow-up documents (a response containing a
single link can be followed by a representation of the linked resource,
which needs a Request-For header that indicates the URI).
<!-- or just provide
the ETag of a freshly created resource (which would have a Request-For
option for a GET with the given path and an ETag, and be a 2.03 Valid
response). / but that probably already works as there is the concept of a "tagged representation" -->
        </t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This draft adds the following option numbers to the CoAP Option
Numbers registry of
<xref target="RFC7252"/>:</t>
      <table anchor="tab-option-registry">
        <name>CoAP Option Numbers</name>
        <thead>
          <tr>
            <th align="left">Number</th>
            <th align="left">Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">Response-For</td>
            <td align="left">RFCthis</td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">Respond-To</td>
            <td align="left">RFCthis</td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">Leisure-For-Responses</td>
            <td align="left">RFCthis</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>TBD</t>
      <t>(Clearly, multicast responses pose a potential for amplification, in
particular if unverified sources can cause them via Respond-To.
Discuss how to mitigate.)</t>
      <t>A Respond-To option can be used to incite a server to send data to a
third party.  This ought not be done blindly, i.e., only with
considered application assent.</t>
      <t>The CoAP request/response mechanism allows the client to ascertain a
level of authentication (not resistant though to on-path attackers
unless the communication is protected) and freshness of the response:
The Token echoed in the response shows that the responder had
knowledge of the (fresh) request (<xref section="5.3.1" sectionFormat="of" target="RFC7252"/>).
Responses with embedded requests can not be authenticated or checked
for freshness this way.  Their content therefore is less trustworthy
than normal responses unless authenticated in another way (e.g., via
<xref target="RFC8613"/>).</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8613" target="https://www.rfc-editor.org/info/rfc8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE).  OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration.  Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="I-D.ietf-core-groupcomm-bis" target="https://www.ietf.org/archive/id/draft-ietf-core-groupcomm-bis-05.txt">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Chonggang Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="25" month="October" year="2021"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces RFC 7390, while it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-05"/>
        </reference>
        <reference anchor="I-D.tiloca-core-groupcomm-proxy" target="https://www.ietf.org/archive/id/draft-tiloca-core-groupcomm-proxy-05.txt">
          <front>
            <title>Proxy Operations for CoAP Group Communication</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Esko Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="25" month="October" year="2021"/>
            <abstract>
              <t>   This document specifies the operations performed by a proxy, when
   using the Constrained Application Protocol (CoAP) in group
   communication scenarios.  Such a proxy processes a single request
   sent by a client over unicast, and distributes the request over IP
   multicast to a group of servers.  Then, the proxy collects the
   individual responses from those servers and relays those responses
   back to the client, in a way that allows the client to distinguish
   the responses and their origin servers through embedded addressing
   information.  This document updates RFC7252 with respect to caching
   of response messages at proxies.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-groupcomm-proxy-05"/>
        </reference>
        <reference anchor="I-D.tiloca-core-observe-multicast-notifications" target="https://www.ietf.org/archive/id/draft-tiloca-core-observe-multicast-notifications-05.txt">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Hoeglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsuess">
	 </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="22" month="February" year="2021"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server, and receive notifications as unicast
   responses upon changes of the resource state.  In some use cases,
   such as based on publish-subscribe, it would be convenient for the
   server to send a single notification addressed to all the clients
   observing a same target resource.  This document updates RFC7252 and
   RFC7641, and defines how a server sends observe notifications as
   response messages over multicast, synchronizing all the observers of
   a same resource on a same shared Token value.  Besides, this document
   defines how Group OSCORE can be used to protect multicast
   notifications end-to-end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-observe-multicast-notifications-05"/>
        </reference>
      </references>
    </references>
    <section anchor="extensions-explained">
      <name>CoAP extensions explained by non-traditional responses</name>
      <section anchor="observation">
        <name>Observation</name>
        <t>This section describes the Observe option <xref target="RFC7641"/> in the terms of this
document, [ so nothing in here should contradict that document ].</t>
        <t>When Observe:0 is present in a request, this sets up non-traditional
responses until either of the following conditions is met:</t>
        <ul spacing="normal">
          <li>
            <t>A follow-up request on the same token carries an Observe:1 option.  </t>
            <t>
(This is primarily in here because; Observe:1 and No-Response:any
could be combined; otherwise, the other conditions suffice).</t>
          </li>
          <li>Any response does not carry an Observe option.</li>
          <li>Any response has a non-successful status.</li>
        </ul>
        <t>Follow-up requests are limited to extending the request ETag set.
Responses are obviously non-matching by their Observe option; each hop
discards the Observe option for the purpose of caching and refreshes its
cache with the most recent one as per the Observe value.</t>
      </section>
      <section anchor="responses-to-multicast-requests">
        <name>Responses to multicast requests</name>
        <t>As with observe, this just phrases the existing mechanism in the context
of this generalization.</t>
        <t>When the destination address of a CoAP request is a multicast address,
that token is valid for any member of that group (which, for the purpose
of the client, is any server at all) on any port.</t>
        <t>(Except for that the implications of having received a multicast request
still need to be followed, it might be seen as a template for creating a
phantom request to any endpoint, if that suits the reader's mental
model.)</t>
        <t>Responses can only be sent for up to the deployment's Leisure time
(see <xref section="8.2" sectionFormat="of" target="RFC7252"/>) plus
the application's timeout (in proxy situations, this needs to be
communicated explicitly in the Multicast-Signaling option of
<xref target="I-D.tiloca-core-groupcomm-proxy"/>).</t>
      </section>
      <section anchor="triangular-responses-response-to">
        <name>Triangular responses (Response-To)</name>
        <t>The Response-To option can be viewed as a shorthand notation for
"Consider this a No-Response:any request, but take a copy of it, make it
into a CoAP-over-UDP request with that particular address as a source
and any address of yours as a response, and treat that as a phantom
request".</t>
        <t>[ It may make sense to add an explicit return token, and include a
No-Response option; that might allow it to be used even across proxies. ]</t>
      </section>
      <section anchor="other-current-documents">
        <name>Other current documents</name>
        <t><xref target="I-D.tiloca-core-observe-multicast-notifications"/> is a
straightforward application of the phantom requests (the concept was
developed there); Leisure-For-Responses could help it around the topic
of joining a multicast group securely through a proxy.</t>
        <t><xref target="I-D.tiloca-core-groupcomm-proxy"/> seems to fit well with the concepts
here as well, and might be simplified by it both in terminology and by
replacing Response-Forwarding with Response-For(Proxy-Scheme, Uri-Host).</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>TBD</t>
      <!--  LocalWords:  CBOR extensibility IANA uint sint IEEE endian
 -->
<!--  LocalWords:  signedness endianness
 -->

</section>
  </back>
  <!-- ##markdown-source:
H4sIAMAr/GEAA71b23LbRpq+76fokas2pIdgJFnxOPRkNrKkTFRrS15J3lQ2
m5pqAk2yRyAagwZEM7KfY2/3Yh9jrzYvtv+hG2jw4CQ1U8uJxiSAPv3H7z8g
SRJRmzrXE/knIeWZPX07kVe2SOpKZaY2tlC5rLQrbeG0nNlq6URm00ItYURW
qVmdTOGiKooktZVOwqMuyVWtXS2eyAy+TOTx4fFxcgj/PRPC1arI/qJyW8CN
umq0EKas6Kurjw8Pvzw8Fvd6vbJVNpGXRa2rQtfJOa4mUlVPpClmVrhmujTO
wRbrdQkTXV7cfSNEaSbyh9qmI+lsVVd65uDbeslfUrssVVrTl6UuavejEKqp
F7aawOET+JOSj3amKlfrQr7iw9EdW80n8l1hHnTlTP3zf9fyVaVhGnn375f0
gIP1NGzvrXX1TKUL+ezZ4cnJId1LTb2e+AF8wWawznly/OLZF1/6K01RV/DU
nzUuuqaL5YKo9PuTL5OT46Pk+OhF8vzZl8dHdFMvlcknMlVT+3X9kxnDDjfP
saiMq40q5OnS/fw/zvXGhZtfq6VrtHNjoIsQBZ65hmMiUW6+OfvD8RfH8LBV
Jf9+8fzo2URahwwHzhWzzeefnxzB/anT1QM8AHTGs8O924vX30zwiXphnBAP
umhozLyyTQl7BcEBsTOFzuTNxe3drMnlRfFgKlsQs+TgzN5cDGGA3z6s/7XR
9cyfe27qRTPl68lq/nlfIIUQSZJINcU10lqIy4LEXSonMz2jVadr3J3EA49a
qXdSVVqqfKXWTjaFSZWr5VSl97K2Uok0N7A5WS9ULUvrYBYFQ/8G5KzHUt4t
tCxhJnxkqZcWlnJpZaYwa72yrFDSzkS3GE00t3Kq17bI+OcSZCXn2UALeYoS
lZP3Vtga2ADimuHqcC17sKlK1zg9/LDwaDGHmXCwKsvKgmzCSgZ0IDOgnfl6
hHfXAieD2w8GJ4LTlRamlbbBk9XIRzAGitjmaO5MP+jclsuWACvb5JlYwDM4
fKpBNEHzmjxfS/2g8gYWy8bMiKXJslwjG+rKZk2Kx5H+8/jE4NWP4qvo8//E
sVNJcluBkK3lSuGDFi4V/JQ3hLUV7RieyNQyMxmyAq6nGrRh1Jth2eQ1b6Sb
ZiSAhlNbL4AkKCg9xppCoppIV+rUzGAoEcizW+5it/iN7JY72S1+K7vlLnaL
mN3iyRN5BzbNFDa387Xs2Aymfek+8unB4ks0+U4evHl3e3cw4n/l1TV9v7n4
13eXNxfn+P3229PXr9svwj9x++31u9fn3bdu5Nn1mzcXV+c8GK7K3iVx8Ob0
e7gDTkkeXL+9u7y+On190DIA3F1DR0Zy8TGR+hWodU0MEEGnMxzz6uzt//7X
0Yl8fPwdSObx0dGXHz/6Hy+O/nACP1YLXfBqtgDF4J+sf2WpVYWzqDwHYpam
Vjn4LWCyW9hVIRe60kDQpz8gZX6cyD9O0/Lo5E/+Ah64dzHQrHeRaLZ9ZWsw
E3HHpR3LtNTsXd+gdH+/p9/3fge6RxdZLFBE5MF0XWtgCaizYzIb8AeFXckU
IINdqmqNOooCD/oADr+wxXqJQisObFrr+gBVDIWtnYB5i5hiIsQ+xDMREzAI
ndqTpjvSQGCYdKBoue7uz3WhKxR6trythfAWIQMnZQseCd4Z8I4qYGRVj3kH
4EXTBerup5ZfwAlBaUtd1UajOx8A/AHzgDbWsu0Yeq+h7jXaJVMQ7qnNFPa6
AidJO7CVmRs+K21yBFMpcjgNGZ9SwQJpk4M8NoVrQBJxOJE3RYOSxdaQFwzH
HUybGmYD2+pgTeBMGE02pmwQGtIeaCJPK2eWBhfzkwzHMMO1t4XdcSIbXMQU
KzSbsClZtPdr3LOaoa5I+Q3Mr9+rZZlrOqR8ldv0/ribiWiiwH7PZqBfoOlo
u4BCMznFJ2XRLKfgEB4fH3/+z4+gwHzVmZ+IJSCLRYb2OciVbglBotLtEnYD
GGdm5k1F5KOHAo8jX1JpttgkKOyM0CSA1IH+g0dZ87JTRIgkQ0tTk81XIN0N
sJS8ZJgyljjEveQQyZmkMEuhc6JJSwzYs34PPgePYwvY8gUcPss+uWHjOj8y
Xcf7JtFAgqSmJK8LRAXVhSXbBWGApiXwBCSu7SB+AvbwRN6CuyNG79FUt1+J
GQ44XSPSiq6WhDtaZW2V2auDraJnCcChnKB3VB3VO7LALr9D8wxHvtcemJni
weag9yOB9nzv1tEmxXLzmeNJXgpi+xr0BMBC57OnEChkgbSbeiwGejwfI1Ub
53EA897f/8u9yT4P30vzAIpuSL6ub8+uby5AyhOG9h8/gg7ykZYQG6i5lpfn
m+eC4ASJiovsOx4YKFRyAwEVkXFE5rMAkwiTViZneeH7wVCinWFjmvv7EAEC
OLgH2Dhf4HMAFBCj8cbcEOLCApWf+ERGqjTz+RpBX2ypiJ7y9OxfcFMNelXY
gSdSR/zuuMORIBqj4vHRz66vgOTgAq86/gHrby1QGEaDmTMuNo5ODDgSUmzK
AnCFnSClOUj6+BEkBFjagcRONujBf75MzscY6nCUTQET6nIyNQ74JMjCeJeG
CxgGiwhac7AmGYYCeQ7uEk8zb0ymipRUgsA98RiVYK+EvhSPj/o9YEIMt10C
BiKnOA2M4Rz4havWEJMxTIQ1lkASBNIphjAt9dnAIr1nlV1GbCcjEnMQpFfR
bsCiNGVOBguGsVHxwRKZAwT0sIDXR8oGoDy2rld4b715sqlOlde6imye6nbL
hg0TI51tm6qpF8Qc2QNcAOEkvZSKsUAO9IA5wG3yXuPV6Lh7iesR8tuKNmC8
y+Og4xdMXi9YoSCFRKiMQIkLNPIuaRaduVgLDyXWm66Lz+4dG7sijps+cxx8
kITB1F5lBXEdIlSYF/7rMEnnHImprVci185iX4Fi0ZMSZazCM3YIJ5gXr5Ri
4Dfa6UprHTGAAtr7SCnLgARuSJK41OjrjCNIKDUIlCEm7aDWskE7RUEXM7xj
igCziw54YVLEC2SjwUyBX5lVgD8Ip+OImFmqqgzACX8KEbtZA7BqBpEdUnUs
L2tiIuB92y6Pm+XVPNlofsELe32pNCPaLrpDQrK6J03ZjhzL6wJQEdlNQKIt
9oTwglbRiKk/I3gX+Lw1CVkUVKcOL7CS1BTdtZJCGxxFQkP4jCRxpcDFNyA9
6A+DHYf97HeO/pwtKAGpXVoKgy5n3krsdDtwvhVa7Z1gFxefNRWqglCcewCO
4F2D2GxQBzkmlOrIyUV2fCJp34RYMAAHMyVIHUpmtKKYH8xlU3nYTqEe249a
RwY+xDRDkICZiGEPBJ6ajRefZA9qB3KSyE77iHgktCG4iFpXeHWTxidb4Iht
INBpAz9ESQlUVXLAJg1jcwP4+8ZvLgFQ7e3WTcupgI+C7RUXRUY5BceiPQct
IYeDyJrj31aNBrAq41s/uj2J8L5liBKsGf5aIE4LPZHS71G/5xgfHJTwDULC
MA8E9qRCgox8z7x52cSdeDO6MoDTeJ8wKyU2nH9EBGzCeSaQRfiBqZRwamAE
SFJDRm+q2V2hKwPgojXaLAvaogNF0Cy5GCsuVQHmrcXPvLdRP7BqtWiqRRdr
boywhObSHJYD25XnamorNokty/3BBxgf+8ioPwvmH+yKQwpQhSqjcJAIj14T
nGUzJfTAaJ5ZSFETARYGZ+TCQNnL/R5sSNj+pheI6Y14I/JyaAq2U3GbbI1S
cYEhgXn9YCP2d2xme/oXDAg7HBGFI5iX8FpxEGvEAToLENYiFrUSMChxVnkw
d6vJ4Igvxs+QgC3c9uni2DLUZJZDro8ICoQggCtiCpC56gIR8UFe2bH8IM/g
7x38XcHfDf6LgUD4fMDIGLQMvrzWxRxI/0Ge65kCnyg/iA8Jfj7s+Is+H/Z/
SWAKeffq3O8iif5iksFPWyrYOHw5TI4Oj5/BlwEIjB7CDsXjRD4JB01AXBNP
dqpZfXWA9OrNxhkD5EPuvjqoZB79D34d+FwjBch3JLWABAG7I+gHgIARoAso
1tCXZRw0vowS9TuFlXWZEBaM1V3cCAz7SVc2yZnStDYwfHAJoMfBU6mHMBvy
FI6r7tm1CgDeaRtydWKv/Wko/seUC5bYaP/jIR8ZJHOO8AjjfotuIMd/HcTs
lQ9N8NQp5idAKCjXU7Bbjq+FgAsTyzlmWdjuZn09bmfqZTpQkcOO0R9QmiNO
FnDAGidikCmOsx2k2ugphY8xuvwAp3hA62rV0jFeaKrj3Xj8yGtChOvNd26W
7AV93GlqtO0asZi6l2BE4Zmn24dyT7098IaT8rC04LwwPynOeLC38WM9PHW9
bTYI54MvbKMj/omVPNgG8t3UgXnoQMD5XrD1dntI7vCh9qmJfAsO3QIe32Fb
twmFljWt2UlvTy01jFrLDB17LY+OJ4eH443VLh6QIhkAYDjFP2JFkhezJDpU
empt7TbXjBJsbQXyEyv61N+fL+7aVYj6AQUT64Qp0rzJUOoLec2zBs2kCThf
eEgG3LhOautI0gRhC/JeTZkxVOYMDohtHam0s00FrPbxS+ffYY+iVXgbQpNw
EP94mIZ3P25VP9ZzeKR1QvJk/AU7oZCJYM2Go3xrVxJABCIwqncwap3lMNBx
NY0zdXZTsuGEEE4QlmtDTQc2VgRrqquKkg11V9cKpOCzh0P05oVZQAcF3AN/
WbYPhepqr07GyvFmO50SCcOb0+93g4moVMdEHYsB8TWCX1uDdogrpaGomJ63
jAMEg7gk5DmeorA93bnmEBOaNUcPbWTp4X+NYHnWGxajBhWKnsJPFkxirt4z
LWFwV2xockrgRDWsTjxejI+xPO27AEA6uqCExMTXaMhOeRPli7TIrlWxDU8Z
aGF0lWESYWboEaG6aogMIFkO/P4/x8tDlEkQJz5MkHc6bkuG7sDO7rGgnPTz
6QjKyqJi/9VSVi5UMrYm9NhMOdcsWfHR4O7M1znPMso0gMUS3VOUtxv1taLF
GBwAUKUxeLiIrmLAxRkQeCQRlyR8oYcsMWZiER9z3caUystOK7UCz7hxPN7R
S9Y9r0C7NsS6h5JAT3b6t1mgBjq1Usu3I2PYUbUjV6hbtiqBIUYRgqEttcBU
fIPZFydOc1/ouCIODjqhPToevyCjhj0rlMYWO0xB3CSwAXM8tzvIJD4BmbYg
UrtUHyyJHlgKaClL7mwIvMV3ocA31ZTgyXOgwcG2aTnglG2bL5pizsnM55RJ
odh9Rx3IJ1mryvgszdYGyM6FiuuuVZHbNYXI2FZQVphvCqbJeznbYH7edwNs
ePZUl14oeL2XMEiDsXE6RbpCBDT0SR1fi/E+GHsoHOcavWWNyktkwntxGzV5
tNK8JUIjQlFUtiOvHsNuJMZBSw0y+l1EV4RIxdWU+WnD6Ugj2egfPU+mJlyi
jGUoX2Adm8Pj4cjn1zoTefm2NWuDk4QevXz7cALPC5zR/36O8vwrAry/O7z7
9cHdu63gjqQqCu2kfJ4cvdgK7epp7ju0sqS2e4M7mu1XhHaoVq+1wawbhk9J
l5q69hrm/fiqS4iFDLcKHNTvSw+8iJeNQRx16VMivaJsJ32q5T+Ynb0ZydYe
mAL9iomRjxftqHKEyXRf8GN16tUgmyJrMOGdK/Cds3o7PdgmK35VLuAfmRT4
jQIkIwGStOwuBn4gRtAD8DlKTvgLfA4jWcr9WMwUdK2o22L1KSH5xeRBEB0n
dc5pwJGcEkuw5YB8AvYgYHfGIOA2HyxQvxSlOVcG03NUg9pXsuFGBvbwlPx2
nEVGT69aseth0q0OErAVp/FE6cJa5xEcDDIYNLGH51AZNr9SVRaLpGjt3G6q
+bNVemkfyLddc3cOoL9RfPgWOQad81Dw3mAmeCaDRvSS/x1yFEw8pgQm6NHT
hBx+ywk+a0KMKGxCDSYJdpb51phQJ6aUvdxO2c8pSahrVKhQJx2OZMBeXRwp
mJKBkBxIFBQLg6EYU18j+FGsyZDDJV+dZZK6CpBSEWl4/obq06ldxvwj4Bb3
zJiKu2a8deC6H+UEd5EvZBJMJWgUCyr4o6X1hbNg0ApH7UEpBGBc7eiqIrWN
xULs5RMbn0AjpAhG5++c9guhYuwWoeCJQ8UzcJUabShrqoRv2qEoYQb3Br4M
B+bRTh+MbRyoRq8nqO1mymzxGWsKzBPn14aULccN06ptuSu0/IEfjuI8jwRo
auERSm6K+1Chit05DvORaRtx+Sqxb0igSHck+BSsxQrcHdc+MJ+10Iqy6NuF
2Hc3l6DXf/xdkuD2/4rVH99+Q/D84k7NOTycwToLIEtaaVVHywbiRf2bvbWF
7WIcTo60NmBOyRyILhbcXlDQcizBZIKOx4fP5L+p3GSiM0LycxI8brkN1fTQ
moDAyHkYWem26mYLwot0kINazed0gJioBzJJsE3w8vTqlLrHO2S+0Tl81zb7
oZ7wAsyuru7lPXibliHw7HHDlb9V6bkB9LfGSOjx0ccXE/Kx7P73u9UbTTlN
IH5wo/D5/R7PGV8PntLPEiW7o9kfH/8Ju+shQEdotTWAAJT8VQP2ud/+AHK4
aupda9LSxfvYiHaeMo7wGURoTWXq9Qa35OOTEANsMu7VuRCDs1yrCmttuwJu
bOFGb9m2LJPUgmNrg9IRAq6on9HMwFeDjeLkA6sE15nbppClfDAqIt5YnBuX
NoDMF9hFYyUmi+egVBiynG6HUsEmUG0eHW2RmlpvBy6ZqhUHLFGZLeQROZby
+aIM3f4U7EeGhDBjPR75/mFQTRHiUjRxpW+YoSyz69KAcTT4eQRKQ2tEBHBD
8hM25lJdodmDLebY/00K2WBhqg6rDLjr3RlMwKOWk2uGwSAZbCnqGhuxKuyg
oAILK3jci8htNjWV+IdkTch4FVFOs+uKvWvrHbB5G/dd+kNht3SUgfUhBtB9
oTJxX9gVBNbzNoU4oKWGbXgZpRK+GD8bH/VzCf16944KELLeMy0ilCbfDz4Y
O9KohtEdkGLilWLGk4u31GITFZLgAaYcviMFFrNerAXVRTjBGDcTMon7S2/0
j1KP4AhlXPT7/ejVDEzuCuxVBXnpur5k2/WFDm5/v8bjk52dYj3F/vs/ADO7
dgwRmUtv7J1nYPS+DXB6I3n/+OhfVwKr5kWI3kgIuS0RgMBI/scPmFJEElLT
B7fio5yhB6XsENAi9S6ufWXgR+4KbasGk0MWdE5ZI1O6jhROpmE30XbFXMTs
xd4Z39zhBbhzZVEHGeXesLn9qTzd0crTa0T3DUWcG+qKHJOjNheCjeahuaus
zJI7NwMdfDvdy2ggqvCVbV3IhF9oS4lelBtaTlEuXnbhkI8W6GDRObhJCiMZ
PEmx3tEggztfbxdnxpsDFj4lXySuSbH/FF8xw/JLg0j1m62eKUKXVBhkK06C
vdU6QHgLGBebhk/AUk72gJL3N/uSy1sLW4oMXI2qsp0iG1LDZVOR4wMJQGQf
8C5YC7QqiKlrx5i/w24E+rETAquSBWXuSp84CKtQJQtocROHorHX9WXFPbil
U8JTbx59XcmLN2PVRdUGHvo9voGInXitG/KKSCbwPdV7aGgoy/4UCjykV/Xu
rj9Gjb30Z79Q0CYDff8aKQA88oDAlREECM5Sh5wOv5WHyXKPnUebnBC9ytvI
91cGf89h4ZBKm3DVv/QxuHhPGJen8s4KY3LvFekcAM85Igyt0dv8EJyVjV6C
CLEIJTu5Z5oySLrgrFatYRUMKalujOEBhzUbzVOEAGC/oSIz4v5R2Cm+0xFK
2BinUNs04PJc8MuKw1iG0CMSVglZLFwVSOmRdqbL3K6X3HTo8SfVecWAE8T9
apRsq1FDWeaNo6AnQj3YPg+DMUuGqVfOfjhTN0xTL4pxL1UHRTRlGKgjLm97
YtviQXJr5mCNo5iB4gDqzgYO2FRt9mfT4uxZ7yqjinnD77gEygxaQH9nh7+k
Vd67RS0vW3jzwehVyFyCc6oQIlArlArWQxwE7M10UJtWuvNIFLLxWzepLdfc
7TUK7xUJKv+yliUWhDx5d96pmzc6GO91wDtoJ2+PcLdQIXHSae4akxD8UKCU
T8GgoPKs3OPP0hqqq/iSF/hp30lL2+SXwnCfGQWrgbnYM95URehUxclDEkKJ
iCCtceYCFikS4WTUK1Y1gvgao2KVVta5kPwbyx8BpLA3aypqZ2nzCvs4LXZJ
kzehSav2SVw6d4hdsB+M3p2G/YVcTRwHhFp5X7sdv5oRIu0VvcpIr3jqjKHn
8OWeeJD9+ELnJfU9VvxGCpUsS5OiLcRqI7fzbFQbEZo11PBdLyqKFHyqc7zz
9Fu6hFZsyVkpWHqlwfB1jY18FCcIlYCM4G1mb2cEDceGjGNhCnwDl1Q9ekWV
0hnYNoj9VniMOPBG8rYFoPjG4C1lH2/B6y5BZN9VJvnW0rts4BDTNu5gEdhC
tBBTcwpCZ18dFJbSzRj+UqJHvgaK5N/h+7ETKc9eXd8EaD412KskKQlCOXKH
/3d5cXGBZhtsjqA0yY5ZHFgznVEEwk/iV376/wA7dWGhGEIAAA==

-->

</rfc>
