<?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.26 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-coap-pubsub-12" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="COREPUBSUB">A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-12"/>
    <author initials="M." surname="Koster" fullname="Michael Koster">
      <organization>Unaffiliated</organization>
      <address>
        <email>michaeljohnkoster@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Keranen" fullname="Ari Keranen">
      <organization>Ericsson</organization>
      <address>
        <email>ari.keranen@ericsson.com</email>
      </address>
    </author>
    <author initials="J." surname="Jimenez" fullname="Jaime Jimenez">
      <organization>Ericsson</organization>
      <address>
        <email>jaime@iki.fi</email>
      </address>
    </author>
    <date year="2023" month="March" day="13"/>
    <area>Applications</area>
    <workgroup>CoRE</workgroup>
    <abstract>
      <t>This document describes a publish-subscribe architecture for CoAP that
extends the capabilities of CoAP for supporting nodes with long breaks in
connectivity and/or up-time. The Constrained Application Protocol (CoAP) is used by CoAP clients both to publish and to subscribe via a known topic resource.</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-ietf-core-coap-pubsub/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        core Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/core-wg/coap-pubsub"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> supports
machine-to-machine communication across networks of constrained
devices and constrained networks. CoAP uses a request/response model where clients make requests to servers in order to request actions on resources. Depending on the situation the same device may act either as a server, a client, or both.</t>
      <t>One important class of constrained devices includes devices that are intended to run for years from a small battery, or by scavenging energy from their environment. These devices have limited reachability because they spend most of their time in a sleeping state with no network connectivity. Another important class of nodes are devices with limited reachability due to middle-boxes like Network Address Translators (NATs) and firewalls.</t>
      <t>For these nodes, the client/server-oriented architecture of REST can be challenging when interactions are not initiated by the devices themselves. A publish/subscribe-oriented architecture where nodes are separated by a broker and data is exchanged via topics might fit these nodes better.</t>
      <t>This document applies the idea of publish-subscribe to Constrained RESTful Environments. It introduces a broker that allows to create, discover subscribe and publish on topics. The broker enables store-and-forward data exchange between CoAP endpoints, thereby facilitating the communication of nodes with limited reachability, providing simple many-to-many communication, and easing integration with other publish/subscribe systems.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This specification requires readers to be familiar with all the terms and
concepts that are discussed in <xref target="RFC8288"/> and <xref target="RFC6690"/>. Readers
should also be familiar with the terms and concepts discussed in
<xref target="RFC7252"/> and <xref target="RFC9167"/>. The URI template
format <xref target="RFC6570"/> is used to describe the REST API defined in
this specification.</t>
        <t>This specification makes use of the following terminology:</t>
        <dl>
          <dt>publish-subscribe (pub/sub):</dt>
          <dd>
            <t>A messaging paradigm in which messages are published to a broker, and potential receivers can subscribe to a broker to receive messages. Message producers do not need to know where the message will be eventually sent. The broker matches publications and subscriptions, and delivers publications to subscribed receivers.</t>
          </dd>
          <dt>publishers and subscribers:</dt>
          <dd>
            <t>CoAP clients can act as publishers or as subscribers. Publishers propose topics for creation and send CoAP messages (publications) to the broker on specific topics. Subscribers have an ongoing observation relation (subscription) to a topic. Publishers and subscribers do not need to have any knowledge of each other, but they must know the topic they are publishing and subscribing to.</t>
          </dd>
          <dt>topic collection:</dt>
          <dd>
            <t>A resource collection is a group of related resources that share a common base URI. In this case the the topic collection contains resources of the type "topic resource". CoAP clients can discover and interact with the resources in a collection by sending CoAP requests to the URI of the collection.</t>
          </dd>
          <dt>topic resource:</dt>
          <dd>
            <t>An entry within a topic collection in a broker. Topics are created and configured before any data can be published.  CoAP clients can propose new topics to be created, but it is up to the broker to decide whether and how a topic is created. The broker also decides the URI of each topic resource and of the topic-data resource when hosted at the broker. The creation, configuration, and discovery of topics at a broker are specified in <xref target="topics"/>. Interactions about the topic-data are defined in <xref target="topic-data-interactions"/>.</t>
          </dd>
          <dt>topic-data resource:</dt>
          <dd>
            <t>Topic resources contain a property called "topic-data". The topic-data resource is a CoAP URI used by publishers and subscribers to publish (PUT) and subscribe (GET with Observe) to data (see <xref target="topics"/>).</t>
          </dd>
          <dt>broker:</dt>
          <dd>
            <t>A CoAP server that hosts one or more topic collections containing topic resources. The broker is responsible for the store-and-forward of state update representations when the topic-data URI points to a resource hosted on the broker. The broker is also responsible of handling the topic lifecycle as defined in <xref target="topic-lifecycle"/>. The creation, configuration, and discovery of topics at a broker is specified in <xref target="topics"/>.</t>
          </dd>
        </dl>
        <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>
      </section>
      <section anchor="coap-publish-subscribe-architecture">
        <name>CoAP Publish-Subscribe Architecture</name>
        <t><xref target="fig-arch"/> shows a simple Publish/Subscribe architecture over CoAP. In it, publishers submit their data over a RESTful interface to a broker-managed resource (topic) and subscribers observe this resource using <xref target="RFC7641"/>. Resource state information is updated between the CoAP clients and the broker via topics. Topics are created by the broker but the initial configuration can be proposed by a client, normally a publisher.</t>
        <t>The broker is responsible for the store-and-forward of state update representations between CoAP clients. Subscribers observing a resource will receive notifications, the delivery of which is done on a best-effort basis.</t>
        <figure anchor="fig-arch">
          <name>Publish-subscribe architecture over CoAP</name>
          <artwork align="center"><![CDATA[
      CoAP                     CoAP                      CoAP
     clients                  server                   clients
   ___________              __________    observe   ____________
  |           |  publish   |          | .--------- |            |
  | publisher | ---------> |          | |--------> | subscriber |
  |___________|            |          | '--------> |____________|
        .                  |          |                   .
        .                  |  broker  |                   .
   ___________             |          |   observe   ____________
  |           |  publish   |          | .--------- |            |
  | publisher | ---------> |          | |--------> | subscriber |
  |___________|            |__________| '--------> |____________|
]]></artwork>
        </figure>
        <t>This document describes two sets of interactions, interactions to configure topics and their lifecycle (see <xref target="topic-resource-interactions"/>) and interactions about the topic data (see <xref target="topic-data-interactions"/>).</t>
        <t>Topic resource interactions are discovery, create, read configuration, update configuration, delete configuration and handle the management of the topics.</t>
        <t>Topic data interactions are publish, subscribe, unsubscribe, read and are oriented on how data is transferred from a publisher to a subscriber.</t>
      </section>
      <section anchor="managing-topics">
        <name>Managing Topics</name>
        <t><xref target="fig-api"/> shows the resources of a Topic Collection that can be managed at the Broker.</t>
        <figure anchor="fig-api">
          <name>Resources of a Broker</name>
          <artwork align="center"><![CDATA[
             ___
   Topic    /   \
 Collection \___/
  Resource       \
                  \____________________
                   \___    \___        \___
                   /   \   /   \  ...  /   \        Topic
                   \___/   \___/       \___/      Resources
]]></artwork>
        </figure>
        <t>The Broker exports a topic-collection resource, with resource type "core.ps.coll" defined in <xref target="iana"/> of this document. The interfaces for the topic-collection resource is defined in <xref target="topic-collection-interactions"/>.</t>
      </section>
    </section>
    <section anchor="topics">
      <name>Pub-Sub Topics</name>
      <t>The configuration side of a "publish/subscribe broker" consists of a collection of topics. These topics as well as the collection itself are exposed by a CoAP server as resources (see <xref target="fig-topic"/>). Each topic has a topic and a topic data resources. The topic resource is used by a client creating or administering a topic. The topic data resource is used by the publishers and the subscribers to a topic.</t>
      <figure anchor="fig-topic">
        <name>Topic and topic-data resources of a topic</name>
        <artwork align="center"><![CDATA[
              ___
    Topic    /   \
  Collection \___/
   Resource       \
                   \___________________________
                    \          \               \
                     \ ......   \ ......        \ ......
                    : \___  :  : \___  :       : \___  :
             Topic  : / + \ :  : / + \ :       : / + \ :
          Resource  : \_|_/ :  : \_|_/ :       : \_|_/ :
                    ....|....  ....|....       ....|....
                    ....|....  ....|....       ....|....
             Topic  :  _|_  :  :  _|_  :  ...  :  _|_  :
              Data  : /   \ :  : /   \ :       : /   \ :
          Resource  : \___/ :  : \___/ :       : \___/ :
                    :.......:  :.......:       :.......:
                   \_________/\_________/ ... \_________/
                     topic 1    topic 2         topic n
]]></artwork>
      </figure>
      <section anchor="collection-representation">
        <name>Collection Representation</name>
        <t>Each topic resource is represented as a link, where the link target is the URI of the topic resource.</t>
        <t>Each topic-data is represented as a link, where the link target is the URI of the topic-data resource. A topic-data link is an entry within the topic resource called 'topic_data' (see <xref target="topic-properties"/>).</t>
        <t>The list can be represented as a Link Format document <xref target="RFC6690"/>. The link to each topic resource specifies the link target attribute 'rt' (Resource Type), with value "core.pubsub.conf" defined in this document.</t>
      </section>
      <section anchor="topic-creation-and-configuration">
        <name>Topic Creation and Configuration</name>
        <t>A CoAP client can create a new topic by submitting an initial configuration for the topic (see <xref target="topic-create"/>). It can also read and update the configuration of existing topics and delete them when they are no longer needed (see <xref target="topic-resource-interactions"/>).</t>
        <t>The configuration of a topic itself consists of a set of properties that can be set by a client or by the broker.</t>
        <section anchor="topic-properties">
          <name>Topic Properties</name>
          <t>The CBOR map includes the following configuration parameters, whose CBOR abbreviations are defined in <xref target="pubsub-parameters"/> of this document.</t>
          <ul spacing="normal">
            <li>'topic_name': A required field used as an application identifier. It encodes the topic name as a CBOR text string. Examples of topic names include human-readable strings (e.g., "room2"), UUIDs, or other values.</li>
            <li>'topic_data': A required field containing the CoAP URI of the topic data resource for subscribing to a pubsub topic. It encodes the URI as a CBOR text string.</li>
            <li>'resource_type': A required field used to indicate the resource type associated with topic resources. It encodes the resource type as a CBOR text string. The value should be "core.ps.conf".</li>
            <li>'media_type': An optional field used to indicate the media type of the topic data resource. It encodes the media type as a CBOR text string (e.g.,"application/json").</li>
            <li>'target_attribute': An optional field used to indicate the attribute or property of the topic_data resource. It encodes the attribute as a CBOR text string. Example attributes include "temperature".</li>
            <li>'expiration_date': An optional field used to indicate the expiration date of the topic. It encodes the expiration date as a CBOR text string. The value should be a date string in ISO 8601 format (e.g., "2023-03-31T23:59:59Z"). The pubsub system can use this field to automatically remove topics that are no longer valid.</li>
            <li>'max_subscribers': An optional field used to indicate the maximum number of subscribers allowed for the topic. It encodes the maximum number as a CBOR integer. If this field is not present, there is no limit to the number of subscribers allowed. The pubsub system can use this field to limit the number of subscribers for a topic.</li>
          </ul>
        </section>
        <section anchor="topic-resource-representation">
          <name>Topic Resource Representation</name>
          <t>A topic is represented as a CBOR map containing the configuration properties of the topic as top-level elements.</t>
          <t>Unless specified otherwise, these are defined in this document and their CBOR abbreviations are defined in <xref target="pubsub-parameters"/>.</t>
          <section anchor="default-values">
            <name>Default Values</name>
            <t>Below are the defined default values for the topic parameters:</t>
            <ul spacing="normal">
              <li>'topic_name': There is no default value. This field is required and must be specified by the client or broker.</li>
              <li>'topic_data': There is no default value. This field is required and must be specified by the client or broker.</li>
              <li>'resource_type': The default value is "core.ps.conf".</li>
              <li>'media_type': The default value is an empty string, indicating that no media type is specified.</li>
              <li>'target_attribute': The default value is an empty string, indicating that no attribute is specified.</li>
              <li>'expiration_date': The default value is an empty string, indicating that no expiration date is specified. If this field is not present, the topic will not expire automatically.</li>
              <li>'max_subscribers': The default value is -1, indicating that there is no limit to the number of subscribers allowed. If this field is not present, the pubsub system will not limit the number of subscribers for the topic.</li>
            </ul>
          </section>
        </section>
      </section>
      <section anchor="discovery">
        <name>Discovery</name>
        <t>Discovery involves that of the Broker, topic collections, topic resources and topic data.</t>
        <section anchor="broker-discovery">
          <name>Broker Discovery</name>
          <!-- TBD: This section explains Broker Discovery, needs more work -->

<t>CoAP clients <bcp14>MAY</bcp14> discover brokers by using CoAP Simple Discovery, via multicast, through a Resource Directory (RD) <xref target="RFC9167"/> or by other means specified in extensions to <xref target="RFC7252"/>. Brokers <bcp14>MAY</bcp14> register with a RD by following the steps on Section 5 of <xref target="RFC9167"/> with the resource type set to "core.ps" as defined in <xref target="iana"/> of this document.</t>
          <t>Brokers <bcp14>SHOULD</bcp14> expose a link to the entry point of the pubsub API at their .well-known/core location <xref target="RFC6690"/>. The specific resource path is left for implementations, examples in this document may use the "/ps" path.</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> GET
   Uri-Path: ./well-known/core
   Resource-Type: core.ps


<= 2.05 Content
    </ps>;rt=core.ps;ct=40
]]></artwork>
        </section>
        <section anchor="topic-discovery">
          <name>Topic Discovery</name>
          <t>A Broker can offer a topic discovery entry point to enable clients to find topics of interest. The resource entry point thus represents a collection of related resources as specified in <xref target="RFC6690"/> and is identified by the resource type "core.ps.coll".</t>
          <t>The interactions with topic collections are further defined in <xref target="topic-collection-interactions"/>.</t>
          <t>A topic collection is a group of topic resources that define the properties of the topics themselves (see Section <xref target="topic-resource-representation"/>). Each topic resource is represented as a link to its corresponding resource URI. The list can be represented as a Link Format document <xref target="RFC6690"/>. Topic resources are identified by the resource type "core.ps.conf".</t>
          <t>Within each topic resource there is a set of configuration properties (see Section <xref target="topic-properties"/>). The 'topic_data' property contains the URI of the topic data resource that a CoAP client can subscribe to. Resources exposing resources of the topic data type are expected to use the resource type 'core.ps.data'.</t>
        </section>
      </section>
      <section anchor="topic-collection-interactions">
        <name>Topic Collection Interactions</name>
        <t>These are the interactions that can happen at the topic collection level.</t>
        <section anchor="topic-get-all">
          <name>Retrieving all topics</name>
          <!--
GET to /topic-collection
retrieve all topics
response is link format
-->

<t>A client can request a collection of the topics present in the broker by making a GET request to the collection URI.</t>
          <t>On success, the server returns a 2.05 (Content) response with a representation of the list of all topic resources (see Section <xref target="topic-resource-representation"/>) in the collection.</t>
          <t>Depending on the permission set each client <bcp14>MAY</bcp14> receive a different list of topics that they are authorized to read.</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> 0.01 GET
   Uri-Path: ps
   Uri-Path: tc

<= 2.05 Content
   Content-Format: 40 (application/link-format)
   </ps/tc/temperature>;rt="core.ps.conf",
   </ps/tc/humidity>;rt="core.ps.conf"
]]></artwork>
        </section>
        <section anchor="topic-get-properties">
          <name>Getting Topics by Properties</name>
          <!--
FETCH to /topic-collection with filter
retrieve only the topics that match the filter
request is cbor
response is link format
-->

<t>A client can filter a collection of topics by submitting the
representation of a topic filter (see Section <xref target="topic-fetch-resource"/>)  in a FETCH request to the topic collection URI.</t>
          <t>On success, the server returns a 2.05 (Content) response with a
representation of a list of topics in the collection (see
Section <xref target="topic-discovery"/>) that match the filter in CoRE link format <xref target="RFC6690"/>.</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> 0.05 FETCH
   Uri-Path: ps
   Uri-Path: tc
   Content-Format: TBD (application/pubsub+cbor)

   {
     "resource_type" : "core.ps.conf",
     "target_attribute" : "temperature"
   }

<= 2.05 Content
   Content-Format: 40 (application/link-format)
   </living_room_sensor>;anchor="coap://[2001:db8::2]/ps/tc/h9392",
   </kitchen_sensor>;anchor="coap://[2001:db8::2]/ps/tc/f3192"

]]></artwork>
        </section>
        <section anchor="topic-create">
          <name>Creating a Topic</name>
          <!--
POST to /topic-collection
create new topic
request is cbor
response (created) is cbor including the link to new topic-config resource
creator proposes topic name but broker approves
-->

<t>A client can add a new topic to a collection of topics by submitting a representation of the initial topic resource (see Section <xref target="topic-resource-representation"/>) in a POST request to the topic collection URI.</t>
          <t>On success, the server returns a 2.01 (Created) response indicating the topic URI of the new topic and the current representation of the topic resource.</t>
          <t>If a topic manager is present in the broker, the topic creation  may require manager approval subject to certain conditions. If the conditions are not fulfilled, the manager <bcp14>MUST</bcp14> respond with a 4.03 (Forbidden) error. The response <bcp14>MUST</bcp14> have Content-Format set to "application/core-pubsub+cbor".</t>
          <t>The broker <bcp14>MUST</bcp14> respond with a 4.00 (Bad Request) error if any received parameter is specified multiple times, invalid or not recognized.</t>
          <t>A CoAP endpoint creating a topic may specify a 'topic_data' URI different than that used by the broker. The broker may then simply forward the observation requests to the 'topic_data' URI.</t>
          <t>If the 'topic_data' is empty the broker will assign a resource for a publisher to publish to.</t>
          <artwork><![CDATA[
=> 0.02 POST
   Uri-Path: ps
   Uri-Path: tc
   Content-Format: TBD2 (application/core-pubsub+cbor)
   TBD (this should be a CBOR map with the mandatory parameters)
   {
     "topic_name" : "living_room_sensor"
     "resource_type" : "core.ps.conf"
   }

<= 2.01 Created
   Location-Path: ps/h9392
   Content-Format: TBD2 (application/core-pubsub+cbor)

   TBD (this should be a CBOR map)
   {
     "topic_name" : "living_room_sensor",
     "topic_data" : "coap://[2001:db8::2]/ps/data/6578616d706c65"
     "resource_type" : "core.ps.conf"
   }
]]></artwork>
        </section>
      </section>
      <section anchor="topic-resource-interactions">
        <name>Topic Resource Interactions</name>
        <t>These are the interactions that can happen at the topic resource level.</t>
        <section anchor="topic-get-resource">
          <name>Getting a topic resource</name>
          <!--
GET to /topic-config
retrieve a topic configuration
response is cbor
-->

<t>A client can read the configuration of a topic by making a GET request to the topic resource URI.</t>
          <t>On success, the server returns a 2.05 (Content) response with a representation of the topic resource. The response has as payload the representation of the topic resource as specified in <xref target="topic-resource-representation"/>.</t>
          <t>If a topic manager (TBD) is present in the broker, retrieving topic information may require manager approval subject to certain conditions (TBD). If the conditions are not fulfilled, the manager <bcp14>MUST</bcp14> respond with a 4.03 (Forbidden) error. The response <bcp14>MUST</bcp14> have Content-Format set to "application/core-pubsub+cbor".</t>
          <t>The response payload is a CBOR map, whose possible entries are specified in <xref target="topic-resource-representation"/> and use the same abbreviations defined in <xref target="pubsub-parameters"/>.</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> 0.01 GET
   Uri-Path: ps
   Uri-Path: tc
   Uri-Path: h9392

<= 2.05 Content
   Content-Format: TBD2 (application/core-pubsub+cbor)
   {
      "topic_name" : "living_room_sensor",
      "topic_data" : "coap://[2001:db8::2]/ps/data/6578616d706c65",
      "resource_type": "core.ps.conf",
      "media_type": "application/senml-cbor",
      "target_attribute": "temperature",
      "expiration_date": "",
      "max_subscribers": -1
   }

]]></artwork>
        </section>
        <section anchor="topic-fetch-resource">
          <name>Getting part of a topic resource by filter</name>
          <!--
FETCH to /topic-conf with filter
retrieve only certain parameters from the configuration
request is cbor
response is cbor
-->

<t>A client can read the configuration of a topic by making a FETCH request to the topic resource URI with a filter for specific parameters. This is done in order to retrieve part of the current topic resource.</t>
          <t>The request contains a CBOR map with a configuration filter or 'conf_filter', a CBOR array with CBOR abbreviation. Each element of the array specifies one requested configuration parameter of the current topic resource (see <xref target="topic-resource-representation"/>).</t>
          <t>On success, the server returns a 2.05 (Content) response with a representation of the topic resource. The response has as payload the partial representation of the topic resource as specified in <xref target="topic-resource-representation"/>.</t>
          <t>If a topic manager (TBD) is present in the broker, retrieving topic information may require manager approval subject to certain conditions (TBD). If the conditions are not fulfilled, the manager <bcp14>MUST</bcp14> respond with a 4.03 (Forbidden) error.</t>
          <t>The response payload is a CBOR map, whose possible entries are specified in <xref target="topic-resource-representation"/> and use the same abbreviations defined in <xref target="pubsub-parameters"/>.</t>
          <t>Both request and response <bcp14>MUST</bcp14> have Content-Format set to "application/core-pubsub+cbor".</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> 0.05 FETCH
   Uri-Path: ps
   Uri-Path: tc
   Uri-Path: h9392
   Content-Format: TBD2 (application/core-pubsub+cbor)
   {
     "conf_filter" : [topic_data, media_type]
   }

<= 2.05 Content
   Content-Format: TBD2 (application/core-pubsub+cbor)
   {
     "topic_data" : "coap://[2001:db8::2]/ps/data/6578616d706c65",
     "media_type": "application/senml-cbor"
   }

]]></artwork>
        </section>
        <section anchor="topic-update-resource">
          <name>Updating the Topic Resource</name>
          <!--
PUT to /topic-conf
override the whole configuration
request is cbor
response is cbor
-->

<t>A client can update the configuration of a topic by submitting the representation of the updated topic  (see Section 3.1.3) in a PUT or POST request to the topic URI. Any existing properties in the configuration are overwritten by this update.</t>
          <t>On success, the server returns a 2.04 (Changed) response and the current full resource representation. The broker may chose not to overwrite parameters that are not explicitly modified in the request.</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> 0.03 PUT
   Uri-Path: ps
   Uri-Path: tc
   Uri-Path: h9392
   Content-Format: TBD2 (application/core-pubsub+cbor)

   {
      "topic_name" : "living_room_sensor",
      "topic_data" : "coap://[2001:db8::2]/ps/data/6578616d706c65",
      "target_attribute": "temperature",
      "expiration_date": "2023-04-28T23:59:59Z",
      "max_subscribers": 2
   }

<= 2.04 Changed
   Content-Format: TBD2 (application/core-pubsub+cbor)

   TBD (this should be a CBOR map)
   {
      "topic_name" : "living_room_sensor",
      "topic_data" : "coap://[2001:db8::2]/ps/data/6578616d706c65",
      "resource_type": "core.ps.conf",
      "media_type": "application/senml-cbor",
      "target_attribute": "temperature",
      "expiration_date": "2023-04-28T23:59:59Z",
      "max_subscribers": 2
   }
]]></artwork>
        </section>
        <section anchor="topic-delete">
          <name>Deleting a Topic Resource</name>
          <t>A client can delete a topic by making a CoAP DELETE request on the topic resource URI.</t>
          <t>On success, the server returns a 2.02 (Deleted) response.</t>
          <t>When a topic resource is deleted, the broker <bcp14>SHOULD</bcp14> also delete the topic data resource, unsubscribe all subscribers by removing them from the list of observers and returning a final 4.04 (Not Found) response as per <xref target="RFC7641"/> Section 3.2.
Example:</t>
          <artwork><![CDATA[
=> 0.04 DELETE
   Uri-Path: ps
   Uri-Path: tc
   Uri-Path: h9392

<= 2.02 Deleted
]]></artwork>
        </section>
      </section>
      <section anchor="pubsub">
        <name>Publish/Subscribe</name>
        <t>Unless a topic is configured to use a different mechanism, publish/ subscribe is performed as follows: A publisher publishes to a topic by submitting the data in a PUT request to a broker-managed "topic data resource".  This causes a change to the state of that resources. Any subscriber observing the resource <xref target="RFC7641"/> at that time receives a notification about the change to the resource state. Observations are maintained and terminated as specified in <xref target="RFC7641"/>.</t>
        <t>As shown in <xref target="topics"/>, each topic contains two resources: topic resource and topic data. In that section we explained the creation and configuration of the topic resources. This section will explain the management of topic data resources.</t>
        <t>A topic data resource does not exist until some initial data has been published to it.  Before initial data has been published, the topic data resource yields a 4.04 (Not Found) response. If such a "half created" topic is undesired, the creator of the topic can simply immediately publish some initial placeholder data to make the topic "fully created".</t>
        <t>URIs for topic resources are broker-generated. URIs for topic-data <bcp14>MAY</bcp14> also be broker-generated or client-generated. There does not need to be any URI pattern dependence between the URI where the data exists and the URI of the topic resource. Topic resource and data resources might even be hosted on different servers.</t>
        <section anchor="topic-lifecycle">
          <name>Topic Lifecycle</name>
          <t>When a topic is newly created, it is first placed by the server into the HALF CREATED state (see <xref target="fig-life"/>).  In this state, a client can read and update the configuration of the topic and delete the topic. A publisher can publish to the topic data resource.  However, a subscriber cannot yet observe the topic data resource nor read the latest data.</t>
          <figure anchor="fig-life">
            <name>Lifecycle of a Topic</name>
            <artwork align="center"><![CDATA[
                HALF                       FULLY
              CREATED       Delete        CREATED
                ___       Topic Data        ___     Publish
------------>  |   |  <------------------  |   |  ------------.
    Create     |___|  ------------------>  |___|  <-----------'
                     \      Publish      /         Subscribe
                | ^   \       ___       /   | ^
          Read/ | |    '-->  |   |  <--'    | | Read/
         Update | |  Delete  |___|  Delete  | | Update
                '-'  Topic          Topic   '-'
                            DELETED
]]></artwork>
          </figure>
          <t>After a publisher publishes to the topic for the first time, the topic is placed into the FULLY CREATED state. In this state, a client can read, update and delete the topic; a publisher can publish to the topic data resource; and a subscriber can observe the topic data resource.</t>
          <t>When a client deletes a topic resource, the topic is placed into the DELETED state and shortly after removed from the server. In this state, all subscribers are removed from the list of observers of the topic data resource and no further interactions with the topic are possible.</t>
          <t>When a client deletes a topic data, the topic is placed into the HALF CREATED state, where clients can read, update and delete the topic and awaits for a publisher to begin publication.</t>
        </section>
        <section anchor="rate-limit">
          <name>Rate Limiting</name>
          <t>The server hosting a data resource may have to handle a potentially very large number of publishers and subscribers at the same time. This means the server can easily become overwhelmed if it receives too many publications in a short period of time.</t>
          <t>In this situation, if a client is sending publications too fast, the server <bcp14>SHOULD</bcp14> return a 4.29 (Too Many Requests) response <xref target="RFC8516"/>.  As described in <xref target="RFC8516"/>, the Max-Age option <xref target="RFC7252"/> in this response indicates the number of seconds after which the client may retry. The Broker <bcp14>MAY</bcp14> stop publishing messages from the client for the indicated time.</t>
          <t>When a client receives a 4.29 (Too Many Requests) response, it <bcp14>MUST NOT</bcp14> send any new publication requests to the same topic data resource before the time indicated by the Max-Age option has passed.</t>
        </section>
      </section>
      <section anchor="topic-data-interactions">
        <name>Topic Data Interactions</name>
        <t>TBD: intro and image that shows a topic data URI hosted in a different endpoint than the broker</t>
        <section anchor="publish">
          <name>Publish</name>
          <t>A topic must have been created in order to publish data to it (See Section <xref target="topic-create"/>) and be in the half-created state in order to the publish operation to work (see <xref target="topic-lifecycle"/>).</t>
          <t>A client can publish data to a topic by submitting the data in a PUT request to the 'topic_data' URI as indicated in its topic resource property. Please note that the 'topic_data' URI is not the same as the topic URI used for configuring the topic (see <xref target="topic-resource-representation"/>).</t>
          <t>On success, the server returns a 2.04 (Updated) response. However, when data is published to the topic for the first time, the server instead <bcp14>MUST</bcp14> return a 2.01 (Created) response and set the topic in the fully-created state (see <xref target="topic-lifecycle"/>).</t>
          <t>If the request does not have an acceptable content format, the server returns a 4.15 (Unsupported Content Format) response.</t>
          <t>If the client is sending publications too fast, the server returns a
4.29 (Too Many Requests) response <xref target="RFC8516"/>.</t>
          <t>Example of first publication:</t>
          <artwork><![CDATA[
=> 0.03 PUT
   Uri-Path: ps
   Uri-Path: data
   Uri-Path: 6578616d706c65
   Content-Format: 110

   {
      "n": "temperature",
      "u": "Cel",
      "t": 1621452122,
      "v": 23.5
   }

<= 2.01 Created
]]></artwork>
          <t>Example of subsequent publication:</t>
          <artwork><![CDATA[
=> 0.03 PUT
   Uri-Path: ps
   Uri-Path: data
   Uri-Path: 6578616d706c65
   Content-Format: 110

   {
      "n": "temperature",
      "u": "Cel",
      "t": 182734122,
      "v": 22.5
   }

<= 2.04 Updated
]]></artwork>
        </section>
        <section anchor="subscribe">
          <name>Subscribe</name>
          <t>A client can subscribe to a topic by sending a CoAP GET request with the Observe set to '0' to subscribe to resource updates. <xref target="RFC7641"/>.</t>
          <t>On success, the broker <bcp14>MUST</bcp14> return 2.05 (Content) notifications with the data.</t>
          <t>If the topic is not yet in the fully created state (see <xref target="topic-lifecycle"/>) the broker <bcp14>SHOULD</bcp14> return a response code 4.04 (Not Found).</t>
          <t>The following response codes are defined for the Subscribe operation:</t>
          <dl>
            <dt>Success:</dt>
            <dd>
              <t>2.05 "Content". Successful subscribe with observe response, current value included in the response.</t>
            </dd>
            <dt>Failure:</dt>
            <dd>
              <t>4.04 "Not Found". Topic does not exist.</t>
            </dd>
          </dl>
          <t>TBD: Do we want to treat max_clients as an error?</t>
          <t>If the 'max_clients' parameter has been reached, the server must treat that as specified in section 4.1 of <xref target="RFC7641"/>. The response <bcp14>MUST NOT</bcp14> include an Observe Option, the absence of which signals to the subscriber that the subscription failed.</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> 0.01 GET
   Uri-Path: ps
   Uri-Path: data
   Uri-Path: 6578616d706c65
   Observe: 0

<= 2.05 Content
   Content-Format: 110
   Observe: 10001
   Max-Age: 15

   [...SenML data...]

<= 2.05 Content
   Content-Format: 110
   Observe: 10002
   Max-Age: 15

   [...SenML data...]

<= 2.05 Content
   Content-Format: 110
   Observe: 10003
   Max-Age: 15

   [...SenML data...]
]]></artwork>
        </section>
        <section anchor="unsubscribe">
          <name>Unsubscribe</name>
          <t>A CoAP client can unsubscribe simply by cancelling the observation as described in Section 3.6 of <xref target="RFC7641"/>. The client <bcp14>MUST</bcp14> either use CoAP GET with the Observe Option set to 1 or send a CoAP Reset message in response to a notification.</t>
        </section>
        <section anchor="delete-topic-data">
          <name>Delete topic data resource</name>
          <t>A publisher <bcp14>MAY</bcp14> delete a topic by making a CoAP DELETE request on the 'topic_data' URI.</t>
          <t>On success, the server returns a 2.02 (Deleted) response.</t>
          <t>When a topic_data resource is deleted, the broker <bcp14>SHOULD</bcp14> also delete the 'topic_data' parameter in the topic resource, unsubscribe all subscribers by removing them from the list of observers and return a final 4.04 (Not Found) response as per <xref target="RFC7641"/> Section 3.2. The topic is then set back to the half created state as per <xref target="topic-lifecycle"/>.</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> 0.04 DELETE
   Uri-Path: ps
   Uri-Path: data
   Uri-Path: 6578616d706c65

<= 2.02 Deleted
]]></artwork>
        </section>
        <section anchor="read-data">
          <name>Read latest data</name>
          <t>A client can get the latest published topic data by making a GET request to the 'topic_data' URI in the broker. Please note that discovery of the 'topic_data' parameter is a required previous step (see <xref target="topic-get-resource"/>).</t>
          <t>On success, the server <bcp14>MUST</bcp14> return 2.05 (Content) response with the data.</t>
          <t>If the target URI does not match an existing resource or the topic is not in the fully created state (see <xref target="topic-lifecycle"/>), the broker <bcp14>SHOULD</bcp14> return a response code 4.04 (Not Found).</t>
          <t>If the broker can not return the requested content format it <bcp14>MUST</bcp14> return a response code 4.15 (Unsupported Content Format).</t>
          <t>Example:</t>
          <artwork><![CDATA[
=> 0.01 GET
   Uri-Path: ps
   Uri-Path: data
   Uri-Path: 6578616d706c65

<= 2.05 Content
   Content-Format: 110
   Max-Age: 15

   {
      "n": "temperature",
      "u": "Cel",
      "t": 1621452122,
      "v": 23.5
   }
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="pubsub-parameters">
      <name>CoAP Pubsub Parameters</name>
      <t>This document defines parameters used in the messages exchanged between a client and the broker during the topic creation and configuration process (see <xref target="topic-resource-representation"/>). The table below summarizes them and specifies the CBOR key to use instead of the full descriptive name.</t>
      <t>Note that the media type application/core-pubsub+cbor <bcp14>MUST</bcp14> be used when these parameters are transported in the respective message fields.</t>
      <figure anchor="fig-CoAP-Pubsub-Parameters">
        <name>CoAP Pubsub Parameters</name>
        <artwork align="center"><![CDATA[
+-----------------+-----------+--------------+------------+
| Name            | CBOR Key  | CBOR Type    | Reference  |
|-----------------|-----------|--------------|------------|
| topic_name      | TBD1      | tstr         | [RFC-XXXX] |
| topic_data      | TBD2      | tstr         | [RFC-XXXX] |
| resource_type   | TBD3      | tstr         | [RFC-XXXX] |
| media_type      | TBD4      | tstr (opt)   | [RFC-XXXX] |
| target_attribute| TBD5      | tstr (opt)   | [RFC-XXXX] |
| expiration_date | TBD6      | tstr (opt)   | [RFC-XXXX] |
| max_subscribers | TBD7      | uint (opt)   | [RFC-XXXX] |
+-----------------+-----------+--------------+------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <!-- TBD: we may take content from prev versions but we have to spend some more time on the implications of the topic-config -->
<t>TBD.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TBD.</t>
      <t>This document registers one attribute value in the Resource Type (rt=) registry
established with <xref target="RFC6690"/> and appends to the definition of one CoAP Response Code in the CoRE Parameters Registry.</t>
      <!-- TBD: Redo this section. Need to add the ct and rt similar to the ones below

https://www.ietf.org/archive/id/draft-ietf-ace-oscore-gm-admin-07.html#name-resource-types

https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-16.html#section-11.1

https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-16.html#section-11.2 -->

<section anchor="resource-type-value-coreps">
        <name>Resource Type value 'core.ps'</name>
        <ul spacing="normal">
          <li>Attribute Value: core.ps</li>
          <li>Description: XXX of This document</li>
          <li>Reference: This document</li>
          <li>Notes: None</li>
        </ul>
      </section>
      <section anchor="resource-type-value-corepscoll">
        <name>Resource Type value 'core.ps.coll'</name>
        <ul spacing="normal">
          <li>Attribute Value: core.ps.coll</li>
          <li>Description: XXX of This document</li>
          <li>Reference: This document</li>
          <li>Notes: None</li>
        </ul>
      </section>
      <section anchor="resource-type-value-corepsconf">
        <name>Resource Type value 'core.ps.conf'</name>
        <ul spacing="normal">
          <li>Attribute Value: core.ps.conf</li>
          <li>Description: XXX of This document</li>
          <li>Reference: This document</li>
          <li>Notes: None</li>
        </ul>
      </section>
      <section anchor="resource-type-value-corepsdata">
        <name>Resource Type value 'core.ps.data'</name>
        <ul spacing="normal">
          <li>Attribute Value: core.ps.data</li>
          <li>Description: XXX of This document</li>
          <li>Reference: This document</li>
          <li>Notes: None</li>
        </ul>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The current version of this document contains a substantial contribution by Klaus Hartke's proposal <xref target="I-D.hartke-t2trg-coral-pubsub"/>, which defines the topic resource model and structure as well as the topic lifecycle and interactions. It also follows a similar architectural design as that provided by Marco Tiloca's <xref target="I-D.ietf-ace-oscore-gm-admin"/>.</t>
      <t>The authors would like to also thank Carsten Bormann, Hannes Tschofenig, Zach Shelby, Mohit Sethi, Peter van der Stok, Tim Kellogg, Anders Eriksson, Goran Selander, Mikko Majanen, and Olaf Bergmann for their valuable contributions and reviews.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Hadley" initials="M." surname="Hadley">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="D. Orchard" initials="D." surname="Orchard">
              <organization/>
            </author>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links.  Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type.  "RESTful" refers to the Representational State Transfer (REST) architecture.  A well-known URI is defined as a default entry point for requesting the links hosted by a server.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="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="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="RFC8516">
          <front>
            <title>"Too Many Requests" Response Code for the Constrained Application Protocol</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen">
              <organization/>
            </author>
            <date month="January" year="2019"/>
            <abstract>
              <t>A Constrained Application Protocol (CoAP) server can experience temporary overload because one or more clients are sending requests to the server at a higher rate than the server is capable or willing to handle.  This document defines a new CoAP response code for a server to indicate that a client should reduce the rate of requests.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8516"/>
          <seriesInfo name="DOI" value="10.17487/RFC8516"/>
        </reference>
        <reference anchor="RFC9167">
          <front>
            <title>Registry Maintenance Notification for the Extensible Provisioning Protocol (EPP)</title>
            <author fullname="T. Sattler" initials="T." surname="Sattler">
              <organization/>
            </author>
            <author fullname="R. Carney" initials="R." surname="Carney">
              <organization/>
            </author>
            <author fullname="J. Kolker" initials="J." surname="Kolker">
              <organization/>
            </author>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document describes an Extensible Provisioning Protocol (EPP) extension called "Registry Maintenance Notification", which is used by EPP servers to notify EPP clients and allow EPP clients to query EPP servers regarding maintenance events.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9167"/>
          <seriesInfo name="DOI" value="10.17487/RFC9167"/>
        </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">
              <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">
          <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="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="I-D.hartke-t2trg-coral-pubsub">
          <front>
            <title>Publish/Subscribe over the Constrained Application Protocol (CoAP) using the Constrained RESTful Application Language (CoRAL)</title>
            <author fullname="Klaus Hartke" initials="K." surname="Hartke">
              <organization>Ericsson</organization>
            </author>
            <date day="9" month="May" year="2020"/>
            <abstract>
              <t>   This document explores how the Constrained RESTful Application
   Language (CoRAL) might be used for enabling publish/subscribe-style
   communication over the Constrained Application Protocol (CoAP), which
   allows CoAP nodes with long breaks in connectivity and/or up-time to
   exchange data via a publish/subscribe broker.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hartke-t2trg-coral-pubsub-01"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-gm-admin">
          <front>
            <title>Admin Interface for the OSCORE Group Manager</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
              <organization>Consultant</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   Group communication for CoAP can be secured using Group Object
   Security for Constrained RESTful Environments (Group OSCORE).  A
   Group Manager is responsible to handle the joining of new group
   members, as well as to manage and distribute the group keying
   material.  This document defines a RESTful admin interface at the
   Group Manager, that allows an Administrator entity to create and
   delete OSCORE groups, as well as to retrieve and update their
   configuration.  The ACE framework for Authentication and
   Authorization is used to enforce authentication and authorization of
   the Administrator at the Group Manager.  Protocol-specific transport
   profiles of ACE are used to achieve communication security, proof-of-
   possession and server authentication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-gm-admin-08"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
0HuSAAA=

-->

</rfc>
