summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc5875.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc5875.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc5875.txt')
-rw-r--r--doc/rfc/rfc5875.txt1515
1 files changed, 1515 insertions, 0 deletions
diff --git a/doc/rfc/rfc5875.txt b/doc/rfc/rfc5875.txt
new file mode 100644
index 0000000..37c82a0
--- /dev/null
+++ b/doc/rfc/rfc5875.txt
@@ -0,0 +1,1515 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) J. Urpalainen
+Request for Comments: 5875 Nokia
+Category: Standards Track D. Willis, Ed.
+ISSN: 2070-1721 Softarmor Systems LLC
+ May 2010
+
+
+An Extensible Markup Language (XML) Configuration Access Protocol (XCAP)
+ Diff Event Package
+
+Abstract
+
+ This document describes an "xcap-diff" SIP (Session Initiation
+ Protocol) event package for the SIP Event Notification Framework,
+ which clients can use to receive notifications of changes to
+ Extensible Markup Language (XML) Configuration Access Protocol (XCAP)
+ resources. The initial synchronization information exchange and
+ document updates are based on the XCAP Diff format.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 5741.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc5875.
+
+Copyright Notice
+
+ Copyright (c) 2010 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
+ (http://trustee.ietf.org/license-info) in effect on the date of
+ 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.
+
+
+
+
+Urpalainen & Willis Standards Track [Page 1]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ This document may contain material from IETF Documents or IETF
+ Contributions published or made publicly available before November
+ 10, 2008. The person(s) controlling the copyright in some of this
+ material may not have granted the IETF Trust the right to allow
+ modifications of such material outside the IETF Standards Process.
+ Without obtaining an adequate license from the person(s) controlling
+ the copyright in such materials, this document may not be modified
+ outside the IETF Standards Process, and derivative works of it may
+ not be created outside the IETF Standards Process, except to format
+ it for publication as an RFC or to translate it into languages other
+ than English.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
+ 3. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 4
+ 4. XCAP Diff Event Package . . . . . . . . . . . . . . . . . . . 4
+ 4.1. Overview of Operation with Basic Requirements . . . . . . 4
+ 4.2. Event Package Name . . . . . . . . . . . . . . . . . . . . 5
+ 4.3. 'diff-processing' Event Package Parameter . . . . . . . . 5
+ 4.4. SUBSCRIBE Bodies . . . . . . . . . . . . . . . . . . . . . 6
+ 4.5. Subscription Duration . . . . . . . . . . . . . . . . . . 8
+ 4.6. NOTIFY Bodies . . . . . . . . . . . . . . . . . . . . . . 8
+ 4.7. Notifier Generation of NOTIFY Requests . . . . . . . . . . 8
+ 4.8. Subscriber Processing of NOTIFY Requests . . . . . . . . . 11
+ 4.9. Handling of Forked Requests . . . . . . . . . . . . . . . 13
+ 4.10. Rate of Notifications . . . . . . . . . . . . . . . . . . 13
+ 4.11. State Agents . . . . . . . . . . . . . . . . . . . . . . . 13
+ 5. An Initial Example NOTIFY Document . . . . . . . . . . . . . . 13
+ 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14
+ 7. Security Considerations . . . . . . . . . . . . . . . . . . . 15
+ 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 15
+ 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
+ 9.1. Normative References . . . . . . . . . . . . . . . . . . . 16
+ 9.2. Informative References . . . . . . . . . . . . . . . . . . 17
+ Appendix A. Informative Examples . . . . . . . . . . . . . . . . 18
+ A.1. Initial Documents on an XCAP Server . . . . . . . . . . . 18
+ A.2. An Initial Subscription . . . . . . . . . . . . . . . . . 18
+ A.3. A Document Addition into a Collection . . . . . . . . . . 19
+ A.4. A Series of XCAP Component Modifications . . . . . . . . . 20
+ A.5. An XCAP Component Subscription . . . . . . . . . . . . . . 23
+ A.6. A Conditional Subscription . . . . . . . . . . . . . . . . 26
+
+
+
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 2]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+1. Introduction
+
+ The SIP events framework [RFC3265] describes subscription and
+ notification conventions for the Session Initiation Protocol (SIP)
+ [RFC3261]. The Extensible Markup Language (XML)
+ [W3C.REC-xml-20060816] Configuration Access Protocol (XCAP) [RFC4825]
+ allows a client to read, write, and modify XML-formatted application
+ usage data stored on an XCAP server.
+
+ While XCAP allows authorized users or devices to modify the same XML
+ document, XCAP does not provide an effective mechanism (beyond
+ polling) to keep resources synchronized between a server and a
+ client. This memo defines an "xcap-diff" event package that,
+ together with the SIP event notification framework [RFC3265] and the
+ XCAP diff format [RFC5874], allows a user to subscribe to changes in
+ an XML document, and to receive notifications whenever the XML
+ document changes.
+
+ There are three basic features that this event package enables:
+
+ First, a client can subscribe to a list of XCAP documents' URLs in a
+ collection located on an XCAP server. This allows a subscriber to
+ compare server resources with its local resources using the URLs and
+ the strong entity tag (ETag) values of XCAP documents, which are
+ shown in the XCAP diff format, and to synchronize them.
+
+ Second, this event package can signal a change in those documents in
+ one of three ways. The first mode only indicates the event type and
+ does not include document contents, so the subscriber uses HTTP
+ [RFC2616] to retrieve the updated document. The second mode includes
+ document content changes in notification messages, using the XML-
+ Patch-Ops [RFC5261] format with minimal notification size. The third
+ mode also includes document content changes in notification messages
+ with the same XML-Patch-Ops format, but is more verbose, and shows
+ the full HTTP version history.
+
+ Third, the client can subscribe to specific XML elements or
+ attributes (XCAP components) showing their existing contents in the
+ resulting XCAP diff format notification messages. If the requested
+ component does not exist but is later created, the notifier sends a
+ notification with the component's content. The notifier also sends
+ notifications when the subscribed XCAP components are removed, for
+ example, after a successful HTTP DELETE request.
+
+
+
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 3]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+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, BCP 14
+ [RFC2119] and indicate requirement levels for compliant
+ implementations.
+
+3. Definitions
+
+ The following terms are used in this document:
+
+ XCAP component: An XML element or an attribute, which can be
+ updated, removed, or retrieved with XCAP.
+
+ Aggregating: An XCAP client can update only a single XCAP component
+ at a time using HTTP. However, a notifier may be able to
+ aggregate a series of these modifications into a single
+ notification using XML-Patch-Ops semantics encoded in the XCAP
+ diff format.
+
+ This document reuses terminology mostly defined in XCAP [RFC4825] and
+ some in WebDAV [RFC4918].
+
+4. XCAP Diff Event Package
+
+4.1. Overview of Operation with Basic Requirements
+
+ To receive "xcap-diff" event package features, the subscriber
+ indicates its interest in certain resources by including a URI list
+ in the subscription body to the notifier. Each URL in this list MUST
+ be an HTTP URL that identifies a collection, an XCAP document, or an
+ XCAP component. Collection URLs MUST have a trailing forward slash
+ "/", following the conventions of WebDAV [RFC4918]. A collection
+ selection includes all documents in that collection and recursively
+ all documents in sub-collections. The URL of an XCAP component
+ consists of the document URL with the XCAP Node Selector added.
+ Although the XCAP Node Selector allows all in-scope namespaces of an
+ element to be requested, the client MUST NOT subscribe to namespaces.
+
+ The notifier MUST support XCAP component subscriptions. The notifier
+ sends the first notification in response to the subscription, and
+ this first notification MUST contain the URLs of the documents and
+ XCAP component contents that are part of the subscription. The
+ subsequent notifications MAY contain patches to these documents. The
+ subscriber can specify how the notifier will signal the changes of
+ documents by using the 'diff-processing' event package parameter,
+ covered in Section 4.3. Note that the existence of the "diff-
+
+
+
+Urpalainen & Willis Standards Track [Page 4]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ processing" parameter or its value has no influence on XCAP component
+ subscriptions.
+
+4.2. Event Package Name
+
+ The name of this event package is "xcap-diff". As specified in
+ [RFC3265], this value appears in the Event header field present in
+ SUBSCRIBE and NOTIFY requests.
+
+4.3. 'diff-processing' Event Package Parameter
+
+ With the aid of the optional "diff-processing" Event header field
+ parameter, the subscriber indicates a preference as to how the
+ notifier SHOULD indicate change notifications of documents. The
+ possible values are "no-patching", "xcap-patching", and "aggregate".
+ All three modes provide information that allows the subscriber to
+ synchronize its local cache, but only the "xcap-patching" mode
+ provides intermediate states of the version history. The notifier
+ SHOULD use the indicated mode if it understands it (as doing so
+ optimizes network traffic within the capabilities of the receiver).
+
+ The "no-patching" value means that the notifier indicates only the
+ document and the event type (creation, modification, and removal)
+ in the notification. The notification does not necessarily
+ indicate the full HTTP ETag change history. Notifiers MUST
+ support the "no-patching" mode as a base-line for
+ interoperability. The other, more complex modes are optional.
+
+ The "xcap-patching" value means that the notifier includes all
+ updated XCAP component contents and entity tag (ETag) changes made
+ by XCAP clients (via HTTP). The client receives the full (HTTP)
+ ETag change history of a document.
+
+ The "aggregate" value means that the notifier MAY aggregate
+ several individual XCAP component updates into a single XCAP diff
+ <document> element. The policy for determining whether or not to
+ apply aggregation or to determine how many updates to aggregate is
+ locally determined.
+
+ The notifier SHOULD support the "xcap-patching" and "aggregate"
+ modes, and thus implement XML-Patch-Ops [RFC5261] diff-generation,
+ because this can greatly reduce the required number of
+ notifications and overall transmissions.
+
+
+
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 5]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ If the subscription does not contain the "diff-processing" header
+ field parameter, the notifier MUST default to the "no-patching" mode.
+
+ Note: To see the difference between "xcap-patching" and
+ "aggregate" modes, consider a document that has versions "a", "b",
+ and "c" with corresponding ETag values "1", "2", and "3". The
+ "xcap-patching" mode will include first the change from version
+ "a" to "b" with the versions' corresponding "1" and "2" ETags and
+ then the change from version "b" to "c" with their "2" and "3"
+ ETags. The "aggregate" mode optimizes the change and indicates
+ only a single aggregated change from "a" to "c" with the old "1"
+ and new "3" ETags. If these changes are closely related, that is,
+ the same element has been updated many times, the bandwidth
+ savings are larger.
+
+ This "diff-processing" parameter is a subscriber hint to the
+ notifier. The notifier may respond using a simpler mode, but not a
+ more complex one. Notifier selection of a mode is covered in
+ Section 4.7. During re-subscriptions, the subscriber MAY change the
+ diff-processing parameter.
+
+ The formal grammar [RFC5234] of the "diff-processing" parameter is:
+
+ diff-processing = "diff-processing" EQUAL (
+ "no-patching" /
+ "xcap-patching" /
+ "aggregate" /
+ token )
+
+ where EQUAL and token are defined in RFC 3261 [RFC3261].
+
+4.4. SUBSCRIBE Bodies
+
+ The URI list is described by the XCAP resource list format [RFC4826],
+ and is included as a body of the initial SUBSCRIBE request. Only a
+ simple subset of that format is required, a flat list of XCAP request
+ URIs. The "uri" attribute of the <entry> element contains these URI
+ values. The subscriber MUST NOT use hierarchical lists or <entry-
+ ref> references, etc. (though in the future, semantics may be
+ expanded thanks to the functionality in the resource list format).
+ In subsequent SUBSCRIBE requests, such as those used for refreshing
+ the expiration timer, the subscribed URI list MAY change, in which
+ case the notifier MUST use the new list.
+
+ The SUBSCRIBE request MAY contain an Accept header field. If no such
+ header field is present, it has a default value of "application/
+ xcap-diff+xml". If the header field is present, it MUST include
+ "application/xcap-diff+xml", and MAY include any other types.
+
+
+
+Urpalainen & Willis Standards Track [Page 6]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ The SUBSCRIBE request MAY contain the Suppress-If-Match header field
+ [RFC5839], which directs the notifier to suppress either the body of
+ a subsequent notification or the entire notification if the ETag
+ value matches.
+
+ If the SUBSCRIBE body contains elements or attributes that the
+ notifier doesn't understand, the notifier MUST ignore them.
+
+ Subscribers need to appropriately populate the Request-URI of the
+ SUBSCRIBE request, typically set to the URI of the notifier. This
+ document does not constrain that URI. It is assumed that the
+ subscriber is provisioned with or has learned the URI of the notifier
+ of this event package.
+
+ The XCAP server will usually be co-located with the SIP notifier, so
+ the subscriber MAY use relative XCAP Request-URIs. Because relative
+ Request-URIs are allowed, the notifier MUST know how to resolve these
+ against the correct XCAP Root URI value.
+
+ Figure 1 shows a SUBSCRIBE request and body covering several XCAP
+ resources: a "resource-list" document, a specific element (XCAP
+ component) in a "rls-services" document, and a collection in "pidf-
+ manipulation" application usage. The "Content-Type" header of this
+ SUBSCRIBE request is "application/resource-lists+xml".
+
+ SUBSCRIBE sip:tests@xcap.example.com SIP/2.0
+ ...
+ Accept: application/xcap-diff+xml
+ Event: xcap-diff; diff-processing=aggregate
+ Content-Type: application/resource-lists+xml
+ Content-Length: [XXX]
+ Expires: 4200
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
+ <list>
+ <entry uri="resource-lists/users/sip:joe@example.com/index"/>
+ <entry uri="rls-services/users/sip:joe@example.com/index/
+ ~~/*/service%5b@uri='sip:marketing@example.com'%5d"/>
+ <entry uri="pidf-manipulation/"/>
+ </list>
+ </resource-lists>
+
+ Figure 1: Example subscription body
+
+ When subscribing to XCAP components, namespace prefixes of XCAP Node
+ Selectors MUST be properly resolved to namespace URIs. Section 6.4
+ of RFC 4825 [RFC4825] describes the conventions when using prefixes
+
+
+
+Urpalainen & Willis Standards Track [Page 7]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ in XCAP Node Selectors. If only XCAP Default Document Namespace is
+ used, just like in the previous example (where a <service> element is
+ selected), the query component of the "uri" value is not required.
+
+4.5. Subscription Duration
+
+ The default expiration time for subscriptions within this package is
+ 3600 seconds. As per RFC 3265 [RFC3265], the subscriber MAY specify
+ an alternative expiration timer in the Expires header field.
+
+4.6. NOTIFY Bodies
+
+ The format of the NOTIFY message body either is the default of
+ "application/xcap-diff+xml" or is a format listed in the Accept
+ header field of the SUBSCRIBE.
+
+ In this event package, notification messages contain an XCAP diff
+ document [RFC5874].
+
+ The XCAP diff format [RFC5874] can include the subscribed XCAP
+ component contents. For documents, the format can also include
+ corresponding URIs, ETag values, and patching instructions from
+ version "a" to "b". Removal events (of documents, elements, or
+ attributes) can be identified too. Except for collection selections,
+ the "sel" selector values of the XCAP diff format MUST be octet-by-
+ octet equivalent to the relevant "uri" parameter values of the
+ <entry> element of the "resource-list" document.
+
+ With XCAP component subscriptions, XCAP Node Selectors can contain
+ namespace prefixes. A notifier MUST then resolve these prefixes to
+ namespace URIs according to RFC 4825 [RFC4825] conventions. In other
+ words, notifiers MUST be aware of XCAP Default Document Namespaces
+ for Application Usages when they locate unprefixed qualified XCAP
+ elements. Note that the namespace resolving rules of Patch operation
+ elements <add>, <replace>, and <remove> are described in Section
+ 4.2.1 of [RFC5261].
+
+4.7. Notifier Generation of NOTIFY Requests
+
+ During the initial subscription, or if the URI list changes in
+ SUBSCRIBE refresh requests, the notifier MUST resolve the requested
+ XCAP resources and their privileges. If there are superfluous
+ resource selections in the requested URI list, the notifier SHOULD
+ NOT provide overlapping similar responses for these resources. A
+ resource for which an authenticated user does not have a read
+ privilege MUST NOT be included in the XCAP diff format. Note that an
+ XCAP component that could not be located with XCAP semantics does not
+ produce an error. Instead, the request remains in a "pending" state,
+
+
+
+Urpalainen & Willis Standards Track [Page 8]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ that is, waiting for this resource to be created (or read access
+ granted if XCAP Application Usages utilize dynamic access control
+ lists). Subscriptions to collections have a similar property: once a
+ new document is created into the subscribed collection, the creation
+ of a new resource is signaled with the next NOTIFY request.
+
+ After the notifier knows the list of authorized XCAP resources, it
+ generates the first NOTIFY, which contains URI references to all
+ subscribed, existing documents for which the subscriber has read
+ privileges, and typically XCAP component(s) of existing content.
+
+ After sending the initial notification, the notifier selects a diff-
+ processing mode for reporting changes. If the subscriber suggested a
+ mode in the "diff-processing" parameter of the SUBSCRIBE, the
+ notifier MAY use that requested mode or MAY fall back to a simpler
+ operational mode, but the notifier MUST NOT use a more complex mode
+ than the one chosen by the subscriber. From least to most complex,
+ the order of the modes is the following: "no-patching", "xcap-
+ patching", "aggregate". Thus, the notifier may respond to an
+ "aggregate" request using any mode, but cannot reply to an "xcap-
+ patching" subscription using the "aggregate" mode. Naturally, the
+ notifier MUST handle a "no-patching" request with the "no-patching"
+ mode.
+
+ In all modes, the notifier MUST maintain the chronological order of
+ XCAP changes. If several changes to a given resource are presented
+ in a single notification, the chronological update order MUST be
+ preserved in the XML document order of the notification body.
+ Chronological order is preserved to simplify the required subscriber
+ implementation logic.
+
+ While the "aggregate" mode uses bandwidth most efficiently, it
+ introduces other challenges. The initial synchronization might fail
+ with rapidly changing resources, because the "aggregate" mode
+ messages might not include the full version history of a document and
+ the base XCAP protocol does not support version history retrievals of
+ documents. When new documents are created in subscribed collections
+ and the notifier is aggregating patches, the same issue can occur.
+ In a corner case (such as when the XML prolog changes), the notifier
+ may not be able to provide patches with the XML-Patch-Ops [RFC5261]
+ semantics.
+
+ If the notifier has to temporarily disable diff generation and send
+ only the URI references of some changed documents to the subscriber,
+ it MUST continue with the "xcap-patching" mode afterwards for these
+ resources, if the initial subscription also started with the "xcap-
+ patching" mode.
+
+
+
+
+Urpalainen & Willis Standards Track [Page 9]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ Note: The diff-generation may be disabled when the NOTIFY body
+ becomes impractically large or an intermediate error has happened.
+ As the subscriber loses track of the patching operations, it must
+ refresh to a "known good" state by downloading current documents.
+ Once it has done so, it can re-subscribe, for example, with the
+ "aggregate" mode.
+
+ In the "aggregate" mode, the notifier chooses how long to wait for
+ multiple patches to combine and how this combination is done.
+
+ In the "xcap-patching" mode, the notifier MAY try to optimize the
+ diff-generation, for example, by eliminating redundant information
+ since some XCAP clients will probably not have completely optimized
+ their HTTP PUT request.
+
+ Note: It is straightforward to change the XCAP client's change
+ requests: PUT and DELETE (sent via HTTP) to use XML-Patch-Ops
+ semantics. While XCAP does not support patching of all XML node
+ types -- for example, namespace declarations cannot be added
+ separately -- efficient utilization of XML-Patch-Ops can sometimes
+ significantly reduce the bandwidth requirements at the expense of
+ extra processing.
+
+ After the notifier has reported the existence of an XCAP component,
+ it MUST also report its removal consistently. For example, the
+ removal of the parent element of the subscribed element requires the
+ same signaling since the subscribed element ceases to exist. To
+ signal the removal of an XCAP component, the notifier sets the
+ Boolean "exist" attribute value of the <element> or <attribute>
+ elements to false. Even with rapidly changing resources, the
+ notifier MUST signal only the latest state: e.g., whether or not the
+ XCAP component exists.
+
+ When the notifier receives a re-subscription, it MUST re-send the
+ current full XML diff content unless the subscriber has requested a
+ conditional subscription [RFC5839] by using the header field
+ Suppress-If-Match: [ETag value]. With a conditional re-subscription,
+ the notifier MUST also inspect the subscription body when determining
+ the current subscription state. Since the subscription is based on a
+ list of XCAP request URIs, it is RECOMMENDED that the notifier does
+ not consider the order of these URIs when determining the equivalence
+ to "stored" previous states. If a match to the previous state is not
+ found, the NOTIFY message MUST contain the full XML diff state
+ (similar to the initial notification). The notifiers SHOULD
+ implement the conditional subscription handling with this event
+ package.
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 10]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ During re-subscriptions, the subscriber may change the value of the
+ diff-processing parameter. The value change influences only
+ subsequent notifications, not the notification (if generated)
+ followed immediately after the (re-)SUBSCRIBE request.
+
+ Event packages like this require reliable transfer of NOTIFY
+ messages. This means that all messages MUST successfully be
+ transferred or the document will become out of sync, and then patches
+ will most likely fail (or worse, have unintended consequences). This
+ "xcap-diff" event package requires, similar to Partial-PIDF-Notify
+ RFC 5263 [RFC5263], that a notifier MUST NOT send a new NOTIFY
+ request to the same dialog unless a successful 200-response has been
+ received for the last sent NOTIFY request. If the NOTIFY request
+ fails due to a timeout, the notifier MUST remove the subscription.
+
+ Note: This requirement ensures that out-of-order events will not
+ happen or that the dialog will terminate after non-resolvable
+ NOTIFY request failures. In addition, some of the probable NOTIFY
+ error responses (for example, 401, 407, 413) can possibly be
+ handled gracefully without tearing down the dialog.
+
+ If, for example, the subscriber has selected too many elements to
+ which to subscribe, such that the notification body would be
+ impractically large (that is, an intermediate NOTIFY failure), the
+ notifier MAY discard the <element> element content. The existence of
+ elements is then indicated with an empty <element> element, and the
+ content is not shown for those resources. In other words, the
+ <element> element does not have a child element that would show the
+ subscribed "full" element content.
+
+4.8. Subscriber Processing of NOTIFY Requests
+
+ The first NOTIFY request will usually contain references to HTTP
+ resources including their strong ETag values. If the subscriber does
+ not have similar locally cached versions, it will typically start an
+ unconditional HTTP GET request for those resources. During this HTTP
+ retrieval time, the subscriber MAY also receive patches to these
+ documents if it has requested them and if the documents are changing
+ rapidly. It can happen that the version retrieved by HTTP is not the
+ same than what is indicated in the initial notification. A
+ subscriber can then chain the modification list for each document,
+ and locate the position where the previous ETag value is equal to
+ that retrieved via HTTP. If an ETag match is not found from the
+ first change, a subscriber MUST omit all changes up to the point
+ where it is the same. From that change onwards, the subscriber
+ applies all reported patches. If the version received via HTTP is
+ newer than any received via the notifications, the subscriber may not
+ find an equivalent match of an ETag value from the chain of patches.
+
+
+
+Urpalainen & Willis Standards Track [Page 11]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ This can happen since notifications are reported after HTTP changes
+ and preferably at some minimum intervals. Also, document removals
+ can be reported in notifications and/or HTTP retrievals may fail
+ because of unexisting resources (rapidly changing). In any case, the
+ subscriber can re-fetch the possible out-of-sync document, wait for
+ subsequent notifications or refresh the subscription (with "xcap-
+ patching"), and repeat the described "sync" algorithm until a "full"
+ sync is achieved.
+
+ If the notifier aggregates patches, the previous modification list
+ may not contain the ETag value retrieved by HTTP simply because of
+ aggregation optimizations. A similar out-of-sync cycle can happen
+ when new (subscribed) documents are created that change rapidly. To
+ avoid such difficulties, the subscriber MAY start the subscription
+ with the "xcap-patching" mode, and then refresh the subscription with
+ the "aggregate" mode after the initial sync is achieved. Naturally,
+ the subscriber can revert back to the "xcap-patching" mode from
+ "aggregate" at any time and vice versa.
+
+ If the subscriber has received a "full" sync and it has detected that
+ some of the resources are being served with the "xcap-patching" mode
+ while others are in the "aggregate" mode, it SHOULD refresh the
+ subscription to the "aggregate" mode.
+
+ The notifier MAY at any time temporarily use the "no-patching" mode
+ for some resources so that the subscriber receives only URI
+ references of modifications. When the notifier is acting in this
+ mode, several cycles MAY be needed before an initial "full" sync is
+ achieved. As the notifier MAY change modes in the middle of a
+ dialog, the subscriber is always responsible for taking appropriate
+ actions. Also, as the last resort, the subscriber MAY always disable
+ the usage of diff-processing by setting the "diff-processing"
+ parameter to "no-patching".
+
+ If a diff format cannot be applied due to patch processing and/or
+ programming errors (for a list, see Section 5.1 of [RFC5261]), the
+ subscriber SHOULD refresh the subscription and disable patching by
+ setting the "diff-processing" parameter to "no-patching". The
+ subscriber SHOULD NOT reply with a non-200 response since the
+ notifier cannot make corrections.
+
+ During unconditional re-subscriptions, the subscriber MUST stamp the
+ received state of all previous resources as stale. However, if a
+ conditional [RFC5839] re-subscription is successful, the subscriber
+ MUST preserve the current state of resources unless the subscribed
+ URI list has changed. That is, the subscriber MUST fetch the
+ resource's state, for example, from some local cache.
+
+
+
+
+Urpalainen & Willis Standards Track [Page 12]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+4.9. Handling of Forked Requests
+
+ This specification allows only a single dialog to be constructed from
+ an initial SUBSCRIBE request. If the subscriber receives forked
+ responses to a SUBSCRIBE, the subscriber MUST apply the procedures in
+ Section 4.4.9 of RFC 3265 [RFC3265] for handling non-allowed forked
+ requests.
+
+4.10. Rate of Notifications
+
+ Notifiers of an "xcap-diff" event package SHOULD NOT generate
+ notifications for a single subscription at a rate of more than once
+ every five seconds.
+
+4.11. State Agents
+
+ State agents play no role in this package.
+
+5. An Initial Example NOTIFY Document
+
+ Figure 2 shows an example initial XCAP diff format document provided
+ by the first NOTIFY request to the SUBSCRIBE example in Figure 1.
+ The following is an example Event header field for this SUBSCRIBE
+ request:
+
+ Event: xcap-diff; diff-processing=aggregate
+
+ The subscriber requests that the notifier "aggregate" XCAP component
+ updates and anticipates that the subsequent notifications will
+ contain aggregated patches to these documents.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 13]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <d:xcap-diff xmlns:d="urn:ietf:params:xml:ns:xcap-diff"
+ xmlns:s="urn:ietf:params:xml:ns:rls-services"
+ xcap-root="http://xcap.example.com/root/">
+
+ <d:document new-etag="7ahggs"
+ sel="resource-lists/users/sip:joe@example.com/index"/>
+
+ <d:document new-etag="30376adf"
+ sel="pidf-manipulation/users/sip:joe@example.com/index"/>
+
+ <d:element sel="rls-services/users/sip:joe@example.com/index/
+ ~~/*/service%5b@uri='sip:marketing@example.com'%5d"
+ xmlns:rl="urn:ietf:params:xml:ns:resource-lists"
+ ><s:service uri="sip:marketing@example.com">
+ <s:list name="marketing">
+ <rl:entry uri="sip:joe@example.com"/>
+ <rl:entry uri="sip:sudhir@example.com"/>
+ </s:list>
+ <s:packages>
+ <s:package>presence</s:package>
+ </s:packages>
+ </s:service></d:element>
+
+ </d:xcap-diff>
+
+ Figure 2: An example initial XCAP diff format document
+
+ Note that the resource-list "index" document included only the new
+ ETag value, as the document existed during the subscription time. In
+ the "pidf-manipulation" collection, there is only a single document
+ for which the user has read privileges. The <service> element exists
+ within the rls-services "index" document and its content is shown.
+ Note also that the <service> element was located using the Default
+ Document Namespace (no prefix in XCAP Node Selector value) although
+ it has an "s" prefix in the source document.
+
+6. IANA Considerations
+
+ IANA has added a new event package to the SIP Event Types Namespace
+ registry as follows:
+
+ Package Name Type Contact Reference
+ ------------- -------- ------- ---------
+ xcap-diff package IETF Real-time Applications [RFC5875]
+ <rai@ietf.org>
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 14]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+7. Security Considerations
+
+ This document defines a new SIP event package for the SIP event
+ notification framework specified in RFC 3265 [RFC3265]. As such, all
+ the security considerations of RFC 3265 apply. The configuration
+ data can contain sensitive information, and both the client and the
+ server need to authenticate each other. The notifiers MUST
+ authenticate the "xcap-diff" event package subscriber using the
+ normal SIP authentication mechanisms, for example, Digest as defined
+ in Section 22 of RFC 3261 [RFC3261]. The notifiers MUST be aware of
+ XCAP User Identifiers (XUI) and how to map the authenticated SIP
+ identities unambiguously with XUIs.
+
+ Since XCAP [RFC4825] provides a basic authorization policy for
+ resources and since notifications contain content similar to XCAP
+ resources, the security considerations of XCAP also apply. The
+ notifiers MUST obey the XCAP authorization rules when signalling
+ resource changes. In practice, this means following the read
+ privilege rules of XCAP resources.
+
+ Denial-of-service attacks against notifiers deserve special mention.
+ The following can cause denial of service due to intensive
+ processing: subscriptions to a long list of URIs, "pending"
+ subscriptions to non-existent documents or XCAP components, and diff-
+ generation algorithms that try to optimize the required bandwidth
+ usage to extremes.
+
+ The mechanism used for conveying xcap-diff event information MUST
+ ensure integrity and SHOULD ensure confidentially of the information.
+ An end-to-end SIP encryption mechanism, such as S/MIME described in
+ Section 26.2.4 of RFC 3261 [RFC3261], SHOULD be used. If that is not
+ available, it is RECOMMENDED that TLS [RFC5246] be used between
+ elements to provide hop-by-hop authentication and encryption
+ mechanisms described in Sections 26.2.2 ("SIPS URI Scheme") and
+ 26.3.2.2 ("Interdomain Requests") of RFC 3261 [RFC3261].
+
+8. Acknowledgments
+
+ The author would like to thank Jonathan Rosenberg for his valuable
+ comments and for providing the initial event package, and Aki Niemi,
+ Pekka Pessi, Miguel Garcia, Pavel Dostal, Krisztian Kiss, Anders
+ Lindgren, Sofie Lassborn, Keith Drage, Stephen Hinton, Byron Campen,
+ Avshalom Houri, Ben Campbell, Paul Kyzivat, Spencer Dawkins, Pasi
+ Eronen, and Chris Newman for their valuable comments. Lisa Dusseault
+ critiqued the document during IESG review, raising numerous issues
+ that resulted in improved document quality. Further, technical
+ writer A. Jean Mahoney devoted countless hours to integrating Lisa's
+ comments and cleaning up the technical English usage.
+
+
+
+Urpalainen & Willis Standards Track [Page 15]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+9. References
+
+9.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
+ Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
+ Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
+
+ [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
+ A., Peterson, J., Sparks, R., Handley, M., and E.
+ Schooler, "SIP: Session Initiation Protocol", RFC 3261,
+ June 2002.
+
+ [RFC3265] Roach, A., "Session Initiation Protocol (SIP)-Specific
+ Event Notification", RFC 3265, June 2002.
+
+ [RFC4825] Rosenberg, J., "The Extensible Markup Language (XML)
+ Configuration Access Protocol (XCAP)", RFC 4825, May 2007.
+
+ [RFC4826] Rosenberg, J., "Extensible Markup Language (XML) Formats
+ for Representing Resource Lists", RFC 4826, May 2007.
+
+ [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", STD 68, RFC 5234, January 2008.
+
+ [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
+ (TLS) Protocol Version 1.2", RFC 5246, August 2008.
+
+ [RFC5261] Urpalainen, J., "An Extensible Markup Language (XML) Patch
+ Operations Framework Utilizing XML Path Language (XPath)
+ Selectors", RFC 5261, September 2008.
+
+ [RFC5839] Niemi, A. and D. Willis, "An Extension to Session
+ Initiation Protocol (SIP) Events for Conditional Event
+ Notification", RFC 5839, May 2010.
+
+ [RFC5874] Rosenberg, J. and J. Urpalainen, "An Extensible Markup
+ Language (XML) Document Format for Indicating a Change in
+ XML Configuration Access Protocol (XCAP) Resources",
+ RFC 5874, May 2010.
+
+
+
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 16]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+9.2. Informative References
+
+ [RFC4918] Dusseault, L., "HTTP Extensions for Web
+ Distributed Authoring and Versioning
+ (WebDAV)", RFC 4918, June 2007.
+
+ [RFC5263] Lonnfors, M., Costa-Requena, J., Leppanen,
+ E., and H. Khartabil, "Session Initiation
+ Protocol (SIP) Extension for Partial
+ Notification of Presence Information",
+ RFC 5263, September 2008.
+
+ [W3C.REC-xml-20060816] Paoli, J., Bray, T., Yergeau, F., Maler, E.,
+ and C. Sperberg-McQueen, "Extensible Markup
+ Language (XML) 1.0 (Fourth Edition)", World
+ Wide Web Consortium FirstEdition REC-xml-
+ 20060816, August 2006,
+ <http://www.w3.org/TR/2006/REC-xml-20060816>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 17]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+Appendix A. Informative Examples
+
+ These examples illustrate the basic features of the xcap-diff event
+ package. Only the relevant header fields are shown. Note also that
+ the SIP request URIs of these examples don't correspond to reality.
+
+A.1. Initial Documents on an XCAP Server
+
+ The following documents exist on an XCAP server (xcap.example.com)
+ with an imaginary "tests" application usage (there's no Default
+ Document Namespace defined in this imaginary application usage).
+
+ http://xcap.example.com/tests/users/sip:joe@example.com/index:
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <doc>
+ <note>This is a sample document</note>
+ </doc>
+
+ and then
+
+ http://xcap.example.com/tests/users/sip:john@example.com/index:
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <doc>
+ <note>This is another sample document</note>
+ </doc>
+
+A.2. An Initial Subscription
+
+ The following demonstrates the listing of collection contents and it
+ shows only resources where the user has read privileges. The user
+ Joe, whose XUI is "sip:joe@example.com", sends an initial
+ subscription:
+
+ SUBSCRIBE sip:tests@xcap.example.com SIP/2.0
+ ...
+ Accept: application/xcap-diff+xml
+ Event: xcap-diff; diff-processing=aggregate
+ Content-Type: application/resource-lists+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
+ <list>
+ <entry uri="tests/users/sip:joe@example.com/"/>
+ </list>
+ </resource-lists>
+
+
+
+Urpalainen & Willis Standards Track [Page 18]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ In addition to the 200 (OK) response, the notifier sends the first
+ NOTIFY:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xcap-diff xmlns="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/">
+
+ <document new-etag="7ahggs"
+ sel="tests/users/sip:joe@example.com/index"/>
+
+ </xcap-diff>
+
+ The subscriber learns that the document on this "tests" application
+ usage is equivalent to its locally cached version, so it does not
+ act. If the local version had been different, the subscriber would
+ most likely re-fetch the document.
+
+ If the subscriber had requested the "tests/users/" collection, the
+ notification body would have been the same since Joe has no read
+ privileges to John's resources (XCAP default behavior).
+
+ If the Expires header field had a value "0", the request would be
+ similar to the PROPFIND method of WebDAV. The syntax and responses
+ differ, however.
+
+A.3. A Document Addition into a Collection
+
+ Let's say that Joe adds a new document to his collection, using
+ either the same client or another client running on a different
+ device. He does an HTTP PUT to his application usage collection:
+
+ PUT /tests/users/sip:joe@example.com/another_document HTTP/1.1
+ Host: xcap.example.com
+ ....
+ Content-Type: application/xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <doc>
+ <note>This is another sample document</note>
+ </doc>
+
+
+
+
+Urpalainen & Willis Standards Track [Page 19]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ This HTTP PUT request results in the XCAP client receiving a strong
+ HTTP ETag "terteer" for this new document.
+
+ Then the subscriber receives a notification afterwards:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xcap-diff xmlns="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/">
+
+ <document new-etag="terteer"
+ sel="tests/users/sip:joe@example.com/another_document"/>
+
+ </xcap-diff>
+
+ Note that the result is "additive"; it doesn't indicate the already
+ indicated "index" document. Only the initial (or refreshed)
+ notification contains all document URI references.
+
+ If Joe's client both modifies the documents and refreshes the
+ subscriptions, it would typically ignore this notification, since its
+ modifications had caused the notification. If the client that
+ received this NOTIFY hadn't submitted the document change, it would
+ probably fetch this new document.
+
+ If Joe's client refreshes the subscription with the same request body
+ as in the initial subscription, the result will include these two
+ documents: "index" and "another_document" with their ETags.
+
+A.4. A Series of XCAP Component Modifications
+
+ Now Joe's client uses its XCAP patching capability by doing the
+ following:
+
+ PUT /tests/users/sip:joe@example.com/index/~~/doc/foo HTTP/1.1
+ Host: xcap.example.com
+ ....
+ Content-Type: application/xcap-el+xml
+ Content-Length: [XXX]
+
+ <foo>this is a new element</foo>
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 20]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ Since the insertion of the element is successful, Joe's client
+ receives the new HTTP ETag "fgherhryt3" of the updated "index"
+ document.
+
+ Immediately thereafter, Joe's client issues another HTTP request
+ (this request could even be pipe-lined):
+
+ PUT /tests/users/sip:joe@example.com/index/~~/doc/bar HTTP/1.1
+ Host: xcap.example.com
+ ....
+ Content-Type: application/xcap-el+xml
+ Content-Length: [XXX]
+
+ <bar>this is a bar element
+ </bar>
+
+ The reported new HTTP ETag of "index" is now "dgdgdfgrrr".
+
+ And Joe's client issues yet another HTTP request:
+
+ PUT /tests/users/sip:joe@example.com/index/~~/doc/foobar HTTP/1.1
+ Host: xcap.example.com
+ ....
+ Content-Type: application/xcap-el+xml
+ Content-Length: [XXX]
+
+ <foobar>this is a foobar element</foobar>
+
+ The reported new ETag of "index" is now "63hjjsll".
+
+ After awhile, Joe's client receives a notification with an embedded
+ patch since it has requested "aggregate" diff-processing and the
+ notifier is capable of producing them:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <d:xcap-diff xmlns:d="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/">
+
+ <d:document previous-etag="7ahggs3"
+ sel="tests/users/sip:joe@example.com/index"
+ new-etag="63hjjsll">
+ <d:add sel="*"
+
+
+
+Urpalainen & Willis Standards Track [Page 21]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ ><foo>this is a new element</foo><bar>this is a bar element
+ </bar><foobar>this is a foobar element</foobar></d:add>
+ </d:document>
+
+ </d:xcap-diff>
+
+ Joe's client applies this patch to the locally cached "index"
+ document, detects the ETag update, and stores the last ETag value.
+ Note how several XCAP component modifications were aggregated.
+
+ Note also that, if Joe's client did not have a locally cached version
+ of the reference document, it would have needed to do an HTTP GET
+ request after the initial notification. If the ETag of the received
+ resource by HTTP did not match either the previous or new ETag of
+ this aggregated patch, an out-of-sync condition would be probable.
+ This issue is not typical, but it can happen. To resolve the issue,
+ the client could re-fetch the "index" document and/or wait for
+ subsequent notifications to detect a match. A better and simpler way
+ to avoid the issue is to refresh the subscription with the "xcap-
+ patching" mode and later refresh with the "aggregate" mode.
+
+ Alternatively, if the notifier's operational mode been "xcap-
+ patching", the NOTIFY could have been the following:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <d:xcap-diff xmlns:d="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/">
+
+ <d:document previous-etag="7ahggs"
+ sel="tests/users/sip:joe@example.com/index"
+ new-etag="fgherhryt3">
+ <d:add sel="*"
+ ><foo>this is a new element</foo></d:add></d:document>
+
+ <d:document previous-etag="fgherhryt3"
+ sel="tests/users/sip:joe@example.com/index"
+ new-etag="dgdgdfgrrr">
+ <d:add sel="*"
+ ><bar>this is a bar element
+ </bar></d:add></d:document>
+
+ <d:document previous-etag="dgdgdfgrrr"
+
+
+
+Urpalainen & Willis Standards Track [Page 22]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ sel="tests/users/sip:joe@example.com/index"
+ new-etag="63hjjsll">
+ <d:add sel="*"
+ ><foobar>this is a foobar element</foobar></d:add></d:document>
+
+ </d:xcap-diff>
+
+ If the client had to re-fetch the "index" document after the initial
+ notification, it could have skipped some or all of these patches,
+ depending on whether the HTTP ETag matched some of these ETags in the
+ chain of patches. If the HTTP ETag did not match and the received
+ HTTP version is a newer version indicated in later notification(s),
+ the sync may then be achieved since the notifier provided the full
+ change history in the "xcap-patching" mode.
+
+ Last, the notifier could (temporarily) fall back to the "no-patching"
+ mode, which allows the notifier to keep the dialog alive when there
+ are too many updates:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xcap-diff xmlns="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/">
+
+ <document previous-etag="7ahggs3"
+ sel="tests/users/sip:joe@example.com/index"
+ new-etag="63hjjsll"/>
+
+ </xcap-diff>
+
+ At any time, the notifier may fall back to the "no-patching" mode for
+ some or all of the subscribed documents.
+
+A.5. An XCAP Component Subscription
+
+ The user Joe sends an initial subscription for the "id" attribute of
+ a <doc> element. The "index" document exists, but the <doc> root
+ element does not contain the "id" attribute at the time of the
+ subscription.
+
+
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 23]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ SUBSCRIBE sip:tests@xcap.example.com SIP/2.0
+ ...
+ Accept: application/xcap-diff+xml
+ Event: xcap-diff
+ Content-Type: application/resource-lists+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
+ <list>
+ <entry uri="tests/users/sip:joe@example.com/index/~~/doc/@id"/>
+ </list>
+ </resource-lists>
+
+ The first NOTIFY looks like the following since there is nothing to
+ indicate:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xcap-diff xmlns="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/"/>
+
+ Note that if the "index" document hadn't existed, the first NOTIFY
+ request would have been the same. The XCAP diff document format
+ doesn't indicate reasons for non-existing resources.
+
+ Afterwards, Joe's client updates the whole document root element
+ including the attribute "id" (not a typical XCAP operation or a
+ preferred one, just an illustration here):
+
+ PUT /tests/users/sip:joe@example.com/index/~~/doc HTTP/1.1
+ Host: xcap.example.com
+ ....
+ Content-Type: application/xcap-el+xml
+ Content-Length: [XXX]
+
+ <doc id="bar">This is a new root element</doc>
+
+ The new HTTP ETag of the "index" document is now "dwawrrtyy".
+
+
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 24]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ Then Joe's client gets a notification:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xcap-diff xmlns="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/">
+
+ <attribute sel="tests/users/sip:joe@example.com/index/~~/doc/@id"
+ >bar</attribute>
+
+ </xcap-diff>
+
+ Note that the HTTP ETag value of the new document is not shown, as it
+ is irrelevant for this use-case.
+
+ Then Joe's client removes the "id" attribute:
+
+ DELETE /tests/users/sip:joe@example.com/index/~~/doc/@id HTTP/1.1
+ Host: xcap.example.com
+ ....
+ Content-Length: 0
+
+ And the subscriber gets a notification:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xcap-diff xmlns="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/">
+
+ <attribute sel="tests/users/sip:joe@example.com/index/~~/doc/@id"
+ exists="0"/>
+
+ </xcap-diff>
+
+ The notification indicates that the subscribed attribute was removed
+ from the document. Naturally, attributes are "removed" if the
+ element where they belong is removed, for example, by an HTTP DELETE
+
+
+
+
+Urpalainen & Willis Standards Track [Page 25]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ request. The component selections indicate only the existence of
+ attributes or elements.
+
+A.6. A Conditional Subscription
+
+ The last example is a conditional subscription where a full refresh
+ can be avoided when there are no changes in resources. Joe's client
+ sends an initial subscription:
+
+ SUBSCRIBE sip:tests@xcap.example.com SIP/2.0
+ ...
+ Accept: application/xcap-diff+xml
+ Event: xcap-diff; diff-processing=xcap-patching
+ Content-Type: application/resource-lists+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
+ <list>
+ <entry uri="tests/users/sip:joe@example.com/"/>
+ </list>
+ </resource-lists>
+
+ Since there are now two documents in the repository, the first NOTIFY
+ looks like the following:
+
+ NOTIFY sip:joe@userhost.example.com SIP/2.0
+ ...
+ Event: xcap-diff
+ SIP-ETag: xggfefe54
+ Content-Type: application/xcap-diff+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xcap-diff xmlns="urn:ietf:params:xml:ns:xcap-diff"
+ xcap-root="http://xcap.example.com/">
+
+ <document new-etag="63hjjsll"
+ sel="tests/users/sip:joe@example.com/index"/>
+
+ <document new-etag="terteer"
+ sel="tests/users/sip:joe@example.com/another_document"/>
+
+ </xcap-diff>
+
+ Note that the NOTIFY request contains the SIP-ETag "xggfefe54". This
+ SIP-ETag is placed in the Suppress-If-Match header field of the
+ conditional subscription. The "diff-processing" mode also is changed
+
+
+
+Urpalainen & Willis Standards Track [Page 26]
+
+RFC 5875 XCAP Diff Event May 2010
+
+
+ (or is requested to change):
+
+ SUBSCRIBE sip:tests@xcap.example.com SIP/2.0
+ ...
+ Suppress-If-Match: xggfefe54
+ Accept: application/xcap-diff+xml
+ Event: xcap-diff; diff-processing=aggregate
+ Content-Type: application/resource-lists+xml
+ Content-Length: [XXX]
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
+ <list>
+ <entry uri="tests/users/sip:joe@example.com/"/>
+ </list>
+ </resource-lists>
+
+ If the notifier finds a match to the previous stored state when it
+ evaluates this request, it responds with 204 (No Notification). If
+ there are no reportable changes as per [RFC5839], NOTIFY request
+ generation is suppressed. When the notifier can aggregate several
+ modifications, this re-subscription enables the processing of that
+ mode thereafter. Indeed, the re-subscription may be quite process-
+ intensive, especially when there are a large number of relevant
+ reported resources.
+
+Authors' Addresses
+
+ Jari Urpalainen
+ Nokia
+ Itamerenkatu 11-13
+ Helsinki 00180
+ Finland
+
+ Phone: +358 7180 37686
+ EMail: jari.urpalainen@nokia.com
+
+
+ Dean Willis (editor)
+ Softarmor Systems LLC
+ 3100 Independence Pk #311-164
+ Plano, TX 75075
+ USA
+
+ Phone: +1 214 504 19876
+ EMail: dean.willis@softarmor.com
+
+
+
+
+
+Urpalainen & Willis Standards Track [Page 27]
+