view Side-By-Side changes
SIP J. Urpalainen Internet-Draft Nokia Intended status: Standards TrackOctober 3, 2008D. Willis, Ed. Expires:April 6,November 28, 2009 Softarmor Systems LLC May 27, 2009 An Extensible Markup Language (XML) Configuration Access Protocol (XCAP) Diff Event Packagedraft-ietf-sip-xcapevent-04draft-ietf-sip-xcapevent-07 Status of this MemoBy submitting this Internet-Draft, each author represents that any applicable patent or other IPR claimsThis Internet-Draft is submitted to IETF in full conformance with the provisions ofwhich heBCP 78 and BCP 79. This document may contain material from IETF Documents orshe is aware have beenIETF Contributions published orwillmade 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 bedisclosed,modified outside the IETF Standards Process, andanyderivative works ofwhich he or she becomes aware willit may not bedisclosed, in accordance with Section 6 of BCP 79.created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. 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." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire onApril 6,November 28, 2009. Copyright Notice Copyright (c) 2009 IETF Trust and the persons identified as the document authors. All rights reserved. Urpalainen & Willis Expires November 28, 2009 [Page 1] Internet-Draft XCAP Diff Event May 2009 This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents in effect on the date of publication of this document (http://trustee.ietf.org/license-info). Please review these documents carefully, as they describe your rights and restrictions with respect to this document. 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 ofthe partialchangesofto Extensible Markup Language (XML) Configuration Access Protocol (XCAP) resources. The initial synchronization information exchange and document updates are based on theXCAP-DiffXCAP Diff format.Urpalainen Expires April 6, 2009 [Page 1] Internet-Draft xcap diff event October 2008Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . .43 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 . . . . . . . . . . . . . . . . . .78 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 . . . . . . . . . . . . . . . 12 4.10. Rate of Notifications . . . . . . . . . . . . . . . . . .1213 4.11. State Agents . . . . . . . . . . . . . . . . . . . . . . .1213 5. An Initial Example NOTIFY document . . . . . . . . . . . . . .1213 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . .1314 7. Security Considerations . . . . . . . . . . . . . . . . . . .1415 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .1415 9. References . . . . . . . . . . . . . . . . . . . . . . . . . .1516 9.1. Normative References . . . . . . . . . . . . . . . . . . .1516 9.2. Informative References . . . . . . . . . . . . . . . . . .1617 Appendix A. Informative Examples . . . . . . . . . . . . . . . .1617 A.1. Initial documents on an XCAP server . . . . . . . . . . .1617 A.2. An Initial Subscription . . . . . . . . . . . . . . . . .1718 A.3. A Document Addition Into a Collection . . . . . . . . . .1819 A.4. A Series of XCAP Component Modifications . . . . . . . . .1920 A.5. An XCAP Component Subscription . . . . . . . . . . . . . . 23 A.6. A Conditional Subscription . . . . . . . . . . . . . . . .25 Author's Address .26 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 27Intellectual Property and Copyright Statements . . . . . . . . . . 28Urpalainen & Willis ExpiresApril 6,November 28, 2009 [Page 2] Internet-Draftxcap diff event October 2008XCAP Diff Event May 2009 1. Introduction The SIP Events framework [RFC3265] describes subscription and notification conventions for theSIP [RFC3261] protocol.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 modifyXML formattedXML-formatted application usage data stored on an XCAP server. WhiletheXCAPprotocolallowsseveralauthorized users or devices to modify the same XML document, XCAP does not provide an effectivesynchronizationmechanism (beyond polling) to keep resourcesequivalentsynchronized between a server and a client. This memo defines an "xcap-diff" event package that, together with the SIP event notification framework [RFC3265] and theXCAP-diffXCAP diff format [I-D.ietf-simple-xcap-diff], allows a user to subscribe to changes in an XML document, and to receive notifications whenevera change in anthe XML documenttakes place.changes. There are three basic features that this event packageenables with the XCAP-Diff [I-D.ietf-simple-xcap-diff] change notification format. Firstly, itenables: First, a client can subscribe to a listthe URI referencesof XCAPdocuments fromdocuments' URLs in a collection[RFC4918]located on an XCAP server. Thisis important whenallows a subscriberis doing an initial synchronization or a comparison of existingto compare server resourcestowith its local resources using thelocally cached XCAP documents, for example. The version-history of document comparisons are based onURLs and the strong entity tag (ETag) values of XCAPdocumentsdocuments, which arealso indicated withshown in theXCAP-Diff format. Secondly,XCAP Diff format, and to synchronize them. Second, this event package can signalwhenevera changeis happeningin thoseresources. The changes can be reported withresources in one of three ways. Thesimplest model is thatfirst mode onlydocument creations, updates and removals are indicated. The actual contents of those documents are not included inindicates thenotificationevent type and does not include document contents, so the subscriber usesthe (HTTP) RFC 2616HTTP [RFC2616]protocol for a retrieval of document contents. The two more complex modes allowto retrieve the updated document. The second mode includes document content or changesof documents to be indicated straightaway within notification messages, using theXML-Patch-Ops RFC 5261XML- Patch-Ops [RFC5261]semantics inside the XCAP-Diff [I-D.ietf-simple-xcap-diff] format. A client can then apply a conditional patch to locally cached documents based on the strong ETag values of documents.format with minimal notification size. Themost complex model produces the smallest documentsthird mode also includes document content or changes in notification messages, butit doesn't necessarily showis more verbose, and shows the full HTTPversion-history information unlikeversion- history. Third, theother, typically more verbose one. Lastly,client can subscribe to changes in specific XML element or attribute contents (XCAP components)can be received "in-band", that is straight within the XCAP-Diff notification format. For example, an XCAP element content can be requestedandindicated withoutreceive element or attribute contents in theneed of a separate HTTP GET Urpalainen Expires April 6, 2009 [Page 3] Internet-Draft xcap diff event October 2008 request.resulting XCAP Diff format notification messages. Ifthisthe requestednode either exists orcomponent does not exist but is latercreated or modified,created, the notifier sends a notificationbody indicates itswith the component's content.And similarly,The notifier also sends notifications when theremovals ofsubscribed XCAP components arereported,removed, for example after a successful HTTP DELETE request. 2. Terminology The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", Urpalainen & Willis Expires November 28, 2009 [Page 3] Internet-Draft XCAP Diff Event May 2009 "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,removedremoved, or retrieved withthe XCAP protocol.XCAP. Aggregating:WhileAn XCAP client can update only a single XCAPcomponentComponent at a timewithusing HTTP. However, arelevant HTTP request,notifier may be able to aggregate a series of these modificationscan be aggregated together with theinto a single notification using XML-Patch- Ops semanticswhen they are indicated withinencoded in theXCAP-DiffXCAP- Diff format. This document reuses terminology mostly defined in(XCAP) RFC 4825XCAP [RFC4825] and some in(WebDAV) RFC 4918WebDAV [RFC4918]. 4. XCAP-Diff Event Package 4.1. Overview of Operation With Basic RequirementsEnabling all of theTo receive "xcap-diff" event packagefeatures require thatfeatures, the subscriberMUST somehow signal to the notifier the resources it is interestedindicates its interest ingetting information. These resource selections are indicated simplycertain resources bysendingincluding aURI-list to the notifierURI list in the subscriptionbody. The URIs ofbody to the notifier. Each URL in this list MUSTpoint tobe acollection,HTTP URL that identifies adocumentcollection, an XCAP document, or an XCAP component.When collections are selected, the conventions applied follow the (WebDAV) RFC 4918 [RFC4918] semantics, that is, the subscriberCollection URLs MUSTadd thehave a trailing forward slash"/" character to the end of"/", following thepath segment of a URI.conventions of WebDAV [RFC4918]. A collection selection includes all documents in thatparticularcollection and recursivelyalsoall documents inany of the possiblesub-collections. TheURIURL of an XCAP componentselectorconsists of the documentselector addedURL with the XCAP NodeSelector.Selector added. Although the XCAP Node Selector allowsUrpalainen Expires April 6, 2009 [Page 4] Internet-Draft xcap diff event October 2008requesting all in-scope namespaces of an element,subscriptions to themthe client MUST NOTbe used.subscribe to namespaces. The notifier MUST support XCAP component subscriptions. The notifier sends the first notificationofin response to thesubscriptionsubscription, and this first notification MUSTalwayscontain theURI referencesURLs of thesubscribed, existingdocuments and XCAPattribute(s) with their content(s), and the subscribed, existing qualified namescomponents that are part ofXCAP element(s) preferably with their content(s).the subscription. Thenotifier MUST always supportfirst notification SHOULD contain the contents of subscribed XCAPcomponent subscriptions.documents and components. The subsequent notifications MAY contain patches to these documents. Thenotifier MUST support the simplest change notification model, but the XML-Patch-Ops diff-generation is RECOMMENDED to implement. Thesubscriber cancontrolspecify how the notifier will signal the changes ofdocuments. How this can be done, will be shown later in this document. Whenever a change in a resource or an XCAP component content is indicated insidedocuments by using theXCAP-Diff [I-D.ietf-simple-xcap-diff] format,'diff-processing' event Urpalainen & Willis Expires November 28, 2009 [Page 4] Internet-Draft XCAP Diff Event May 2009 package parameter, covered in thesubscriber MUST have read privilege to that particular resource.section Section 4.3 4.2. Event Package Name The name of this event package is "xcap-diff". As specified inRFC 3265[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"eventEvent headerparameterfield parameter, the subscriberdirects the notifier howindicates a preference as toapply the "XML diffing process" or in other words,how the notifier SHOULD indicate change notifications of documents. The possible values are "no-patching","xcap-patching""xcap-patching", and"aggregate" in increasing complexity order."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 such optimizes network traffic within the capabilities of the receiver), but MAY use "xcap-patching" as a matter of local policy, as all subscribers are required to support that mode. The "no-patching" value(the simplest operational change notification mode)means that the notifier indicates only the documentcreations, modificationsandremovalsthe event type (creation, modification, and removal) in the notification. The notification does not necessarily indicate the full HTTP ETag change history. Subscribers and notifiers MUST support the "no-patching" mode as a base-line for interoperability. The other, more complex modes areindicated.optional. The "xcap-patching" value means that the notifier includes allindividualupdated XCAP componentupdates made by XCAP clients along with thecontents and entity tag (ETag)changes are indicated.changes. The client receives the full (HTTP) ETag change history of a document. This is equivalent to sending individual notifications for each change. The "aggregate" value means that the notifierSHOULDMAY aggregate several individual XCAP component updates into a singleXCAP-DiffXCAP 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 "aggregate" mode and implement XML-Patch-Ops ( [RFC5261]) diff-generation, because this can greatly reduce the number of notification operations required. If the subscription does not containthis additional "diff- processing"the "diff-processing" header field parameter, the notifier SHOULDsend all individual changes so thatdefault to theclient receives"no-patching" mode, as this is thefull (HTTP) ETag changeonly mode for which implementation is required in both subscribers and notifiers. Urpalainen & Willis ExpiresApril 6,November 28, 2009 [Page 5] Internet-Draftxcap diff event October 2008 history of a document. In other words, "xcap-patching" is the default operational mode of a notifier. Note that the "no-patching" mode does not necessarily indicate the full HTTP ETag change history.XCAP Diff Event May 2009 Note:IfTo see the difference between "xcap-patching" and "aggregate" modes, consider a documenthistorythat has versionsfrom "a" to"a", "b"toand "c" with corresponding ETag values "1", "2" and"3", the "xcap- patching""3". The "xcap-patching" modeindicateswill include first the change from version "a" to "b" withpreviousthe versions' corresponding "1" andnew"2" ETags andalsothen the change from version "b" to "c" withprevioustheir "2" andnew"3"ETags for a particular document. A change from "a" to "b" can for example be an element addition to a document, so it is a single (atomic) change made by XCAP (HTTP) semantics. However, theETags. The "aggregate" modetries to optimizeoptimizes the change and indicatesfor exampleonly a single aggregated change from "a" to "c" withpreviousthe old "1" and new "3" ETags. If these changes are closely related,e.g.that is, the same element has been updated many times, the bandwidth savings arenaturallylarger. This "diff-processing" parameter is a subscriber hint to the notifier. The notifierMAY fall back tomay respond using a simpleroperational modemode, butit MUST NOT usenot a more complexone, when it signals changes. For example, an "aggregate" request MUST be served by the notifier in the "aggregate", "xcap-patching" or "no-patching" modes, and an "xcap- patching" requestone. Notifier selection of a mode is covered in Section 4.7. During re-subscriptions, the"xcap-patching" and "no-patching" modes. Naturally, the "no-patching" request MUST be served only insubscriber MAY change thesame "no-patching" mode.diff-processing parameter. The formal grammar [RFC5234] of the "diff-processing" parameter: diff-processing = "diff-processing"EQUALSEQUAL ( "no-patching" / "xcap-patching" / "aggregate" / token ) where EQUAL and token are defined in RFC 3261 [RFC3261]. 4.4. SUBSCRIBE Bodies The URI listof the requested URIs areis described by the XCAP resource list formatspecified in RFC 4826[RFC4826], anditis included as a body of the initial SUBSCRIBErequest that creates the subscription.request. Only a simple subset of that format is required, a flat list of XCAP R-URIs. The "uri" attribute of the <entry> element contains these URI values. Theusage ofsubscriber MUST NOT use hierarchical listsandor <entry-ref> references,etc. MUST NOT be used. However, using this format allows adding some futureetc., (though in the future, semantics may be expanded thanks tothese subscriptions.the functionality in the resource list format). In subsequent SUBSCRIBE requests, such as those used for refreshing the expiration timer, the subscribedURI-listURI list MAYchange. Subscribers need to appropriately populatechange, in which case theRequest-URInotifier 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. The SUBSCRIBE request MAY contain the Suppress-If-Match header field Urpalainen & Willis ExpiresApril 6,November 28, 2009 [Page 6] Internet-Draftxcap diff event October 2008XCAP Diff Event May 2009 [I-D.ietf-sipcore-subnot-etags], 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 notprovide any constraints to it.constrain that URI. It is assumed that the subscriber is provisioned with or has learned the URI of the notifier of thisevent package. This specification assumes that a subscriber populates initial SUBSCRIBE requests with the URI of that notifier. It is anticipated that theevent package. The XCAP server will usually becollocatedco-located with the SIP notifier, so the subscriber MAY use relative XCAPR-URIs. This means thatRequest-URIs. Because relative Request-URIs are allowed, the notifierhas then been provisioned withMUST know how to resolve these against the correct XCAP Root URIvalue, for example. A future specification(s) can be written for the more complex use-cases, this memo describes only the most simple one. Note: It is worth noting that the notifier and the XCAP server can be separated (running on different hosts). However, it requires that the notifier has some means (in real-time) to be signalled about content changes of documents on an XCAP server. Also theoretically, a single notifier could serve multiple XCAP servers and absolute XCAP R-URIs could then be used.value. Figure 1 showsan example ofasubscriptionSUBSCRIBE request and bodyofcovering several XCAP resources: a "resource-list" document, a specific element in a "rls- services"documentdocument, and a collection in "pidf-manipulation"Application Usage. For all of these resources the client MUST have read privilege in order to actually receive them in a NOTIFY request.application usage. The "Content-Type" header of this SUBSCRIBE request is"application/ resource-lists+xml"."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 Urpalainen & Willis Expires November 28, 2009 [Page 7] Internet-Draft XCAP Diff Event May 2009 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.Urpalainen Expires April 6, 2009 [Page 7] Internet-Draft xcap diff event October 20084.6. NOTIFY BodiesAs described in RFC 3265 [RFC3265],The format of the NOTIFY messagewill contain bodies that describebody is either thestatedefault ofthe subscribed resource. This body"application/xcap-diff+xml" or isina format listed in the Accept header field of theSUBSCRIBE, or a package-specific default if the Accept header field was omitted from theSUBSCRIBE. In this event package,the body of thenotificationcontainsmessages contain an XCAPdiffDiff document[I-D.ietf-simple-xcap-diff]. 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.. TheXCAP-DiffXCAP Diff format [I-D.ietf-simple-xcap-diff] canindicateinclude the full element and attribute content ofXML documents, and forXCAP documents and components. For documents, the format can also include corresponding URIs,theETagvaluesvalues, and patching instructions from version "a" to "b".Also the removals ofRemoval events (of documents,elements and attributeselements, or attributes) can beshown. With other thanidentified too. Except for collectionselectionsselections, 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. 4.7. Notifier Generation of NOTIFY Requests During the initialsubscriptionsubscription, or if the URI list changes in SUBSCRIBE refresh requests, the notifier MUSTfirstresolve the requested XCAPresources. If the subscribed body contains elements or attributes that it doesn't understand, they MUST be ignored by the notifier.resources and their privileges. If there are superfluous resource selections in the requestedURI-list,URI list, the notifier SHOULD NOT provide overlapping similar responses for these resources. A resourcewherefor which an authenticated userhasn't gotdoes not have a readprivilege,privilege MUST NOT be included in the XCAP-Diff format. Note thatfor example,an XCAP componentwhichthat could not be located with XCAPsemantics,semantics does not produce an error. Instead, the request remains in a "pending" state, that is, waiting for this resource to becreated.created (or read access granted). Subscriptions to collections have a similar property: once a new document is created into the subscribed collection, the creation of a new resource isnotifiedsignaled with the next NOTIFY request. After the notifier knows the list of authorized XCAPresources are known, the notifierresources, it generates the firstfull response. This initial notification bodyNOTIFY, which contains URI references tosubscribedall subscribed, existing documents for which the subscriber has read privileges, and typically XCAP component(s)actualof existing content. After sending the initial notification, the notifierMUST startselects a diff- processing mode for reporting changes. If the subscriber suggested a Urpalainen & Willis ExpiresApril 6,November 28, 2009 [Page 8] Internet-Draftxcap diff event October 2008 follow-upXCAP Diff Event May 2009 mode in the "diff-processing" parameter of thesubscribed XCAP componentSUBSCRIBE, the notifier MAY use that requested mode ordocument updates made by XCAP (HTTP) clients. The diff-processing parameter directs howMAY fall back to a simpler operational mode, but the notifierreports changes. RegardlessMUST NOT use a more complex mode than the one chosen by the subscriber. From least to most complex, the order ofthese operational modes,thesame end resultmodes isachieved,theresources MAY be kept in-sync. Some intermediate states offollowing: "no-patching", "xcap- patching", "aggregate". Thus, theversion-history of resources MAY be lost by these notifications,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 XCAPchanges MUST be maintained. The same rule applies ifchanges. If several changesforto a given resource areindicatedpresented in a single notification, the chronological update order MUSTfollowbe preserved in the XML document order of the notification body. Preservation of chronological order is required to produce a correct document in theXCAP- Diff document.subscriber. If content modifications are made out- of-order, an erroneous document would probably be formed. Whilewiththemost complex patching mode"aggregate"themode uses bandwidthusage is themostefficient,efficiently, it introduces other challenges. The initial synchronizationMAYmight fail with rapidly changing resources, because the "aggregate" modedoesn't necessarily indicatemessages might not include the full version-history of a document and the base XCAP protocol does not support version-history retrievals of documents.Secondly, whenWhen new documents are createdinto thein subscribed collections and the notifier is"aggregating"aggregating patches, the same issue can occur. In acorner-case,corner case, the notifier may not be able to provide patches with the XML-Patch-OpsRFC 5261[RFC5261] semantics. Therefore, if the notifier has to temporarily disablediff-generationdiff 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.The notifiers MAY decideIn other words, if theappropriate diff-generation (aggregation) logic themselves, for examplesubscriber loses track of the patching operations, the subscriber must refresh to a "known good" state by downloading the current document. Once it has done so, it can resume using xcap-patching. In the "aggregate" mode, the notifier chooses how long to wait forsubsequentmultiple patchesif there's already somethingtosignal. Whencombine. Even with rapidly changing resources the notifieris acting inMUST signal only the latest state: e.g. whether the XCAP component exists or not. In the "xcap-patching" mode,itthe notifier MAYalsodisable thediff-generationdiff- generation temporarily forsome reason forcertain resources, for example when the NOTIFY body becomes impractically large or an intermediate error has happened.AllSome XCAP clientsmaywill probably nottry to optimize changes to its extremes,have completely optimized their patch request, so even when acting in the"xcap-patching""xcap- patching" operationalmodemode, the notifier MAY try to optimize thediff-generation.Urpalainen & Willis Expires November 28, 2009 [Page 9] Internet-Draft XCAP Diff Event May 2009 diff-generation, for example by eliminating redundant patch operations. Otherwise said: the notifier is not required to send patch operations exactly as received by clients; rather it MAY notify with a more efficient patch operation that MUST produce the same result as the series of patch operations produced by the XCAP client. Note: It is straightforward to change the XCAPHTTP requestclient's change requests (sent via HTTP) totheuse XML-Patch-Ops semantics. While XCAP does not support patching of all XML nodetypes,types - forexampleexample, namespace declarations can not be addedseparately,separately - utilization of XML-Patch-Ops can sometimes significantly reduce the bandwidth requirementsinat the expense of extra processing.WhenExtension of XCAP for this utilization of patch-ops is outside the scope of this document, but it is evident that XCAP clients that produce efficient change requests using XML-Patch-Ops make it much easier for the notifier to produce an efficient change notification using XML-Patch-Ops. After the notifier has reportedthat somethe existence of an XCAPcomponents exist in a document,component, it MUST also reporttheir removalsits removal consistently. ForUrpalainen Expires April 6, 2009 [Page 9] Internet-Draft xcap diff event October 2008example, the removal of the parent element of the subscribed element requires the same signalling since the subscribed element ceases toexist afterexist. To signal theremoval. Theremoval of an XCAPcomponent is signalled by settingcomponent, the notifier sets the Boolean "exist" attribute valueto falseof the <element> or <attribute>elements. Even with rapidly changing resources the notifier MUST signal only the last existing state: whether the XCAP component exists or not. During re-subscriptions the diff-processing parameter MAY change. The value change influences only subsequent notifications not the notification (if generated) followed immediately after the (re-)SUBSCRIBE request.elements to false. When the notifierprocessreceives are-subscriptionre-subscription, it MUST re-send the current full XML-Diff content unless theNOTIFY message can be suppressed with thesubscriber has requested a conditional subscription[I-D.ietf-sip-subnot-etags] semantics[I-D.ietf-sipcore-subnot-etags] by using the headerSuppress- If-Match:field Suppress-If-Match: [ETag value]. With a conditionalre-subscriptionre- subscription, the notifier MUSTcomparealso inspect the subscription body when determining the current subscription state. Since the subscription is based on a list of XCAPR-URIsR-URIs, it is RECOMMENDED that the notifier does not consider the order of these URIs when determining the equivalence to "stored" previousstates, that the order of appearance of these URIs is not significant. Oncestates. 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. 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 requirein practice areliable transfer of NOTIFY messages. This means that all messages MUST successfully be transferredas otherwise patchingor the document will become out of sync, and then patches Urpalainen & Willis Expires November 28, 2009 [Page 10] Internet-Draft XCAP Diff Event May 2009 will most likely failor at least the document contents becomes to be out-of-sync.(or worse, have unintended consequences). This "xcap-diff" event package requires, similar to Partial-PIDF-Notify[I-D.ietf-simple-partial-notify]RFC 5263 [RFC5263], thatthe notifiersa notifier MUST NOT send a new NOTIFY request to the same dialog unless a successful200- response200-response has been received for the last sent NOTIFY request. If the NOTIFY request fails due to atimeout condition,timeout, the notifier MUST remove the subscription. Note: This requirement ensures that out-of-orderofevents will not happen or that the dialogwould continuewill terminate after non-resolvable NOTIFY request failures. In addition, some of the probable NOTIFY error responses(e.g. 401,407,413)(for example, 401, 407, 413) can possibly be handled gracefully without tearing down the dialog.IfIf, for example, the subscriber has selected too many elements to which to subscribe,sosuch that the notification body wouldbecomebe impractically large(e.g.(that is, an intermediate NOTIFY failure), the notifier MAY discardUrpalainen Expires April 6, 2009 [Page 10] Internet-Draft xcap diff event October 2008the <element> element content. The existence of elements is then indicated with an empty <element>elementelement, and the content is not shown for those resources. In other words, the <element> element does not not have a child elementthenwhich 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 retrievaltimetime, the subscriber MAY also receive patches to these documents (if it has requested them)to these documentsif the documents arechanging frequently. It can thus happen that thechanging. A subscriberreceives newer versions of documents (with HTTP) than what was indicated in the initial notification. If patches are received in these notifications and if all atomic XCAP modifications are indicated with both previous and new ETags of each resource, it is easy tocan chain the modification list forathe document andpossibly omit some or all ofaggregate thepatches based onchanges itself if thereceived ETag (with HTTP)notifications contain patches and indicate all atomic XCAP modifications with both previous and new ETags ofa document. Indeed, there's still a chance thateach resource ("xcap-patching" mode). If thereceivedversionbyreceived via HTTP is newer than anyof those versions indicated inreceived via thenotification so thatnotifications, the subscriber may not find an equivalent match of an ETag valueis not foundfrom the chain of patches. This can happen since notifications are reported afterthe actualHTTP changes and preferably at some minimum intervals. In such a case, the subscriber SHOULD either wait for subsequent notifications or refresh the subscription and repeat the described "sync" algorithm until a match is achieved.The notifier MAY at any time disable (temporarily) the diff- processing of some resources so that only URI references of modifications are received. So even when the notifier is acting in this simpler diff-processing ("xcap-patching") mode, several cycles MAY be needed before an initial "full" sync is achieved. As the notifier MAY also disable this diff-processing in the middle of a dialog, the subscriber is always, at any time responsible to make the appropriate, similar actions. Also as the last resortTo avoid out-of-sync issues, the subscriber MAYalways disable the usage of diff-processing. Ifstart the subscriptionis started straightawaywith the"aggregate" mode which doesn't necessarily show"xcap-patching" mode, and then refresh thefull version-history information,subscription with theprevious "sync" algorithm breaks more easily. Indeed, it is"aggregate" mode. Syncs are successful if the received(HTTP)HTTP ETag matcheseitherwith either the previous orthenew ETag of the reported aggregated patch.This failure MAY successfully be resolved by re-fetchingIf theout-of-sync document, waiting for subsequent notifications or by refreshingsubscription is started with thesubscription, but"aggregate" mode, which doesn't necessarily show thesame issue MAY still repeat. However, in suchfull Urpalainen & Willis ExpiresApril 6,November 28, 2009 [Page 11] Internet-Draftxcap diff event October 2008 a case or in general,XCAP Diff Event May 2009 version-history information, thesafer waysubscriber may not be able toavoidsynchronize its local cache with the first notification. The subscriber MAY resolve thisout-of-syncissueis to startby doing one of thesubscription withfollowing: re- fetching the"xcap-patching" mode, and afterwards refreshout-of-sync document, waiting for subsequent notifications, or by refreshing thesubscription tosubscription. However, the"aggregate" mode.same issue may still repeat. 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"modemode, 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 formatcan notcannot be appliedbecause of somedue to patch processing and/or programmingerrors,errors (for a list, see Section 5.1 ofRFC 5261 [RFC5261],[RFC5261]), the subscriber SHOULD refresh the subscription and disable patching by setting theusage of patching."diff-processing" parameter to "no-patching". The subscriber SHOULD NOT reply with a non-200 responsewhen this kind of error happens,since the notifiercould hardlycannot makeany corrective actions.corrections. During unconditionalre-subscriptionsre-subscriptions, the subscriber MUST stamp the received state of all previous resourcesMUST be stampedas stale. However, if a conditional[I-D.ietf-sip-subnot-etags][I-D.ietf-sipcore-subnot-etags] re-subscription issuccessfulsuccessful, the subscriber MUST preserve the current state of resourcesMUST be preservedunless the subscribedURI-listURI list haschanged, i.e.changed. That is, theresource's statesubscriber MUSTthen be fetchedfetch the resource's state, forexampleexample, from some local cache. 4.9. Handling of Forked Requests This specificationonlyallows only a single dialog to be constructedas a result of emittingfrom an initial SUBSCRIBE request.In case a SUBSCRIBE request is forked andIf the subscriber receives forkedresponses,responses to a SUBSCRIBE, the subscriber MUST apply the proceduresindicatedin Section 4.4.9 of RFC 3265 [RFC3265] for handling non-allowed forked requests. Urpalainen & Willis Expires November 28, 2009 [Page 12] Internet-Draft XCAP Diff Event May 2009 4.10. Rate of Notifications Notifiers of "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 initialXCAP-DiffXCAP Diff format document provided by the first NOTIFYrequest. The subscriber used the list as inrequest to the SUBSCRIBE example in Figure 1.AnThe following is an exampleeventEvent headeroffield for this SUBSCRIBE request:Urpalainen Expires April 6, 2009 [Page 12] Internet-Draft xcap diff event October 2008Event: xcap-diff; diff-processing=aggregate The subscriber requests that the notifierto actually"aggregate" XCAP component updatestogether. It is anticipatedand anticipates that the subsequent notificationswouldwill contain aggregated patches to these documents. Urpalainen & Willis Expires November 28, 2009 [Page 13] Internet-Draft XCAP Diff Event May 2009 <?xml version="1.0" encoding="UTF-8"?> <xcap-diff xmlns="urn:ietf:params:xml:ns:xcap-diff" xcap-root="http://xcap.example.com/root/"> <document new-etag="7ahggs" sel="resource-lists/users/sip:joe@example.com/index"/> <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:d="urn:ietf:params:xml:ns:xcap-diff" xmlns="urn:ietf:params:xml:ns:rls-services"xmlns:rl="urn:ietf:params:xml:ns:resource-lists" ><servicexmlns:rl="urn:ietf:params:xml:ns:resource-lists"> <service uri="sip:marketing@example.com"> <list name="marketing"> <rl:entry uri="sip:joe@example.com"/> <rl:entry uri="sip:sudhir@example.com"/> </list> <packages> <package>presence</package> </packages></service></d:element></service> </d:element> </xcap-diff> Figure 2: An example initialXCAP-DiffXCAP 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"collectioncollection, there is only a single documentwherefor which the user has read privilege. The <services> element exists within the rls-services "index" document and its content is shown. 6. IANA Considerations This specification instructs IANA to add a new event package to theUrpalainen Expires April 6, 2009 [Page 13] Internet-Draft xcap diff event October 2008SIP Event Types Namespace registry. The new data to be added is: Package Name Type Contact Reference ------------- -------- ------- --------- xcap-diff package IETF SIP Working Group [RFCXXXX] <sip@ietf.org> Urpalainen & Willis Expires November 28, 2009 [Page 14] Internet-Draft XCAP Diff Event May 2009 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 identities (XUI) and how to map the authenticated SIP identities unambiguously with XUIs. Since XCAP [RFC4825] provides a basic authorization policy for resources andassince notifications containsimilar fragmentcontentofsimilar 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 againstthenotifiers deserveaspecialmentioning. Subscriptionsmention. The following can cause denial of service due to intensive processing: subscriptions to a long list ofURIs MAY be too process- intensive. TheURIs, "pending" subscriptions to non-existent documents or XCAPcomponents impose the same challenge as well as thecomponents, and diff- generationalgorithms, at least when theyalgorithms that try to optimize the required bandwidth usage to extremes. The mechanism used for conveyingthisxcap-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 notavailableavailable, it is RECOMMENDED that TLS[RFC4346][RFC5246] be used between elements to provide hop-by-hop authentication and encryption mechanisms described in Section 26.2.2 "SIPS URI Scheme" and Section 26.3.2.2 "Interdomain Requests" of RFC 3261 [RFC3261]. 8. Acknowledgments The author would like to thank Jonathan Rosenberg for his valuableUrpalainen Expires April 6, 2009 [Page 14] Internet-Draft xcap diff event October 2008comments and 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, PaulKyzivat andKyzivat, SpencerDawkinsDawkins, 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 Urpalainen & Willis Expires November 28, 2009 [Page 15] Internet-Draft XCAP Diff Event May 2009 comments and cleaning up the technical English usage. 9. References 9.1. Normative References [I-D.ietf-simple-xcap-diff] Rosenberg, J. and J. Urpalainen, "An Extensible Markup Language (XML) Document Format for Indicating A Change in XML Configuration Access Protocol (XCAP) Resources", draft-ietf-simple-xcap-diff-09 (work in progress), May 2008. [I-D.ietf-sipcore-subnot-etags] Niemi, A., "An Extension to Session Initiation Protocol (SIP) Events for Conditional Event Notification", draft-ietf-sipcore-subnot-etags-02 (work in progress), April 2009. [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.[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, January 2008. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.[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.[RFC4346][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 Version1.1",1.2", RFC4346, April 2006.5246, August 2008. [RFC5261] Urpalainen, J., "An Extensible Markup Language (XML) PatchOperations Framework Utilizing XML Path Language (XPath) Selectors", RFC 5261, September 2008. [I-D.ietf-simple-xcap-diff] Rosenberg, J. and J. Urpalainen, "An Extensible Markup Language (XML) Document Format for Indicating A Change in XML Configuration Access Protocol (XCAP) Resources", draft-ietf-simple-xcap-diff-08 (work in progress), February 2008.Urpalainen & Willis ExpiresApril 6,November 28, 2009 [Page15]16] Internet-Draftxcap diff event October 2008 [I-D.ietf-sip-subnot-etags] Niemi, A., "An Extension to Session Initiation Protocol (SIP) Events for ConditionalXCAP Diff EventNotification", draft-ietf-sip-subnot-etags-02 (work in progress), FebruaryMay 2009 Operations Framework Utilizing XML Path Language (XPath) Selectors", RFC 5261, September 2008. 9.2. Informative References[W3C.REC-xml-20060816] Maler, E., Paoli, J., Bray, T., Yergeau, F., and C. Sperberg-McQueen, "Extensible Markup Language (XML) 1.0 (Fourth Edition)", World Wide Web Consortium Recommendation REC-xml-20060816, August 2006, <http://www.w3.org/TR/2006/REC-xml-20060816>.[RFC4918] Dusseault, L., "HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)", RFC 4918, June 2007.[I-D.ietf-simple-partial-notify][RFC5263] Lonnfors, M., Costa-Requena, J., Leppanen, E., and H. Khartabil, "Session Initiation Protocol (SIP)extensionExtension for Partial Notification of Presence Information",draft-ietf-simple-partial-notify-10 (work in progress), JanuaryRFC 5263, September 2008. [W3C.REC-xml-20060816] Sperberg-McQueen, C., Paoli, J., Bray, T., Maler, E., and F. Yergeau, "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>. Appendix A. Informative ExamplesIn all following examples only the very relevant headers for this event package or HTTP requests are shown.These examples illustrate the basic features ofthis "xcap-diff"the xcap-diff event package. Only the relevant header fields are shown. Note also that the SIP R-URIs of these examples don't correspond tothe reality, i.e. that they typically change within a dialog.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 (AU)application usage (there's noDefault Document Namespacedefault document namespace defined in this imaginaryAU).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: Urpalainen & Willis ExpiresApril 6,November 28, 2009 [Page16]17] Internet-Draftxcap diff event October 2008 and then http://xcap.example.com/tests/users/sip:john@example.com/index:XCAP Diff Event May 2009 <?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 a collection contents and it shows only resources where the user has read privilege. The userJoeJoe, whose XUI is"sip:joe@example.com" does"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> In addition to the 200 (OK) response, the notifier sends the firstNOTIFY looks like: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"/>Urpalainen Expires April 6, 2009 [Page 17] Internet-Draft xcap diff event October 2008</xcap-diff> The subscriberrealizeslearns thatthere's only a singlethe document on this "tests"Application Usage and it has already anapplication Urpalainen & Willis Expires November 28, 2009 [Page 18] Internet-Draft XCAP Diff Event May 2009 usage is equivalent to its locally cachedversionversion, so itdoesn't do any actions. Had it a differentdoes not act. If the local versionlocally, ithad been different, the subscriber would most likely re-fetch the document. If the subscriber had requested the "tests/users/"collectioncollection, the notification body would have been the same since Joe has no read privilege to John's resources (XCAP default behavior).So this demonstrates the listing of a collection contents and it shows only resources where the user Joe has read privilege.If the Expires headerhasfield had a value"0" this is effectively a similar"0", the request would be similar to the PROPFIND method ofWebDAV, the syntax'sWebDAV. 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,it can beusing either the same client or another client running on adifferent device where the subscriber runs or it is on the same. So hedifferent device. He does an HTTP PUT to hisAUapplication 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>As a result to thisThis HTTP PUT request results in the XCAP clientgetsreceiving a strong HTTP ETag "terteer" for this new document. Then the subscriber receives a notification afterwards:Urpalainen Expires April 6, 2009 [Page 18] Internet-Draft xcap diff event October 2008NOTIFY 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"/> Urpalainen & Willis Expires November 28, 2009 [Page 19] Internet-Draft XCAP Diff Event May 2009 </xcap-diff> Note thatthisthe result is"additive","additive"; it doesn't indicate the already indicated "index" document. Only the initial (or refreshed) notification contains all document URI references. Ifit isJoe's client both modifies thesame device doing modificationsdocuments and refreshes thesubscription, the subscribersubscriptions, it would typicallyignoresignore thisevent.notification, since its modifications had caused the notification. Ifit were an another devicethe client that received this NOTIFY hadn't submitted the document change, it would probably fetch this new document. Ifthe subscriber decides now to refreshJoe'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 Nowsome of theJoe's clientdecides to utilizeuses its XCAP patchingcapability, so it doescapability 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>AgainSince theXCAPinsertion of the element is successful, Joe's client receives the new HTTP ETag "fgherhryt3" of the updated "index"document as the insertion of the element is successful. Urpalainen Expires April 6, 2009 [Page 19] Internet-Draft xcap diff event October 2008document. Immediatelythereafter the XCAPthereafter, Joe's clientdoes again (even pipe-liningissues another HTTP request (this request couldwork):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> Urpalainen & Willis Expires November 28, 2009 [Page 20] Internet-Draft XCAP Diff Event May 2009 The reported new HTTP ETag of "index" is now "dgdgdfgrrr". Andyet again the XCAPJoe's clientdoes: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". Afterawhile the subscriberawhile, Joe's client receivesthena notification with an embedded patch since it has requested "aggregate" diff-processing and the notifier is capable of producing them:Urpalainen Expires April 6, 2009 [Page 20] Internet-Draft xcap diff event October 2008NOTIFY 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:addsel="*" ><foo>thissel="*"> <foo>this is a newelement</foo><bar>thiselement</foo> <bar>this is a bar element</bar><foobar>this</bar> <foobar>this is a foobarelement</foobar></d:add>element</foobar> </d:add> </d:document> </d:xcap-diff>So the subscriberJoe's client applies this patch to the locally cached "index"document and alsodocument, detects the ETagupdate (andupdate, and stores the last ETagvalue).value. Notethathow several XCAP component modifications wereaggregated together.aggregated. Note alsothatthat, iftheJoe's clienthadn't haddid not have a locally cached version Urpalainen & Willis Expires November 28, 2009 [Page 21] Internet-Draft XCAP Diff Event May 2009 of the reference document, it would have needed to do a HTTP GET request after the initial notification. If the ETag of the received resource by HTTP did notthenmatchwitheither the previous or new ETag of this aggregated patch, anout-of- syncout-of-sync condition would be probable.SoThis issue is not typical, but it can happen. To resolve the issue, the client couldtry tore-fetch the "index" documentand resolve the issueand/or wait for subsequent notifications to detect a match.Another, and a more certainA better and simpler way to avoid theissue,issue is to refresh the subscription with the"xcap-patching""xcap- patching" mode and later refreshtowith the "aggregate" mode.That said, it is not typical that this issue occurs, but it can happen and the client (subscriber) is about to handle the consequences. Had the "xcap-patching" mode been the operational mode ofAlternatively, if thenotifier, so as an alternative,notifier's operational mode been "xcap- patching", the NOTIFYresponsecould havebeen: Urpalainen Expires April 6, 2009 [Page 21] Internet-Draft xcap diff event October 2008been 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:addsel="*" ><foo>thissel="*"> <foo>this is a newelement</foo></d:add</d:document>element</foo> </d:add> </d:document> <d:document previous-etag="fgherhryt3" sel="tests/users/sip:joe@example.com/index" new-etag="dgdgdfgrrr"> <d:addsel="*" ><bar>thissel="*"> <bar>this is a bar element</bar></d:add</d:document></bar> </d:add> </d:document> <d:document previous-etag="dgdgdfgrrr" sel="tests/users/sip:joe@example.com/index" new-etag="63hjjsll"> <d:addsel="*" ><foobar>thissel="*"> <foobar>this is a foobarelement</foobar></d:add</d:document>element</foobar> </d:add> </d:document> </d:xcap-diff>Note that ifUrpalainen & Willis Expires November 28, 2009 [Page 22] Internet-Draft XCAP Diff Event May 2009 If the client had todo are-fetchofthe "index" document after the initial notification, itwould be easy to skipcould have skipped some or all of thesepatchespatches, depending onthe received resource version by HTTP, that is, whenwhether the HTTP ETagmatches withmatched some of these ETags in the chain of patches. Ifnot,the HTTP ETag did not match and the received HTTP versionmust beis a newer versionwhich will beindicated in later notification(s)andthen the syncMAYmay then be achievedifsince the notifieris able to still provideprovided the full changehistory. And lastlyhistory in the "xcap-patching" mode. Lastly, the notifier could (temporarily) fall back to the "no- patching"mode: Urpalainen Expires April 6, 2009 [Page 22] Internet-Draft xcap diff event October 2008mode, 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-diffxmlns:d="urn:ietf:params:xml:ns: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>This fall back allows to keep the dialog alive, for example when there are really (too) many rapidly changing updates happening. So atAt any time, the notifier may fall back tothis simplestthe "no-patching" mode for some(or all)or all of the subscribed documents. A.5. An XCAP Component Subscription The user Joedoessends an initial subscription for the "id" affribute 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 Expires November 28, 2009 [Page 23] Internet-Draft XCAP Diff Event May 2009 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>In addition to the 200 OK response, theThe first NOTIFY looks like the following sincethere'sthere is nothing to indicate:Urpalainen Expires April 6, 2009 [Page 23] Internet-Draft xcap diff event October 2008NOTIFY 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. TheXCAP-DiffXCAP Diff document format doesn't indicate reasons for non-existing resources. Afterwards Joe'sXCAPclient updates the whole document root element including the attribute "id" (not a typical XCAP operation nor 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> Urpalainen & Willis Expires November 28, 2009 [Page 24] Internet-Draft XCAP Diff Event May 2009 The new HTTP ETag of the "index" document is now "dwawrrtyy". Thenthe subscriberJoe'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/"> <attributesel="tests/users/sip:joe@example.com/index/~~/doc/@id" >bar</attribute>sel="tests/users/sip:joe@example.com/index/~~/doc/@id"> bar </attribute> </xcap-diff>Urpalainen Expires April 6, 2009 [Page 24] Internet-Draft xcap diff event October 2008Note that the HTTP ETag value of the new document is not shown as it is irrelevant for this use-case. Then Joe'sXCAPclient 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> Urpalainen & Willis Expires November 28, 2009 [Page 25] Internet-Draft XCAP Diff Event May 2009 The notification indicates that the subscribed attribute was removed from the document. Naturally attributes are "removed" if the element where they belonggets removed e.g.is removed, for example byaan HTTP DELETE request. The component selections indicate only the existence of attributes or elements. A.6. A Conditional Subscription The last example isabouta conditional subscriptionwith which the regeneration ofwhere a full refresh can be avoided when there are no changes in resources.The user Joe doesJoe's client sends an initial subscription:Urpalainen Expires April 6, 2009 [Page 25] Internet-Draft xcap diff event October 2008SUBSCRIBE 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>In addition toSince there are now two documents in the200 OK response,repository, the first NOTIFY looks like(since there are now two documents attherepository):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> Urpalainen & Willis Expires November 28, 2009 [Page 26] Internet-Draft XCAP Diff Event May 2009 Note that the NOTIFY requestresponds withcontains the SIP-ETag "xggfefe54".So a subscription refresh whereThis SIP-ETag is placed in the Suppress-If-Match header field of the conditional subscription. The "diff-processing" mode also is changed (or is requested tochange), looks like: Urpalainen Expires April 6, 2009 [Page 26] Internet-Draft xcap diff event October 2008change): 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>SoIf the notifierevaluates this request and if itfinds 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[I-D.ietf-sip-subnot-etags] the whole[I-D.ietf-sipcore-subnot-etags], NOTIFY request generation isbeingsuppressed. When the notifieris capable of aggregatingcan aggregate several modifications, thisre- subscription effectivelyre-subscription enables the processing of that mode thereafter. Indeed, the re-subscription may be quiteprocess- intensive,process-intensive, especially when there are a large number of relevant reported resources.Author's AddressAuthors' Addresses Jari Urpalainen Nokia Itamerenkatu 11-13 Helsinki 00180 Finland Phone: +358 7180 37686 Email: jari.urpalainen@nokia.com Urpalainen & Willis ExpiresApril 6,November 28, 2009 [Page 27] Internet-Draftxcap diff event October 2008 Full Copyright Statement Copyright (C) The IETF Trust (2008). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Intellectual Property The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79. Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.XCAP Diff Event May 2009 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 ExpiresApril 6,November 28, 2009 [Page 28] ----