Skip to main content

RESTCONF and HTTP Transport for Event Notifications
draft-ietf-netconf-restconf-notif-04

The information below is for an old version of the document.
Document Type
This is an older version of an Internet-Draft that was ultimately published as RFC 8650.
Authors Eric Voit , Ambika Tripathy , Einar Nilsen-Nygaard , Alexander Clemm , Alberto Gonzalez Prieto , Andy Bierman
Last updated 2018-01-31
Replaces draft-voit-netconf-restconf-notif
RFC stream Internet Engineering Task Force (IETF)
Formats
Reviews
Additional resources Mailing list discussion
Stream WG state WG Document
Document shepherd (None)
IESG IESG state Became RFC 8650 (Proposed Standard)
Consensus boilerplate Unknown
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-ietf-netconf-restconf-notif-04
NETCONF                                                          E. Voit
Internet-Draft                                               A. Tripathy
Intended status: Standards Track                       E. Nilsen-Nygaard
Expires: August 4, 2018                                    Cisco Systems
                                                                A. Clemm
                                                                  Huawei
                                                      A. Gonzalez Prieto
                                                                  VMWare
                                                              A. Bierman
                                                               YumaWorks
                                                        January 31, 2018

          RESTCONF and HTTP Transport for Event Notifications
                  draft-ietf-netconf-restconf-notif-04

Abstract

   This document defines RESTCONF, HTTP2, and HTTP1.1 bindings for the
   transport of subscription requests and corresponding push updates.
   Being subscribed may be either publisher defined event streams or
   nodes/subtrees of YANG Datastores.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on August 4, 2018.

Copyright Notice

   Copyright (c) 2018 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of

Voit, et al.             Expires August 4, 2018                 [Page 1]
Internet-Draft               RESTCONF-Notif                 January 2018

   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   3
   3.  Solution  . . . . . . . . . . . . . . . . . . . . . . . . . .   3
     3.1.  Dynamic YANG Subscription with RESTCONF control . . . . .   3
   4.  Mandatory JSON and datastore support  . . . . . . . . . . . .   6
   5.  Notification Messages . . . . . . . . . . . . . . . . . . . .   7
   6.  Security Considerations . . . . . . . . . . . . . . . . . . .   7
   7.  Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .   7
   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   7
     8.1.  Normative References  . . . . . . . . . . . . . . . . . .   7
     8.2.  Informative References  . . . . . . . . . . . . . . . . .   8
   Appendix A.  End-to-End Deployment Guidance . . . . . . . . . . .   9
     A.1.  Call Home . . . . . . . . . . . . . . . . . . . . . . . .   9
     A.2.  TLS Heartbeat . . . . . . . . . . . . . . . . . . . . . .   9
   Appendix B.  RESTCONF over GRPC . . . . . . . . . . . . . . . . .   9
   Appendix C.  Encoded Subscription and Notification Message
                Examples . . . . . . . . . . . . . . . . . . . . . .  10
     C.1.  RESTCONF Subscription and Events over HTTP1.1 . . . . . .  10
     C.2.  Event Notification over HTTP2 . . . . . . . . . . . . . .  14
   Appendix D.  Changes between revisions  . . . . . . . . . . . . .  14
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  15

1.  Introduction

   Mechanisms to support event subscription and push are defined in
   [I-D.draft-ietf-netconf-subscribed-notifications].  Enhancements to
   [I-D.draft-ietf-netconf-subscribed-notifications] which enable YANG
   Datastore subscription and push are defined in
   [I-D.ietf-netconf-yang-push].  This document provides a transport
   specification for these protocols over RESTCONF and HTTP.  Driving
   these requirements is [RFC7923].

   The streaming of notifications encapsulating the resulting
   information push can be done with either HTTP1.1 and HTTP2.  When
   using HTTP2 [RFC7540] benefits which can be realized include:

   o  Elimination of head-of-line blocking

Voit, et al.             Expires August 4, 2018                 [Page 2]
quot;Organizer",
making it easy to separate a calendar user organizing a meeting from
calendar users attending the meeting. Additionally, iCalendar provides
descriptive roles for each "Attendee". For instance, a role of "chair"
may be ascribed to one or more "Attendees". The "chair" and the
"Organizer" may or may not be the same calendar user. This maps well to
scenarios where an assistant may manage meeting logistics for another
individual who chairs a meeting.

Second, a "sent-by" parameter may be specified in either the "Organizer"
or "Attendee" properties. When specified, the "sent-by" parameter
indicates that the responding CU acted on behalf of the specified
"Attendee" or "Organizer".

2.1.4     Component Revisions

The "SEQUENCE" property is used by the "Organizer" to indicate revisions
to the calendar component. The rules for incrementing the "SEQUENCE"
number are defined in [iCAL]. For clarity, these rules are paraphrased

Silverberg/Mansour/Dawson/Hopson   - 9 -             Expires March 1999


Internet Draft                iTIP                   September 15, 1998

here in terms of how they are applied in [iTIP]. For a given "UID" in a
calendar component:

. For the "PUBLISH" and "REQUEST" methods, the "SEQUENCE" property
  value is incremented according to the rules defined in [iCAL].

. The "SEQUENCE" property value MUST be incremented each time the
  "Organizer" uses the "ADD" or "CANCEL" methods.

. The "SEQUENCE" property value MUST NOT be incremented when using
  "REPLY", "REFRESH", "COUNTER", "DECLINECOUNTER", or when sending a
  delegation "REQUEST".

In some circumstances the "Organizer" may not have received responses to
the final revision sent out. In this situation, the "Organizer" may wish
to send an update "REQUEST", and set "RSVP=TRUE" for all "Attendees", so
that current responses can be collected.

The value of the "SEQUENCE" property contained in a response from an
"Attendee" may not always match the "Organizer's" revision.
Implementations may choose to have the CUA indicate to the CU that the
response is to an entry that has been revised and allow the CU to decide
whether or not to accept the response.

2.1.5     Message Sequencing

CUAs that handle the [iTIP] application protocol must often correlate a
component in a calendar store with a component received in the [iTIP]
message. For example, an event may be updated with a later revision of
the same event. To accomplish this, a CUA must correlate the version of
the event already in its calendar store with the version sent in the
[iTIP] message. In addition to this correlation, there are several
factors that can cause [iTIP] messages to arrive in an unexpected order.
That is, an "Organizer" could receive a reply to an earlier revision of
a component AFTER receiving a reply to a later revision.

To maximize interoperability and to handle messages that arrive in an
unexpected order, use the following rules:

1.   The primary key for referencing a particular iCalendar component is
  the "UID" property value. To reference an instance of a recurring
  component, the primary key is composed of the "UID" and the
  "RECURRENCE-ID" properties.

2.   The secondary key for referencing a component is the "SEQUENCE"
  property value.  For components where the "UID" is the same, the
  component with the highest numeric value for the "SEQUENCE" property
  obsoletes all other revisions of the component with lower values.

3.   "Attendees" send "REPLY" messages to the "Organizer".  For replies
  where the "UID" property value is the same, the value of the
  "SEQUENCE" property indicates the revision of the component to which

Silverberg/Mansour/Dawson/Hopson   - 10 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

  the "Attendee" is replying.  The reply with the highest numeric value
  for the "SEQUENCE" property obsoletes all other replies with lower
  values.

4.   In situations where the "UID" and "SEQUENCE" properties match, the
  "DTSTAMP" property is used as the tie-breaker. The component with the
  latest "DTSTAMP" overrides all others. Similarly, for "Attendee"
  responses where the "UID" property values match and the "SEQUENCE"
  property values match, the response with the latest "DTSTAMP"
  overrides all others.

Hence, CUAs must persist the following component properties: "UID",
"RECURRENCE-ID", "SEQUENCE", and "DTSTAMP".  Furthermore, for each
"ATTENDEE" property of a component CUAs must persist the "SEQUENCE" and
"DTSTAMP" property values associated with the "Attendee's" response.

3 Application Protocol Elements

ITIP messages are "text/calendar" MIME entities that contain calendaring
and scheduling information. The particular type of [iCAL] message is
referred to as the "method type". Each method type is identified by a
"METHOD&Internet-Draft               RESTCONF-Notif                 January 2018

   o  Weighting and proportional dequeuing of Events from different
      subscriptions

   o  Explicit precedence in subscriptions so that events from one
      subscription must be sent before another dequeues

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [RFC2119].

   The following terms use the definitions from
   [I-D.draft-ietf-netconf-subscribed-notifications]: configured
   subscription, dynamic subscription, notification message, publisher,
   receiver, subscriber, and subscription.

3.  Solution

   Subscribing to event streams is defined in
   [I-D.draft-ietf-netconf-subscribed-notifications], YANG Datastore
   subscription is defined in [I-D.ietf-netconf-yang-push].  This
   section specifies transport mechanisms applicable to both.

3.1.  Dynamic YANG Subscription with RESTCONF control

   Dynamic subscriptions for both
   [I-D.draft-ietf-netconf-subscribed-notifications] and its
   [I-D.ietf-netconf-yang-push] augmentations are configured and managed
   via signaling messages transported over [RFC8040].  These
   interactions will be accomplished via a RESTCONF POST into RPCs
   located on the publisher.  HTTP responses codes will indicate the
   results of the interaction with the publisher.  An HTTP status code
   of 200 is the proper response to a successful <establish-
   subscription> RPC call.  The successful <establish-subscription> will
   result in a HTTP message with returned subscription URI on a
   logically separate mechanism than was used for the original RESTCONF
   POST.  This mechanism is via a parallel TCP connection in the case of
   HTTP 1.x, or in the case of HTTP2 via a separate HTTP stream within
   the HTTP connection.  When a being returned by the publisher, failure
   will be indicated by 4xx range status codes transported in payload.
   Anytime hints are returned from the publisher status code 412 is used
   with the error-tag "operation-failed".

   Once established, the resulting stream of notification messages are
   then delivered via SSE for HTTP1.1 and via an HTTP2 DATA frame for
   HTTP2.

Voit, et al.             Expires August 4, 2018                 [Page 3]
Internet-Draft               RESTCONF-Notif                 January 2018

3.1.1.  Call Flow for HTTP2

   Requests to [I-D.draft-ietf-netconf-subscribed-notifications] or
   [I-D.ietf-netconf-yang-push] augmented RPCs are sent on one or more
   HTTP2 streams indicated by (a) in Figure 2.  Notification messages
   related to a single subscription are pushed on a unique logical
   channel (b).  In the case below, a newly established subscription has
   its associated messages pushed over HTTP2 stream (7).

   +------------+                                 +------------+
   | Subscriber |                                 | Publisher  |
   |HTTP2 Stream|                                 |HTTP2 Stream|
   |  (a)  (b)  |                                 |  (a)  (b)  |
   +------------+                                 +------------+
       | RESTCONF POST (RPC:establish-subscription)   |
       |--------------------------------------------->|
       |                             HTTP 200 OK (URI)|
       |<---------------------------------------------|
       |   (7)HTTP POST (URI)                             (7)
       |    |--------------------------------------------->|
       |    |                                   HTTP 200 OK|
       |    |<---------------------------------------------|
       |    |                       HTTP Data (event-notif)|
       |    |<---------------------------------------------|
       | RESTCONF POST (RPC:modify-subscription)      |    |
       |--------------------------------------------->|    |
       |    |                              HTTP 200 OK|    |
       |<---------------------------------------------|    |
       |    |             HTTP Data (subscription-modified)|
       |    |<---------------------------------------------|
       |    |                       HTTP Data (event-notif)|
       |    |<---------------------------------------------|
       | RESTCONF POST (RPC:delete-subscription)      |    |
       |--------------------------------------------->|    |
       |    |                              HTTP 200 OK|    |
       |<---------------------------------------------|    |
       |    |                  HTTP Headers (end of stream)|
       |   (/7)<-----------------------------------------(/7)
       |

                       Figure 1: Dynamic with HTTP2

3.1.2.  Call flow for HTTP1.1

   Requests to [I-D.ietf-netconf-yang-push] RPCs are sent on the TCP
   connection indicated by (a).  Notification messages are pushed on a
   separate connection (b).  This connection (b) will be used for all
   notification messages across all subscriptions.

Voit, et al.             Expires August 4, 2018                 [Page 4]
Internet-Draft               RESTCONF-Notif                 January 2018

   +--------------+                             +--------------+
   |  Subscriber  |                             |   Publisher  |
   |TCP connection|                             |TCP connection|
   |  (a)  (b)    |                             |    (a)  (b)  |
   +--------------+                             +--------------+
       | RESTCONF POST (RPC:establish-subscription)   |
       |--------------------------------------------->|
       |                             HTTP 200 OK (URI)|
       |<---------------------------------------------|
       |    |HTTP GET (URI)                                |
       |    |--------------------------------------------->|
       |    |                                   HTTP 200 OK|
       |    |<---------------------------------------------|
       |    |                             SSE (event-notif)|
       |    |<---------------------------------------------|
       | RESTCONF POST (RPC:modify-subscription)      |    |
       |--------------------------------------------->|    |
       |    |                              HTTP 200 OK|    |
       |<---------------------------------------------|    |
       |    |                   SSE (subscription-modified)|
       |    |<---------------------------------------------|
       |    |                             SSE (event-notif)|
       |    |<---------------------------------------------|
       | RESTCONF POST (RPC:delete-subscription)      |    |
       |--------------------------------------------->|    |
       |    |                              HTTP 200 OK|    |
       |<---------------------------------------------|    |
       |    |                                              |
       |    |

                      Figure 2: Dynamic with HTTP1.1

3.1.3.  Configured Subscription over HTTP2

   With a configured subscription, all information needed to establish a
   secure relationship with that receiver is available on the publisher.
   With this information, the publisher will establish a secure
   transport connection with the receiver and then begin pushing
   notification messages to the receiver.  Since RESTCONF might not
   exist on the receiver, it is not desirable to require that subscribed
   content be pushed with any dependency on RESTCONF.  Therefore in
   place of RESTCONF, a TLS secured HTTP2 Client connection must be
   established with an HTTP2 Server located on the receiver.
   Notification messages will then be sent as part of an extended HTTP
   POST to the receiver.

   POST messages will be addressed to HTTP augmentation code on the
   receiver capable of accepting and responding to state change

Voit, et al.             Expires August 4, 2018                 [Page 5]
Internet-Draft               RESTCONF-Notif                 January 2018quot; property specified as part of the "text/calendar" content type.
The table below shows various combinations of calendar components and
the method types that this memo supports.

+=================================================+
|         | VEVENT | VTODO | VJOURNAL | VFREEBUSY |
|=================================================|
|Publish  |  Yes   |  Yes  |  Yes     |   Yes     |
|Request  |  Yes   |  Yes  |  No      |   Yes     |
|Refresh  |  Yes   |  Yes  |  No      |   No      |
|Cancel   |  Yes   |  Yes  |  Yes     |   No      |
|Add      |  Yes   |  Yes  |  Yes     |   No      |
|Reply    |  Yes   |  Yes  |  No      |   Yes     |
|Counter  |  Yes   |  Yes  |  No      |   No      |
|Decline- |        |       |          |           |
|Counter  |  Yes   |  Yes  |  No      |   No      |
+=================================================+

Each method type is defined in terms of its associated components and
properties. Some components and properties are required, some are
optional and others are excluded. The restrictions are expressed in this
document using a simple "restriction table". The first column indicates
the name of a component or property. Properties of the iCalendar object
are not indented. Properties of a component are indented. The second
column contains "MUST" if the component or property must be present,
"MAY" if the component or property is optional, and "NOT" if the
component or property must not be present. Entries in the second column
sometimes contain comments for further clarification.

Silverberg/Mansour/Dawson/Hopson   - 11 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

3.1 Common Component Restriction Tables

The restriction table below applies to properties of the iCalendar
object. That is, the properties at the outermost scope. The presence
column uses the following values to assert whether a property is
required, is optional and the number of times it may appear in the
iCalendar object.

Presence Value       Description
--------------------------------------------------------------
1                 One instance MUST be present
1+                At least one instance MUST be present
0                 Instances of this property Must NOT be present
0+                Multiple instances MAY be present
0 or 1            Up to 1 instance of this property MAY be present
---------------------------------------------------------------

The tables also call out "X-PROPERTY" and  "X-COMPONENT" to show where
vendor-specific properties and components can appear.  The tables do not
lay out the restrictions of property parameters. Those restrictions are
defined in [iCAL].

Component/Property  Presence
------------------- ----------------------------------------------
CALSCALE            0 or 1
PRODID              1
VERSION             1       Value MUST be "2.0"
X-PROPERTY          0+

DateTime values MAY refer to a "VTIMEZONE" component. The property
restrictions in the table below apply to any "VTIMEZONE" component in an
ITIP message.

Component/Property  Presence
------------------- ----------------------------------------------
VTIMEZONE           0+      MUST be present if any date/time refers to
                            timezone
    DAYLIGHT        0+      MUST be one or more of either STANDARD or
                            DAYLIGHT
       COMMENT      0 or 1
       DTSTART      1       MUST be local time format
       RDATE        0+      if present RRULE MUST NOT be present
       RRULE        0+      if present RDATE MUST NOT be present
       TZNAME       0 or 1
       TZOFFSET     1
       TZOFFSETFROM 1
       TZOFFSETTO   1
       X-PROPERTY   0+
    LAST-MODIFIED   0 or 1
    STANDARD        0+      MUST be one or more of either STANDARD or
                            DAYLIGHT
       COMMENT      0 or 1

Silverberg/Mansour/Dawson/Hopson   - 12 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

       DTSTART      1       MUST be local time format
       RDATE        0+      if present RRULE MUST NOT be present
       RRULE        0+      if present RDATE MUST NOT be present
       TZNAME       0 or 1
       TZOFFSETFROM 1
       TZOFFSETTO   1
       X-PROPERTY   0+
    TZID            1
    TZURL           0 or 1
    X-PROPERTY      0+

The property restrictions in the table below apply to any "VALARM"
component in an ITIP message.

Component/Property  Presence
------------------- ----------------------------------------------
VALARM              0+
    ACTION          1
    ATTACH          0+
    DESCRIPTION     0 or 1
    DURATION        0 or 1  if present REPEAT MUST be present
    REPEAT          0 or 1  if present DURATION MUST be present
    SUMMARY         0 or 1
    TRIGGER         1
    X-PROPERTY      0+

3.2 Methods for VEVENT Calendar Components

This section defines the property set restrictions for the method types
that are applicable to the "VEVENT" calendar component. Each method is
defined using a table that clarifies the property constraints that
define the particular method.

The following summarizes the methods that are defined for the "VEVENT"
calendar component.

+================+==================================================+
| Method         |  Description                                     |
|================+==================================================|
| PUBLISH        | Post notification of an event. Used primarily as |
|                | a method of advertising the existence of an      |
|                | event.                                           |
|                |                                                  |
| REQUEST        | Make a request for an event. This is an explicit |
|                | invitation to one or more "Attendees". Event     |
|                | Requests are also used to update or change an    |
|                | existing event. Clients that cannot handle       |
|                | REQUEST may degrade the event to view it as an   |
|                | PUBLISH.                                         |
|                |                                                  |
| REPLY          | Reply to an event request. Clients may set their |
|                | status ("partstat") to ACCEPTED, DECLINED,        |

Silverberg/Mansour/Dawson/Hopson   - 13 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

|                | TENTATIVE, or DELEGATED.                         |
|                |                                                  |
| ADD            | Add one or more instances to an existing event.  |
|                |                                                  |
| CANCEL         | Cancel one or more instances of an existing      |
|                | event.                                           |
|                |                                                  |
| REFRESH        | A request is sent to an "Organizer" by an        |
|                | "Attendee" asking for the latest version of an   |
|                | event to be resent to the requester.             |
|                |                                                  |
| COUNTER        | Counter a REQUEST with an alternative proposal,  |
|                | Sent by an "Attendee" to the "Organizer".        |
|                |                                                  |
| DECLINECOUNTER | Decline a counter proposal. Sent to an           |
|                | "Attendee" by the "Organizer".                   |
+================+==================================================+

3.2.1     PUBLISH

The "PUBLISH" method in a "VEVENT" calendar component is an unsolicited
posting of an iCalendar object. Any CU may add published components to
their calendar. The "Organizer" MUST be present in a published iCalendar
component. "Attendees" MUST NOT be present. Its expected usage is for
encapsulating an arbitrary event as an iCalendar object. The "Organizer"
may subsequently update (with another "PUBLISH" method), add instances
to (with an "ADD" method), or cancel (with a "CANCEL" method) a
previously published "VEVENT" calendar component.

This method type is an iCalendar object that conforms to the following
property constraints:

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1       MUST equal "PUBLISH"
VEVENT              1+
     DTSTAMP        1
     DTSTART        1
     ORGANIZER      1
     SUMMARY        1       Can be null.
     UID            1
     RECURRENCE-ID  0 or 1  only if referring to an instance of a
                            recurring calendar component.  Otherwise it
                            MUST NOT be present.
     SEQUENCE       0 or 1  MUST be present if value is greater than 0,
                            MAY be present if 0
     ATTACH         0+
     CATEGORIES     0 or 1  This property may contain a list of values
     CLASS          0 or 1
     COMMENT        0 or 1
     CONTACT        0+
     CREATED        0 or 1
     DESCRIPTION    0 or 1  Can be null

Silverberg/Mansour/Dawson/Hopson   - 14 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

     DTEND          0 or 1  if present DURATION MUST NOT be present
     DURATION       0 or 1  if present DTEND MUST NOT be present
     EXDATE         0+
     EXRULE         0+
     GEO            0 or 1
     LAST-MODIFIED  0 or 1
     LOCATION       0 or 1
     PRIORITY       0 or 1
     RDATE          0+
     RELATED-TO     0+
     RESOURCES      0 or 1 This property MAY contain a list of values
     RRULE          0+
     STATUS         0 or 1 MAY be one of TENTATIVE/CONFIRMED/CANCELLED
     TRANSP         0 or 1
     URL            0 or 1
     X-PROPERTY     0+

     ATTENDEE       0
     REQUEST-STATUS 0

VALARM              0+
VFREEBUSY           0
VJOURNAL            0
VTODO               0
VTIMEZONE           0+    MUST be present if any date/time refers to a
                           timezone
X-COMPONENT         0+

3.2.2     REQUEST

The "REQUEST" method in a "VEVENT" component provides the following
scheduling functions:

  .  Invite "Attendees" to an event;
  .  Reschedule an existing event;
  .  Response to a REFRESH request;
  .  Update the details of an existing event, without rescheduling it;
  .  Update the status of "Attendees" of an existing event, without
     rescheduling it;
  .  Reconfirm an existing event, without rescheduling it;
  .  Forward a "VEVENT" to another uninvited CU.
  .  For an existing "VEVENT" calendar component, delegate the role of
     "Attendee" to another CU;
  .  For an existing "VEVENT" calendar component, changing the role of
     "Organizer" to another CU.

The "Organizer" originates the "REQUEST". The recipients of the
"REQUEST" method are the CUs invited to the event, the "Attendees".
"Attendees" use the "REPLY" method to convey attendance status to the
"Organizer".

The "UID" and "SEQUENCE" properties are used to distinguish the various
uses of the "REQUEST" method. If the "UID" property value in the

Silverberg/Mansour/Dawson/Hopson   - 15 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

"REQUEST" is not found on the recipient's calendar, then the "REQUEST"
is for a new "VEVENT" calendar component. If the "UID" property value is
found on the recipient's calendar, then the "REQUEST&

   notifications and subscribed content notification messages.  The
   first POST message must be a subscription-started notification.
   Notifications which include any subscribed content must not be sent
   until the receipt of an HTTP 200 OK for this initial notification.
   The 200 OK will indicate that the receiver is ready for the delivery
   of subscribed content.  At this point a subscription must be
   allocated its own HTTP2 stream.  Figure 4 depicts this message flow.

   +------------+                                 +------------+
   |  Receiver  |                                 | Publisher  |
   |HTTP2 Stream|                                 |HTTP2 Stream|
   |  (a)  (b)  |                                 |  (a)  (b)  |
   +------------+                                 +------------+
       |    HTTP Post Headers, Data (sub-start, SubID)|
       |<---------------------------------------------|
       | HTTP 200 OK                                  |
       |--------------------------------------------->|
       |    |         HTTP Post Headers, Data (event-notif)|
       |    |<---------------------------------------------|
       |    |                       HTTP Data (event-notif)|
       |    |<---------------------------------------------|
       |    |                     HTTP Data (sub-terminate)|
       |    |<---------------------------------------------|
       |    |HTTP 200 OK                                   |
       |    |--------------------------------------------->|

                      Figure 3: Configured over HTTP2

   As the HTTP2 transport is available to the receiver, the publisher
   should:

   o  take any subscription-priority and copy it into the HTTP2 stream
      priority, and

   o  take a subscription-dependency if it has been provided and map the
      HTTP2 stream for the parent subscription into the HTTP2 stream
      dependency.

4.  Mandatory JSON and datastore support

   A publisher MUST support JSON encoding of RPCs and Notifications.

   A publisher supporting [I-D.ietf-netconf-yang-push] MUST support the
   "operational" datastore as defined by
   [I.D.draft-ietf-netmod-revised-datastores].

Voit, et al.             Expires August 4, 2018                 [Page 6]
Internet-Draft               RESTCONF-Notif                 January 2018

5.  Notification Messages

   Notification messages transported over NETCONF will be identical in
   format and content to those encoded using one-way operations defined
   within [RFC5277], section 4.

6.  Security Considerations

   One or more publishers of configured subscriptions could be used to
   overwhelm a receiver which doesn't even support subscriptions.  There
   are two protections needing support on a publisher.  First,
   notification messages for configured subscriptions MUST only be
   transmittable over encrypted transports.  Clients which do not want
   pushed content need only terminate or refuse any transport sessions
   from the publisher.  Second, the HTTP transport augmentation on the
   receiver must send an HTTP 200 OK to a subscription started
   notification before the publisher starts streaming any subscribed
   content.

   One or more publishers could overwhelm a receiver which is unable to
   control or handle the volume of Event Notifications received.  In
   deployments where this might be a concern, HTTP2 transport such as
   HTTP2) should be selected.

   The NETCONF Authorization Control Model [RFC6536] SHOULD be used to
   control and restrict authorization of subscription configuration.

7.  Acknowledgments

   We wish to acknowledge the helpful contributions, comments, and
   suggestions that were received from: Susan Hares, Tim Jenkins, Balazs
   Lengyel, Kent Watsen, Michael Scharf, and Guangying Zheng.

8.  References

8.1.  Normative References

   [I-D.draft-ietf-netconf-subscribed-notifications]
              Voit, E., Clemm, A., Gonzalez Prieto, A., Tripathy, A.,
              and E. Nilsen-Nygaard, "Custom Subscription to Event
              Streams", draft-ietf-netconf-subscribed-notifications-06
              (work in progress), January 2018.

   [I.D.draft-ietf-netmod-revised-datastores]
              Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
              and R. Wilton, "Network Management Datastore
              Architecture", draft-ietf-netmod-revised-datastores-04
              (work in progress), August 2017.

Voit, et al.             Expires August 4, 2018                 [Page 7]
Internet-Draft               RESTCONF-Notif                 January 2018

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC5277]  Chisholm, S. and H. Trevino, "NETCONF Event
              Notifications", RFC 5277, DOI 10.17487/RFC5277, July 2008,
              <https://www.rfc-editor.org/info/rfc5277>.

   [RFC6520]  Seggelmann, R., Tuexen, M., and M. Williams, "Transport
              Layer Security (TLS) and Datagram Transport Layer Security
              (DTLS) Heartbeat Extension", RFC 6520,
              DOI 10.17487/RFC6520, February 2012,
              <https://www.rfc-editor.org/info/rfc6520>.

   [RFC6536]  Bierman, A. and M. Bjorklund, "Network Configuration
              Protocol (NETCONF) Access Control Model", RFC 6536,
              DOI 10.17487/RFC6536, March 2012,
              <https://www.rfc-editor.org/info/rfc6536>.

   [RFC7540]  Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext
              Transfer Protocol Version 2 (HTTP/2)", RFC 7540,
              DOI 10.17487/RFC7540, May 2015,
              <https://www.rfc-editor.org/info/rfc7540>.

   [RFC8040]  Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
              Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
              <https://www.rfc-editor.org/info/rfc8040>.

8.2.  Informative References

   [GRPC]     "RPC framework that runs over HTTP2", August 2017,
              <https://grpc.io/>.

   [I-D.ietf-netconf-yang-push]
              Clemm, A., Voit, E., Gonzalez Prieto, A., Prasad Tripathy,
              A., Nilsen-Nygaard, E., Bierman, A., and B. Lengyel,
              "Subscribing to YANG datastore push updates", March 2017,
              <https://datatracker.ietf.org/doc/
              draft-ietf-netconf-yang-push/>.

   [RFC7923]  Voit, E., Clemm, A., and A. Gonzalez Prieto, "Requirements
              for Subscription to YANG Datastores", RFC 7923,
              DOI 10.17487/RFC7923, June 2016,
              <https://www.rfc-editor.org/info/rfc7923>.

Voit, et al.             Expires August 4, 2018                 [Page 8]
Internet-Draft               RESTCONF-Notif                 January 2018

   [RFC7951]  Lhotka, L., "JSON Encoding of Data Modeled with YANG",
              RFC 7951, DOI 10.17487/RFC7951, August 2016,
              <https://www.rfc-editor.org/info/rfc7951>.

   [RFC8071]  Watsen, K., "NETCONF Call Home and RESTCONF Call Home",
              RFC 8071, DOI 10.17487/RFC8071, February 2017,
              <https://www.rfc-editor.org/info/rfc8071>.

   [W3C-20150203]
              "Server-Sent Events, World Wide Web Consortium CR CR-
              eventsource-20121211", February 2015,
              <https://www.w3.org/TR/2015/REC-eventsource-20150203/" is for a
rescheduling, an update, or a reconfirm of the "VEVENT" calendar
component.

For the "REQUEST" method, multiple "VEVENT" components in a single
iCalendar object are only permitted when for components with the same
"UID" property.  That is, a series of recurring events may have
instance-specific information.  In this case, multiple "VEVENT"
components are needed to express the entire series.

This method type is an iCalendar object that conforms to the following
property constraints:

Component/Property  Presence
-----------------------------------------------------------------
METHOD              1       MUST be "REQUEST"
VEVENT              1+      All components MUST have the same UID
    ATTENDEE        1+
    DTSTAMP         1
    DTSTART         1
    ORGANIZER       1
    SEQUENCE        0 or 1  MUST be present if value is greater than 0,
                            MAY be present if 0
    SUMMARY         1       Can be null
    UID             1

    ATTACH          0+
    CATEGORIES      0 or 1  This property may contain a list of values
    CLASS           0 or 1
    COMMENT         0 or 1
    CONTACT         0+
    CREATED         0 or 1
    DESCRIPTION     0 or 1  Can be null
    DTEND           0 or 1  if present DURATION MUST NOT be present
    DURATION        0 or 1  if present DTEND MUST NOT be present
    EXDATE          0+
    EXRULE          0+
    GEO             0 or 1
    LAST-MODIFIED   0 or 1
    LOCATION        0 or 1
    PRIORITY        0 or 1
    RDATE           0+
    RECURRENCE-ID   0 or 1  only if referring to an instance of a
                            recurring calendar component.  Otherwise it
                            MUST NOT be present.
    RELATED-TO      0+
    REQUEST-STATUS  0+
    RESOURCES       0 or 1  This property MAY contain a list of values
    RRULE           0+
    STATUS          0 or 1  MAY be one of TENTATIVE/CONFIRMED
    TRANSP          0 or 1
    URL             0 or 1

Silverberg/Mansour/Dawson/Hopson   - 16 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

    X-PROPERTY      0+

VALARM              0+
VTIMEZONE           0+      MUST be present if any date/time refers to
                            a timezone
X-COMPONENT         0+

VFREEBUSY           0
VJOURNAL            0
VTODO               0

3.2.2.1   Rescheduling an Event

The "REQUEST" method may be used to reschedule an event. A rescheduled
event involves a change to the existing event in terms of its time or
recurrence intervals and possibly the location or description. If the
recipient CUA of a "REQUEST" method finds that the "UID" property value
already exists on the calendar, but that the "SEQUENCE" (or "DTSTAMP")
property value in the "REQUEST" method is greater than the value for the
existing event, then the "REQUEST" method describes a rescheduling of
the event.

3.2.2.2   Updating or Reconfirmation of an Event

The "REQUEST" method may be used to update or reconfirm an event. An
update to an existing event does not involve changes to the time or
recurrence intervals, and might not involve a change to the location or
description for the event. If the recipient CUA of a "REQUEST" method
finds that the "UID" property value already exists on the calendar and
that the "SEQUENCE" property value in the "REQUEST" is the same as the
value for the existing event, then the "REQUEST" method describes an
update of the event details, but no rescheduling of the event.

The update "REQUEST" method is the appropriate response to a "REFRESH"
method sent from an "Attendee" to the "Organizer" of an event.

The "Organizer" of an event may also send unsolicited "REQUEST" methods.
The unsolicited "REQUEST" methods may be used to update the details of
the event without rescheduling it, to update the "partstat" parameter of
"Attendees", or to reconfirm the event.

3.2.2.3   Delegating an Event to another CU

Some calendar and scheduling systems allow "Attendees" to delegate their
presence at an event to another calendar user. ITIP supports this
concept using the following workflow. Any "Attendee" may delegate their
right to participate in a calendar VEVENT to another CU. The implication
is that the delegate participates in lieu of the original "Attendee";
NOT in addition to the "Attendee". The delegator MUST notify the
"Organizer" of this action using the steps outlined below.
Implementations may support or restrict delegation as they see fit. For

Silverberg/Mansour/Dawson/Hopson   - 17 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

instance, some implementations may restrict a delegate from delegating a
"REQUEST" to another CU.

The "Delegator" of an event forwards the existing "REQUEST" to the
"Delegate". The "REQUEST" method MUST include an "ATTENDEE" property
with the calendar address of the "Delegate". The "Delegator" MUST also
send a "REPLY" method to the "Organizer" with the "Delegator's"
"ATTENDEE" property "partstat" parameter value set to "delegated". In
addition, the "delegated-to" parameter MUST be included with the
calendar address of the "Delegate".

In response to the request, the "Delegate" MUST send a "REPLY" method to
the "Organizer" and optionally, to the "Delegator". The "REPLY" method "
SHOULD include the "ATTENDEE" property with the "delegated-from"
parameter value of the "Delegator's" calendar address.

The "Delegator" may continue to receive updates to the event even though
they will not be attending. This is accomplished by the "Delegator"
setting their "role" attribute to " NON-PARTICIPANT" in the "REPLY" to
the "Organizer"

3.2.2.4   Changing the Organizer

The situation may arise where the "Organizer" of a VEVENT is no longer
able to perform the "Organizer>.

Appendix A.  End-to-End Deployment Guidance

   Several technologies are expected to be seen within a deployment to
   achieve security and ease-of-use requirements.  These are not
   necessary for an implementation of this specification, but will be
   useful to consider when considering the operational context.

A.1.  Call Home

   Implementations should include the ability to transparently
   incorporate 'call home' [RFC8071] so that secure TLS connections can
   originate from the desired device.

A.2.  TLS Heartbeat

   HTTP sessions might not quickly allow a subscriber to recognize when
   the communication path has been lost from the publisher.  To
   recognize this, it is possible for a receiver to establish a TLS
   heartbeat [RFC6520].  In the case where a TLS heartbeat is included,
   it should be sent just from receiver to publisher.  Loss of the
   heartbeat should result in any subscription related TCP sessions
   between those endpoints being torn down.  The subscription can then
   attempt to re-establish.

Appendix B.  RESTCONF over GRPC

   An initial goal for this document was to support [GRPC] transport
   seamlessly without any mapping or extra layering.  However there is
   an incompatibility of RESTCONF and GRPC.  RESTCONF uses HTTP GET, and
   GRPC uses HTTP2's POST rather than GET.  As GET is used across
   RESTCONF for things like capabilities exchange, a seamless mapping
   depends on specification changes outside the scope of this document.
   If/when GRPC supports GET, or RESTCONF is updated to support POST,
   this should be revisited.  It is hoped that the resulting fix will be
   transparent to this document.

Voit, et al.             Expires August 4, 2018                 [Page 9]
Internet-Draft               RESTCONF-Notif                 January 2018

Appendix C.  Encoded Subscription and Notification Message Examples

   (Note: examples in this section need significant updates)

C.1.  RESTCONF Subscription and Events over HTTP1.1

   Subscribers can dynamically learn whether a RESTCONF server supports
   various types of Event or Yang datastore subscription capabilities.
   This is done by issuing an HTTP request OPTIONS, HEAD, or GET on the
   stream.  Some examples building upon the Call flow for HTTP1.1 from
   Section 3.2.2 are:

   GET /restconf/data/ietf-restconf-monitoring:restconf-state/
            streams/stream=yang-push HTTP/1.1
   Host: example.com
   Accept: application/yang.data+xml

   If the server supports it, it may respond

   HTTP/1.1 200 OK
   Content-Type: application/yang.api+xml
   <stream xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring">
               <name>yang-push</name>
               <description>Yang push stream</description>
               <access>
                  <encoding>xml</encoding>
                  <location>https://example.com/streams/yang-push-xml
                  </location>
               </access>
               <access>
                  <encoding>json</encoding>
                  <location>https://example.com/streams/yang-push-json
                  </location>
               </access>
            </stream>

   If the server does not support any form of subscription, it may
   respond

   HTTP/1.1 404 Not Found
   Date: Mon, 25 Apr 2012 11:10:30 GMT
   Server: example-server

   Subscribers can determine the URL to receive updates by sending an
   HTTP GET as a request for the "location" leaf with the stream list
   entry.  The stream to use for may be selected from the Event Stream
   list provided in the capabilities exchange.  Note that different

Voit, et al.             Expires August 4, 2018                [Page 10]
Internet-Draft               RESTCONF-Notif                 January 2018

   encodings are supporting using different Event Stream locations.  For
   example, the subscriber might send the following request:

   GET /restconf/data/ietf-restconf-monitoring:restconf-state/
            streams/stream=yang-push/access=xml/location HTTP/1.1
   Host: example.com
   Accept: application/yang.data+xml

   The publisher might send the following response:

   HTTP/1.1 200 OK
   Content-Type: application/yang.api+xml
      <location
           xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring">
           https://example.com/streams/yang-push-xml
      </location>

   To subscribe and start receiving updates, the subscriber can then
   send an HTTP GET request for the URL returned by the publisher in the
   request above.  The accept header must be "text/event-stream".  The
   publisher uses the Server Sent Events [W3C-20150203] transport
   strategy to push filtered events from the event stream.

   The publisher MUST support individual parameters within the POST
   request body for all the parameters of a subscription.  The only
   exception is the encoding, which is embedded in the URI.  An example
   of this is:

   // subtree filter = /foo
   // periodic updates, every 5 seconds
   POST /restconf/operations/ietf-subscribed-notifications:
        establish-subscription HTTP/1.1
         Host: example.com
         Content-Type: application/yang-data+json

         {
           "ietf-subscribed-notifications:input" : {
             "stream": "push-data"
             "period" : 5,
             "xpath-filter" : "/ex:foo[starts-with('bar'.'some']"
           }
         }

   Should the publisher not support the requested subscription, it may
   reply:

Voit, et al.             Expires August 4, 2018                [Page 11]
Internet-Draft               RESTCONF-Notif                 January 2018

   HTTP/1.1 501 Not Implemented
   Date: Mon, 23 Apr 2012 17:11:00 GMT
   Server: example-server
   Content-Type: application/yang.errors+xml
       <errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
          <error>
              <error-type>application</error-type>
              <error-tag>operation-not-supported</error-tag>
              <error-severity>error</error-severity>
              <error-message>Xpath filters not supported</error-message>
              <error-info>
                  <supported-subscription xmlns="urn:ietf:params:xml:ns:
                      netconf:datastore-push:1.0">
                      <subtree-filter/>
                  </supported-subscription>
              </error-info>
          </error>
        </errors>

   with an equivalent JSON encoding representation of:

   HTTP/1.1 501 Not Implemented
   Date: Mon, 23 Apr 2012 17:11:00 GMT
   Server: example-server
   Content-Type: application/yang.errors+json
         {
           "ietf-restconf:errors": {
             "error": {
               "error-type": "protocol",
               "error-tag": "operation-not-supported",
               "error-message": "Xpath filters not supported."
               "error-info": {
                  "datastore-push:supported-subscription": {
                        "subtree-filter": [null]
                    }
               }
             }
           }
         }

   The following is an example of a pushed content for the subscription
   above.  It contains a subtree with root foo that contains a leaf
   called bar:

Voit, et al.             Expires August 4, 2018                [Page 12]
quot; role and abdicates without passing on
the "Organizer" role to someone else. When this occurs the "Attendees"
of the VEVENT may use out-of-band mechanisms to communicate the
situation and agree upon a new "Organizer".  The new "Organizer" should
then send out a new "REQUEST" with a modified version of the VEVENT in
which the "SEQUENCE" number has been incremented and value of the
"ORGANIZER" property has been changed to the calendar address of the new
"Organizer".

3.2.2.5   Sending on Behalf of the Organizer

There are a number of scenarios that support the need for a calendar
user to act on behalf of the "Organizer" without explicit role changing.
This might be the case if the CU designated as "Organizer" was sick or
unable to perform duties associated with that function. In these cases
iTIP supports the notion of one CU acting on behalf of another. Using
the "sent-by" parameter, a calendar user could send an updated "VEVENT"
REQUEST. In the case where one CU sends on behalf of another CU, the
"Attendee" responses are still directed back towards the CU designated
as "Organizer".

3.2.2.6   Forwarding to An Uninvited CU

An "Attendee" invited to an event may invite another uninvited CU to the
event. The invited "Attendee" accomplishes this by forwarding the
original "REQUEST" method to the uninvited CU. The "Organizer" decides
whether or not the uninvited CU is added to the attendee list. If the

Silverberg/Mansour/Dawson/Hopson   - 18 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

"Organizer" decides not to add the uninvited CU no further action is
required, however the "Organizer" MAY send the uninvited CU a "CANCEL"
message.  If the "Organizer" decides to add an uninvited CU, a new
"ATTENDEE" property is added for the uninvited CU with its property
parameters set as the "Organizer" deems appropriate. When forwarding a
"REQUEST" to another CU, the forwarding "Attendee" MUST NOT make changes
to the VEVENT property set.

3.2.2.7   Updating Attendee Status

The "Organizer" of an event may also request updated status from one or
more "Attendees. The "Organizer" sends a "REQUEST" method to the
"Attendee" and sets the "ATTENDEE;RSVP=TRUE" property parameter. The
"SEQUENCE" property for the event is not changed from its previous
value. A recipient will determine that the only change in the "REQUEST"
is that their "RSVP" property parameter indicates a request for updated
status. The recipient SHOULD respond with a "REPLY" method indicating
their current status with respect to the "REQUEST".

3.2.3     REPLY

The "REPLY" method in a "VEVENT" calendar component is used to respond
(e.g., accept or decline) to a "REQUEST" or to reply to a delegation
"REQUEST". When used to provide a delegation response, the "Delegator"
SHOULD include the calendar address of the "Delegate" on the "delegated-
to" property parameter  of the "Delegator's" "ATTENDEE" property. The
"Delegate" SHOULD include the calendar address of the "Delegator" on the
"delegated-from" property parameter of the "Delegate's" "ATTENDEE"
property.

The "REPLY" method may also be used to respond to an unsuccessful
"REQUEST" method. Depending on the value of the "REQUEST-STATUS"
property no scheduling action may have been performed.

The "Organizer" of an event may receive the "REPLY" method from a CU not
in the original "REQUEST". For example, a "REPLY" may be received from a
"Delegate" to an event. In addition, the "REPLY" method may be received
from an unknown CU (a "Party Crasher"). This uninvited "Attendee" may be
accepted, or the "Organizer" may cancel the event for the uninvited
"Attendee" by sending a "CANCEL" method to the uninvited "Attendee".

An "Attendee" can include a message to the "Organizer" using the
"COMMENT" property. For example, if the user indicates tentative
acceptance and wants to let the "Organizer" know why, the reason can be
expressed in the "COMMENT" property value.

The "OrganizerInternet-Draft               RESTCONF-Notif                 January 2018

   XML encoding representation:
     <?xml version="1.0" encoding="UTF-8"?>
     <notification xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
        <subscription-id xmlns="urn:ietf:params:xml:ns:restconf:
            datastore-push:1.0">
              my-sub
        </subscription-id>
        <eventTime>2015-03-09T19:14:56.233Z</eventTime>
        <datastore-contents xmlns="urn:ietf:params:xml:ns:restconf:
           datastore-push:1.0">
           <foo xmlns="http://example.com/yang-push/1.0">
             <bar>some_string</bar>
           </foo>
        </datastore-contents>
     </notification>

   Or with the equivalent YANG over JSON encoding representation as
   defined in [RFC7951]:

   {
     "ietf-restconf:notification": {
       "datastore-push:subscription-id": "my-sub",
       "eventTime": "2015-03-09T19:14:56.233Z",
       "datastore-push:datastore-contents" may also receive a "REPLY" from one CU on behalf of
another. Like the scenario enumerated above for the "Organizer",
"Attendees" may have another CU respond on their behalf. This is done
using the "sent-by" parameter.

Silverberg/Mansour/Dawson/Hopson   - 19 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

The optional properties listed in the table below (those listed as "0+"
or "0 or 1") MUST NOT be changed from those of the original request.  If
property changes are desired the COUNTER message must be used.

This method type is an iCalendar object that conforms to the following
property constraints:

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1       MUST be "REPLY"

VEVENT              1+      All components MUST have the same UID
    ATTENDEE        1       MUST be the address of the Attendee
                            replying.
    DTSTAMP         1
    ORGANIZER       1
    RECURRENCE-ID   0 or 1  only if referring to an instance of a
                            recurring calendar component.  Otherwise it
                            must NOT be present.
    UID             1       MUST be the UID of the original REQUEST

    SEQUENCE        0 or 1  MUST if non-zero, MUST be the sequence
                            number of the original REQUEST. MAY be
                            present if 0.

    ATTACH          0+
    CATEGORIES      0 or 1  This property may contain a list of values
    CLASS           0 or 1
    COMMENT         0 or 1
    CONTACT         0+
    CREATED         0 or 1
    DESCRIPTION     0 or 1
    DTEND           0 or 1  if present DURATION MUST NOT be present
    DTSTART         0 or 1
    DURATION        0 or 1  if present DTEND MUST NOT be present
    EXDATE          0+
    EXRULE          0+
    GEO             0 or 1
    LAST-MODIFIED   0 or 1
    LOCATION        0 or 1
    PRIORITY        0 or 1
    RDATE           0+
    RELATED-TO      0+
    RESOURCES       0 or 1  This property MAY contain a list of values
    REQUEST-STATUS  0+
    RRULE           0+
    STATUS          0 or 1
    SUMMARY         0 or 1
    TRANSP          0 or 1
    URL             0 or 1
    X-PROPERTY      0+

VTIMEZONE           0 or 1 MUST be present if any date/time refers to a
                           timezone

Silverberg/Mansour/Dawson/Hopson   - 20 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

X-COMPONENT         0+

VALARM              0
VFREEBUSY           0
VJOURNAL            0
VTODO               0

3.2.4     ADD

The "ADD" method in a "VEVENT" calendar component is used to add one or
more instances to an existing "VEVENT". Unlike the "REQUEST" method,
when using issuing an "ADD" method, the "Organizer" does not send the
full "VEVENT" description; only the new instance(s). The "ADD" method is
especially useful if there are instance-specific properties to be
preserved in a recurring "VEVENT". For instance, an "Organizer" may have
originally scheduled a weekly Thursday meeting. At some point, several
instances changed. Location or start time may have changed, or some
instances may have unique "DESCRIPTION" properties. The "ADD" method
allows the "Organizer" to add new instances to an existing event using a
single ITIP message without redefining the entire recurring pattern.

The "UID" must be that of the existing event. If the "UID" property
value in the "ADD" is not found on the recipient's calendar, then the
recipient SHOULD send a "REFRESH" to the "Organizer" in order to be
updated with the latest version of the "VEVENT".  If an "Attendee"
implementation does not support the "ADD" method it should respond with
a "REQUEST-STATUS" value of 3.14 and ask for a "REFRESH".

This method type is an iCalendar object that conforms to the following
property constraints:

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "ADD"
VEVENT              1
    DTSTAMP         1
    DTSTART         1
    ORGANIZER       1
    SEQUENCE        1      MUST be greater than 0
    SUMMARY         1      Can be null
    UID             1      MUST match that of the original event

    ATTACH          0+
    ATTENDEE        0+
    CATEGORIES      0 or 1 This property MAY contain a list of values
    CLASS           0 or 1
    COMMENT         0 or 1
    CONTACT         0+
    CREATED         0 or 1
    DESCRIPTION     0 or 1  Can be null
    DTEND           0 or 1  if present DURATION MUST NOT be present
    DURATION        0 or 1  if present DTEND MUST NOT be present
    EXDATE          0+

Silverberg/Mansour/Dawson/Hopson   - 21 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

    EXRULE          0+
    GEO             0 or 1
    LAST-MODIFIED   0 or 1
    LOCATION        0 or 1
    PRIORITY        0 or 1
    RDATE           0+
    RELATED-TO      0+
    RESOURCES       0 or 1  This property MAY contain a list of values
    RRULE           0+
    STATUS          0 or 1  MAY be one of TENTATIVE/CONFIRMED
    TRANSP          0 or 1
    URL             0 or 1
    X-PROPERTY      0+

    RECURRENCE-ID   0
    REQUEST-STATUS  0

VALARM              0+
VTIMEZONE           0+     MUST be present if any date/time refers to
                           a timezone
X-COMPONENT         0+

VFREEBUSY           0
VTODO               0
VJOURNAL            0

3.2.5     CANCEL

The "CANCEL" method in a "VEVENT" calendar component is used to send a
cancellation notice of an existing event request to the "Attendees". The
message is sent by the "Organizer" of the event. For a recurring event,
either the whole event or instances of an event may be cancelled. To
cancel the complete range of recurring event, the "UID" property value
for the event MUST be specified and a "RECURRENCE-ID" MUST NOT be
specified in the "CANCEL" method. In order to cancel an individual
instance of the event, the "RECURRENCE-ID" property value for the event
MUST be specified in the "CANCEL" method.

There are two options for canceling a sequence of instances of a
recurring "VEVENT" calendar component:

(a)    the "RECURRENCE-ID" property for an instance in the sequence MUST be
  specified with the "RANGE" property parameter value of THISANDPRIOR
  (or THISANDFUTURE)  to indicate cancellation of the specified
  "VEVENT" calendar component and all instances before (or after); or

(b)    individual recurrence instances may be cancelled by specifying
  multiple "RECURRENCE-ID" properties corresponding to the instances to
  be cancelled.

When a "VEVENT" is cancelled, the "SEQUENCE" property value MUST be
incremented.

Silverberg/Mansour/Dawson/Hopson   - 22 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

This method type is an iCalendar object that conforms to the following
property constraints:

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "CANCEL"

VEVENT              1+     All must have the same UID
    ATTENDEE        0+     MUST include all "Attendees" being removed
                           the event. MUST include all "Attendees" if
                           the entire event is cancelled.
    DTSTAMP         1
    ORGANIZER       1
    SEQUENCE        1
    UID             1       MUST be the UID of the original REQUEST

    COMMENT         0 or 1
    ATTACH          0+
    CATEGORIES      0 or 1  This property may contain a list of values
    CLASS           0 or 1
    CONTACT         0+
    CREATED         0 or 1
    DESCRIPTION     0 or 1
    DTEND           0 or 1 if present DURATION MUST NOT be present
    DTSTART         0 or 1
    DURATION        0 or 1 if present DTEND MUST NOT be present
    EXDATE          0+
    EXRULE          0+
    GEO             0 or 1
    LAST-MODIFIED   0 or 1
    LOCATION        0 or 1
    PRIORITY        0 or 1
    RDATE           0+
    RECURRENCE-ID   0 or 1  MUST be present if referring to one or more
                            or more recurring instances. Otherwise it
                            MUST NOT be present
    RELATED-TO      0+
    RESOURCES       0 or 1
    RRULE           0+
    STATUS          0 or 1  MUST be set to CANCELLED. If uninviting
                            specific "Attendees" then MUST NOT be
                            included.
    SUMMARY         0 or 1
    TRANSP          0 or 1
    URL             0 or 1
    X-PROPERTY      0+
    REQUEST-STATUS  0

VTIMEZONE           0+     MUST be present if any date/time refers to
                           a timezone
X-COMPONENT         0+

VTODO               0
VJOURNAL            0

Silverberg/Mansour/Dawson/Hopson   - 23 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

VFREEBUSY           0
VALARM              0

3.2.6     REFRESH

The "REFRESH" method in a "VEVENT" calendar component is used by
"Attendees" of an existing event to request an updated description from
the event "Organizer". The "REFRESH" method must specify the "UID"
property of the event to update. A recurrence instance of an event may
be requested by specifying the "RECURRENCE-ID" property corresponding to
the associated event. The "Organizer" responds with the latest
description and version of the event.

This method type is an iCalendar object that conforms to the following
property constraints:

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "REFRESH"

VEVENT              1
    ATTENDEE        1      MUST be the address of requestor
    DTSTAMP         1
    ORGANIZER       1
    UID             1      MUST be the UID associated with original
                           REQUEST
    COMMENT         0 or 1
    RECURRENCE-ID   0 or 1 MUST only if referring to an instance of a
                           recurring calendar component.  Otherwise it
                           must NOT be present.
    X-PROPERTY      0+

    ATTACH          0
    CATEGORIES      0
    CLASS           0
    CONTACT         0
    CREATED         0
    DESCRIPTION     0
    DTEND           0
    DTSTART         0
    DURATION        0
    EXDATE          0
    EXRULE          0
    GEO             0
    LAST-MODIFIED   0
    LOCATION        0
    PRIORITY        0
    RDATE           0
    RELATED-TO      0
    REQUEST-STATUS  0
    RESOURCES       0
    RRULE           0
    SEQUENCE        0

Silverberg/Mansour/Dawson/Hopson   - 24 -            Expires March 1999


Internet Draft                iTIP                   September 15, 1998

    STATUS          0
    SUMMARY         0
    TRANSP          0
    URL             0

X-COMPONENT         0+

VTODO               0
VJOURNAL            0
VFREEBUSY           0
VTIMEZONE           0
VALARM              0

3.2.7     COUNTER

The "COUNTER" method for a "VEVENT" calendar component is used by an
"Attendee" of an existing event to submit to the "Organizer" a counter
proposal to the event description. The "Attendee" sends this message to
the "Organizer" of the event.

The counter proposal is an iCalendar object consisting of a VEVENT
calendar component describing the complete description of the alternate
event.

The "Organizer" rejects the counter proposal by sending the "Attendee": {
         "example-mod:foo": { "bar": "some_string" }
       }
     }
   }

   To modify a subscription, the subscriber issues another POST request
   on the provided URI using the same subscription-id as in the original
   request.  For example, to modify the update period to 10 seconds, the
   subscriber may send:

   POST /restconf/operations/ietf-subscribed-notifications:
         modify-subscription HTTP/1.1
         Host: example.com
         Content-Type: application/yang-data+json

         {
           "ietf-subscribed-notifications:input" : {
             "subscription-id": 100,
             "period" : 10
           }
         }

Voit, et al.             Expires August 4, 2018                [Page 13]
Internet-Draft               RESTCONF-Notif                 January 2018

   To delete a subscription, the subscriber issues a DELETE request on
   the provided URI using the same subscription-id as in the original
   request

C.2.  Event Notification over HTTP2

   The basic encoding will look as below.  It will consists of a JSON
   representation wrapped in an HTTP2 header.

   HyperText Transfer Protocol 2
         Stream: HEADERS, Stream ID: 5
         Header: :method: POST
         Stream: HEADERS, Stream ID: 5

   {
     "ietf-yangpush:notification": {
       "datastore-push:subscription-id": "my-sub",
       "eventTime": "2015-03-09T19:14:56.233Z",
       "datastore-push:datastore-contents": {
         "foo": { "bar": "some_string" }
       }
     }
   }

Appendix D.  Changes between revisions

   (To be removed by RFC editor prior to publication)

   v03 - v04

   o  Draft not fully synched to new version of subscribed-notifications
      yet.

   o  References updated

   v02 - v03

   o  Event notification reframed to notification message.

   o  Tweaks to wording/capitalization/format.

   v01 - v02

   o  Removed sections now redundant with
      [I-D.draft-ietf-netconf-subscribed-notifications] and
      [I-D.ietf-netconf-yang-push] such as: mechanisms for subscription
      maintenance, terminology definitions, stream discovery.

Voit, et al.             Expires August 4, 2018                [Page 14]
Internet-Draft               RESTCONF-Notif                 January 2018

   o  3rd party subscriptions are out-of-scope.

   o  SSE only used with RESTCONF and HTTP1.1 dynamic subscriptions

   o  Timeframes for event tagging are self-defined.

   o  Clean-up of wording, references to terminology, section numbers.

   v00 - v01

   o  Removed the ability for more than one subscription to go to a
      single HTTP2 stream.

   o  Updated call flows.  Extensively.

   o  SSE only used with RESTCONF and HTTP1.1 dynamic subscriptions

   o  HTTP is not used to determine that a receiver has gone silent and
      is not Receiving Event Notifications

   o  Many clean-ups of wording and terminology

Authors' Addresses

   Eric Voit
   Cisco Systems

   Email: evoit@cisco.com

   Ambika Prasad Tripathy
   Cisco Systems

   Email: ambtripa@cisco.com

   Einar Nilsen-Nygaard
   Cisco Systems

   Email: einarnn@cisco.com

   Alexander Clemm
   Huawei

   Email: ludwig@clemm.org

Voit, et al.             Expires August 4, 2018                [Page 15]
Internet-Draft               RESTCONF-Notif                 January 2018

   Alberto Gonzalez Prieto
   VMWare

   Email: agonzalezpri@vmware.com

   Andy Bierman
   YumaWorks

   Email: andy@yumaworks.com

Voit, et al.             Expires August 4, 2018                [Page 16]