view Side-By-Side changes
Internet Draft Ericsson Inc. Category: Standards TrackJulyNovember 2001 ExpiresJanuaryMay 2002<draft-ietf-sip-events-00.txt><draft-ietf-sip-events-01.txt> SIP-Specific Event Notification Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. 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 cite them other than as "work in progress". The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/lid-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html This document is an individual submission to the IETF. Comments should be directed to the authors. Abstract This document describes an extension to the Session Initiation Protocol (SIP). The purpose of this extension is to provide an extensible framework by which SIP nodes can request notification from remote nodes indicating that certain events have occurred. Concrete uses of the mechanism described in this document may be standardized in the future. Note that the event notification mechanisms defined herein are NOT intended to be a general-purpose infrastructure for all classes of event subscription and notification. 1. Table of Contents 1. Table of Contents...................................... 1 2. Introduction........................................... 3 2.1. Overview of Operation..................................34 3.Event Packages.........................................Syntax................................................. 4 Roach [Page 1] Internet Draft SIP-Specific Event NotificationJulyNovember 2001 3.1.Appropriateness of Usage............................... 4 3.2. Additional Guidelines.................................. 4 3.3. Sub-packages........................................... 5 3.4. Event Package Responsibilities......................... 5 3.4.1. Event Package Name..................................... 6 3.4.2. Event Package Parameters............................... 6 3.4.3. SUBSCRIBE Bodies....................................... 6 3.4.4. Subscription Duration.................................. 6 3.4.5. NOTIFY Bodies.......................................... 6 3.4.6. Subscriber generation of SUBSCRIBE requests............ 7 3.4.7. Notifier processing of SUBSCRIBE requests.............. 7 3.4.8. Notifier generation of NOTIFY requests................. 7 3.4.9. Subscriber processing of NOTIFY requests............... 7 3.4.10. Handling of forked requests............................ 7 3.4.11. Rate of notifications.................................. 8 3.4.12. State Agents and Notifier Migration.................... 8 3.4.13. Examples............................................... 8 4. Syntax................................................. 8 4.1.New Methods............................................9 4.1.1.4 3.1.1. SUBSCRIBE method.......................................10 4.1.2.5 3.1.2. NOTIFY method..........................................11 4.2.6 3.2. New Headers............................................11 4.2.1.6 3.2.1. "Event" header.........................................11 4.2.2.6 3.2.2. "Allow-Events" Header..................................12 4.3.7 3.2.3. "Subscription-Expires" Header.......................... 7 3.3. New Response Codes.....................................12 4.3.1.7 3.3.1. "202 Accepted" Response Code...........................12 4.3.2.8 3.3.2. "489 Bad Event" Response Code..........................12 5.8 4. Node Behavior..........................................13 5.1.8 4.1. General................................................ 8 4.1.1. Route Handling......................................... 8 4.1.2. Detecting support for SUBSCRIBE and NOTIFY............. 9 4.1.3. CANCEL requests........................................ 9 4.1.4. State Agents and Notifier Migration.................... 9 4.2. Description of SUBSCRIBE Behavior......................13 5.1.1.10 4.2.1. Correlation tolegs,dialogs, calls, andterminals.............. 13 5.1.2.terminals........... 10 4.2.2. Subscription duration..................................14 5.1.3.11 4.2.3. Identification of Subscribed Events and Event Classes..14 5.1.4.11 4.2.4. Additional SUBSCRIBE Header Values.....................15 5.1.5.12 4.2.5. Subscriber SUBSCRIBE Behavior..........................15 5.1.6.12 4.2.6. Proxy SUBSCRIBE Behavior...............................17 5.1.7.14 4.2.7. Notifier SUBSCRIBE Behavior............................17 5.2.14 4.3. Description of NOTIFY Behavior.........................19 5.2.1.17 4.3.1. Correlation............................................20 5.2.2.17 4.3.2. Identification of reported events, event classes, and c20 5.2.3.18 4.3.3. Notifier NOTIFY Behavior...............................21 5.2.4.18 4.3.4. Proxy NOTIFY Behavior..................................22 5.2.5.20 4.3.5. Subscriber NOTIFY Behavior.............................22 5.3.20 4.4. Polling Resource State.................................23 5.4.21 4.5. Allow-Events header usage.............................. 21 5. Event Packages......................................... 21 5.1. Appropriateness of Usage............................... 22 5.2. Sub-packages........................................... 22 5.3. Amount of State to be Conveyed......................... 236. Security Considerations................................5.3.1. Complete State Information............................. 237. IANA Considerations....................................5.3.2. State Deltas........................................... 23 5.4. Event Package Responsibilities......................... 247.1. Registration Template..................................5.4.1. Event Package Name..................................... 248. Open Issues............................................5.4.2. Event Package Parameters............................... 24 5.4.3. SUBSCRIBE Bodies....................................... 24 5.4.4. Subscription Duration.................................. 258.1. Denial-of-Service attacks..............................5.4.5. NOTIFY Bodies.......................................... 258.2.5.4.6. Notifier processing of SUBSCRIBEForking......................................requests.............. 25 5.4.7. Notifier generation of NOTIFY requests................. 25 5.4.8. Subscriber processing of NOTIFY requests............... 25 5.4.9. Handling of forked requests............................ 26 5.4.10. Rate of notifications.................................. 26 5.4.11. State Agents........................................... 26 Roach [Page 2] Internet Draft SIP-Specific Event NotificationJulyNovember 20019. Changes................................................5.4.12. Examples............................................... 26 6. Security Considerations................................ 279.1. Changes from draft-roach-...-03........................6.1. Access Control......................................... 27 6.2. Release of Sensitive Policy Information................ 27 6.3. Denial-of-Service attacks.............................. 27 7. IANA Considerations.................................... 27 7.1. Registration Template.................................. 28 8. Open Issues............................................ 29 8.1. CANCEL Handling........................................ 29 8.2. Version of SIP to reference............................ 29 8.3. Immediate NOTIFYs...................................... 30 9. Changes................................................ 30 9.1. Changes from draft-ietf-...-00......................... 30 9.2. Changes fromdraft-roach-...-02........................ 29draft-roach-...-03........................ 31 9.3. Changes from draft-roach-...-02........................ 33 9.4. Changes from draft-roach-...-01........................3035 10. References.............................................3135 11. Acknowledgements.......................................3236 12.Feedback and Discussion................................ 32 13.Author's Address.......................................3236 2. Introduction The ability to request asynchronous notification of events proves useful in many types of services for which cooperation between end-nodes is required. Examples of such services include automatic callback services (based on terminal state events), buddy lists (based on user presence events), message waiting indications (based on mailbox state change events), and PINT status (based on call state events). The methods described in this document allow a framework by which notification of these events can be ordered. The event notification mechanisms defined herein are NOT intended to be a general-purpose infrastructure for all classes of event subscription and notification. Meeting requirements for the general problem set of subscription and notification is far too complex for a single protocol. Our goal is to provide a SIP-specific framework for event notification which is not so complex as to be unusable for simple features, but which is still flexible enough to provide powerful services. Note, however, thatextensionsevent packages based on this framework may define arbitrarily complex rules which govern the subscription and notification for the events or classes of events they describe. This draft does not describe an extension which may be used directly; it must be extended by other drafts (herein referred to as "event packages.") In object-oriented design terminology, it may be thought of as an abstract base class which must be derived Roach [Page 3] Internet Draft SIP-Specific Event Notification November 2001 into an instantiatable class by further extensions. Guidelines for creating these extensions are described in section3.5. 2.1. Overview of Operation The general concept is that entities in the network can subscribe to resource or call state for various resources or calls in the network, and those entities (or entities acting on their behalf) can send notifications when those states change. A typical flow of messages would be:Roach [Page 3] Internet Draft SIP-Specific Event Notification July 2001Subscriber Notifier |-----SUBSCRIBE---->| Request state subscription |<-------200--------| Acknowledge subscription |<------NOTIFY----- | Return current state information |--------200------->| |<------NOTIFY----- | Return current state information |--------200------->| The subscriber and notifier entities need not necessarily be UAs, but often will be. Subscriptions are expired and must be refreshed in exactly the same manner as registrations (see RFC 2543 [1] ). 3.Event PackagesSyntax This sectioncovers several issues which should be taken into consideration when event packages based on SUBSCRIBE and NOTIFY are proposed. 3.1. Appropriateness of Usage When designing an event package usingdescribes themethods described in this draft for event notification, it is important to consider: is SIP an appropriate mechanismsyntax extensions required forthe problem set? Is SIP being selected because of some unique feature provided by the protocol (e.g. user mobility), or merely because "it can be done?" If you find yourself definingeventpackages for notifications related to, for example, network management or the temperature inside your car's engine, you may want to reconsider your selection of protocols. Those interestednotification inextending the mechanism definedSIP. Semantics are described inthissection 4. 3.1. New Methods This documentare urged to read "Guidelines for Authors ofdescribes two new SIPExtensions" [3] for further guidance regarding appropriate uses of SIP. Further, it is expected that this mechanism is not to be usedmethods: "SUBSCRIBE" and "NOTIFY." This table expands on tables 4 and 5 inapplications where the frequency of reportable events is excessively rapid (e.g. more than about once per second). A SIP network is generally going to be provisioned for a reasonable signalling volume; sending a notification every time a user's GPS position changes by one hundreth of a second could easily overload such a network. 3.2. Additional Guidelines When designing event packages, it is important to consider theRFC 2543 [1] . Roach [Page 4] Internet Draft SIP-Specific Event NotificationJulyNovember 2001type of information which will be conveyed during a notification. A natural temptation is to convey merely the event (e.g. "a new voice message just arrived") without accompanying state (e.g. "7 total voice messages"). This complicates implementation of subscribing entities (since they have to maintain complete state for the entity to which they have subscribed), and also is particularly susceptible to synchronization problems. It is therefore suggested that event packages are designed so as to notify of new state when an event occurs. In the circumstances that state may not be sufficient for a particular class of events, the event packages should include complete state information along with the event that occurred. (For example, "no customer service representatives available" may not be as useful "no customer service representatives available; representative sip:46@cs.xyz.int just logged off".) 3.3. Sub-packages Normal event packages define a set of state applied to a specific type of resource, such as user presence, call state, and messaging mailbox state. Sub-packages are a special type of package which define a set of state applied to other packages, such as statistics, access policy, and subscriber lists. Sub-packages may even be applied to other sub-packages. To extend the object-oriented analogy made earlier, sub-packages can be thought of as templatized C++ packages which must be applied to other packages to be useful. The name of a sub-package as applied to a packageHeader Where SUB NOT ------ ----- --- --- Accept R o o Accept-Encoding R o o Accept-Language R o o Allow 200 - - Allow 405 o o Authorization R o o Call-ID gc m m Contact R m m Contact 1xx o o Contact 2xx m o Contact 3xx m m Contact 485 o o Content-Encoding e o o Content-Length e o o Content-Type e * * CSeq gc m m Date g o o Encryption g o o Expires g o - From gc m m Hide R o o Max-Forwards R o o Organization g o o Priority R o o Proxy-Authenticate 407 o o Proxy-Authorization R o o Proxy-Require R o o Require R o o Retry-After R - - Retry-After 404,480,486 o o Retry-After 503 o o Retry-After 600,603 o o Response-Key R o o Record-Route R o o Record-Route 2xx o o Route R o o Server r o o Subject R o o Timestamp g o o To gc(1) m m Unsupported 420 o o User-Agent g o o Via gc(2) m m Warning r o o WWW-Authenticate 401 o o 3.1.1. SUBSCRIBE method Roach [Page 5] Internet Draft SIP-Specific Event Notification November 2001 "SUBSCRIBE" isformed by appending a period followed by the sub-package nameadded to theenddefinition of thepackage. For example, if a subpackage called "watcherinfo" were being applied to a package called "presence," the event token usedelement "Method" in"Event" and "Allow-Events" would be "presence.watcherinfo". Sub-packages must be defined so that they can be applied to any arbitrary package. In other words, sub-packages cannot be specifically tiedthe SIP message grammar. Like all SIP method names, the SUBSCRIBE method name is case sensitive. The SUBSCRIBE method is used toonerequest asynchronous notification of an event or set of events at afew "parent" packages in such a way that they will not work with other packages. 3.4. Event Package Responsibilities Event packages are not requiredlater time. 3.1.2. NOTIFY method "NOTIFY" is added tore-iterate anythe definition of thebehavior describedelement "Method" inthis document, although they may choose to do so for clarity or emphasis. In general, though, such packages are Roach [Page 5] Internet Draft SIP-Specific Event Notification July 2001 expected to describe only the behavior that extends or modifiesthebehavior described in this document. Note that any behavior designated with "SHOULD" or "MUST" in this documentSIP message grammar. The NOTIFY method isnot allowedused tobe changednotify a SIP node that an event which has been requested byextension documents; however, such documentsan earlier SUBSCRIBE method has occurred. It mayelect to strengthen "SHOULD" requirements to "MUST" strength if required by their application. In addition toalso provide further details about thenormal sections expected by "Instructions to RFC Authors" [7]event. 3.2. New Headers This table expands on tables 4 and"Guidelines for Authors of SIP Extensions" [3]5 in RFC 2543 [1] ,authors of event packages should takeas amended by thefollowing sections into consideration. 3.4.1. Event Package Name This mandatory section of an event package defines the token name to be used to designate the event package. It should include the information which appearschanges described inthe IANA registration of the token. For information on registering such types, seesection7. 3.4.2.3.1. Header field where proxy ACK BYE CAN INV OPT REG SUB NOT ----------------------------------------------------------------- Allow-Events g o o o o o o o o Allow-Events 489 - - - - - - m m EventPackage Parameters If parameters are to be used on theR - - - - - - m m Subscription-Expires R - - - - - - - o 3.2.1. "Event" header The following header is defined for the purposes of this specification. Event = ( "Event" | "o" ) ":" event-type *(( ";" parameter-name ["=" ( token | quoted-string ) ] ) event-type = event-package *( "." event-subpackage ) event-package = token-nodot event-subpackage = token-nodot token-nodot = 1*( alphanum | "-" | "!" | "%" | "*" | "_" | "+" | "`" | "'" | "~" ) Event is added tomodifythebehaviordefinition of theevent package,element "request-header" in thesyntax and semantics of such headers must be clearly defined. 3.4.3. SUBSCRIBE Bodies It is expected that most, butSIP message grammar. This document does notall, event packages willdefinesyntax and semanticsvalues forSUBSCRIBE method bodies; these bodiesevent-types. These values willtypically modify, expand, filter, throttle, and/or set thresholds for the class of events being requested. Designers ofbe defined by individual eventpackages are strongly encouraged to re-use existing MIME types for message bodies where practical. This mandatory section of an event package defines what type or types of event bodies are expected in SUBSCRIBE requests (or specify that no event bodies are expected). It should point to detailed definitions of syntaxpackages, andsemantics for all referenced body types. 3.4.4. Subscription Duration It is recommended that event packages give a suggested range of times considered reasonable for the duration of a subscription. Such packages should also define a default "Expires" value toMUST beused if none is specified. 3.4.5. NOTIFY BodiesRoach [Page 6] Internet Draft SIP-Specific Event NotificationJulyNovember 2001The NOTIFY body is used to report state onregistered with theresource being monitored. Each packageIANA. There mustdefine a whatbe exactly one event typeor types oflisted per eventbodiesheader. Multiple events per message areexpected in NOTIFY requests. Such packages must specify or cite detailed specifications fordisallowed. For thesyntax and semantics associated with such event body. Event packages also need to define which MIME typecurious, the "o" short form is chosen tobe assumed if none are specified in the "Accept"represent "occurrence." 3.2.2. "Allow-Events" Header The following headerofis defined for theSUBSCRIBE request. 3.4.6. Subscriber generationpurposes ofSUBSCRIBE requests This sectionthis specification. Allow-Events = ( "Allow-Events" | "u" ) ":" 1#event-type Allow-Events is added to the definition ofan event package describestheprocess by whichelement "general-header" in thesubscriber generates and sends a SUBSCRIBE request and processesSIP message grammar. For thesubsequent response. Such a sectioncurious, the "u" short form isoptional, but encouragedchosen to represent "understands." 3.2.3. "Subscription-Expires" Header The following header is defined for thesake of clarity. 3.4.7. Notifier processingpurposes ofSUBSCRIBE requests This section describes the processingthis specification. Subscription-Expires = "Subscription-Expires" ":" ( SIP-date | delta-seconds ) *( ";" subexp-params ) subexp-params = "reason" "=" reason-code | generic-param reason-code = "migration" | "maint" | "refused" | "timeout" | reason-extension reason-extension = token Subscription-Expires is added tobe performed bythenotifier upon receiptdefinition ofa SUBSCRIBE request. Such a sectionthe element "request-header" in the SIP message grammar. 3.3. New Response Codes Roach [Page 7] Internet Draft SIP-Specific Event Notification November 2001 3.3.1. "202 Accepted" Response Code The 202 response isrequired. 3.4.8. Notifier generation of NOTIFY requests This section of an event package describesadded to theprocess by which"Success" header field definition: Success = "200" ; OK | "202" ; Accepted "202 Accepted" has thenotifier generates and sends a NOTIFY request. It may optionally describesame meaning as that defined in HTTP/1.1 [5] . 3.3.2. "489 Bad Event" Response Code The 489 event response is added to thebehavior"Client-Error" header field definition: Client-Error = "400" ; Bad Request ... | "489" ; Bad Event "489 Bad Event" is used toprocessesindicate that thesubsequent response. Suchserver did not understand the event package specified in asection is required. 3.4.9. Subscriber processing of"Event" header field. 4. Node Behavior 4.1. General Unless noted otherwise, SUBSCRIBE and NOTIFY requestsThis sectionfollow the same protocol rules governing the usage ofan event package describestags, Route handling, Record-Route handling, Via handling, and Contact handling as INVITE; retransmission, reliability, CSeq handling and provisional responses are theprocess followed bysame as those defined for BYE. For thesubscriber upon receiptpurposes of this document, aNOTIFY request, including any logic required to form a coherent resource state (if applicable). 3.4.10. Handling"dialog" is defined as all messages sharing the tuple offorked requests Each event package should specify whether forked SUBSCRIBE"To" (including tag), "From" (including tag), and "Call-Id." As in INVITE-initiated dialogs, requests containg no "To" tag areallowed to install multiple subscriptions. If such behavior is not allowed, any NOTIFY messages not matching the 200-class response to the initial SUBSCRIBE message are respondedalso considered towith a 481. In the case that multiple subscriptions are allowed, the event package must specify whether mergingbe part of thenotifications to formsame dialog as messages which contain asingle state is required,"To" tag but otherwise match. 4.1.1. Route Handling Route andhow such merging is to be performed. Note that itRecord-Route handling for SUBSCRIBE and NOTIFY dialogs ispossible that some event packages may be definedgenerally the same as for INVITE and its subsequent responses. The exact method for echoing Record-Route headers insuch a way that each leg is tiedresponses and using them toa mutually exclusive state whichform Route headers in subsequent requests isunaffected bydescribed in RFC2543 [1] . For theother legs; this mustpurposes of the following Roach [Page7]8] Internet Draft SIP-Specific Event NotificationJulyNovember 2001be clearly stated if it isdiscussion, thecase. 3.4.11. Rate of notifications Each event package"Contact" header isexpected to define a requirement (RECOMMENDED, SHOULD or MUST strength) which defines an absolute maximum onconsidered part of therate at which notifications are allowed to be generated by a single notifier. Such packages may further define"Record-Route" set. From athrottle mechanism which allows subscribers to further limitsubscriber perspective, therate of notification. 3.4.12. State Agents"Record-Route" headers received in a SUBSCRIBE response are stored locally andNotifier Migration Designersplaced in the "Route" headers for SUBSCRIBE refreshes. To support forking ofevent packages should consider whether their package can benefit from network aggregation points ("State Agents") and/or nodes which act on behalf of other nodes. (For example, nodes which provide state information about a resource when such a resource is unable or unwilling to provide such state information itself). An example of such an application is a node which tracksSUBSCRIBE requests, "Record-Route" headers received in NOTIFY requests MUST be echoed back in thepresenceNOTIFY responses; if no route for the dialog has been established, these "Record-Route" headers MUST be stored locally andavailability of a userMUST be placed in thenetwork. When state agents"Route" headers for SUBSCRIBE refreshes. From a notifier perspective, SUBSCRIBE request "Record-Route" headers areused, it may make sense to allow migration of subscriptions between state agentsechoed back in the SUBSCRIBE response and stored locally. The locally stored copy of thenodes for which they are providing state aggregation (or even among various state agents). Designers"Record-Route" headers is placed in the "Route" headers when generating NOTIFY requests. The result ofpackages using state agents are encouragedthe forgoing rules is that proxies wishing to remain on the signalling path for subsequent requests in the dialog MUST includesuchthemselves in afeature with detailed description"Record-Route" for all requests, not just the initial SUBSCRIBE. 4.1.2. Detecting support for SUBSCRIBE and NOTIFY Neither SUBSCRIBE nor NOTIFY necessitate the use ofhow such migration"Require" or "Proxy-Require" headers; similarly, there isperformed. Note thatno token defined for "Supported" headers. If necessary, clients may probe for themechanismsupport ofsending a "NOTIFY" with an "Expires" headerSUBSCRIBE and NOTIFY using the OPTIONS request defined in RFC2543 [1] . The presence of"0"the "Allow-Events" header in a message isan effective way to force a subscribersufficient tore-subscribe, whichindicate support for SUBSCRIBE and NOTIFY. The "methods" parameter for Contact maycome in usefulalso be used to specifically announce support for SUBSCRIBE and NOTIFY messages whendesigning a migration scheme. 3.4.13. Examples Event packages should include several demonstrative message flow diagrams paired with several typical, syntactically correctregistering. (See reference [8] for details on the "methods" parameter). 4.1.3. CANCEL requests For the purposes of generality, both SUBSCRIBE andcomplete messages. ItNOTIFY MAY be canceled; however, doing so isrecommended that documents describing event packages clearly indicate that such examples are informative andnotnormative,recommended. Successfully cancelled SUBSCRIBE and NOTIFY requests MUST be completed withinstructions that implementors refer to the main text ofa "487 Request Cancelled" response; thedraft for exact protocol details. 4. Syntax This section describesserver acts as if thesyntax extensions required for event notification in SIP. Semanticsrequest were never received. In general, since neither SUBSCRIBE nor NOTIFY aredescribed in section 5.allowed to have protracted transactions, attempts to cancel them are expected to fail. 4.1.4. State Agents and Notifier Migration Roach [Page8]9] Internet Draft SIP-Specific Event NotificationJulyNovember 20014.1. New Methods This document describes two new SIP methods: "SUBSCRIBE"When state agents (see section 5.4.11. ) are used, it is often useful to allow migration of subscriptions between state agents and"NOTIFY."the nodes for which they are providing state aggregation (or even among various state agents). Such migration may be effected by sending a "NOTIFY" with an "Subscription-Expires" header of "0," and a reason parameter of "migration." Thistable expands on tables 4NOTIFY request is otherwise normal, and5is formed as described inRFC 2543 [1] . Roach [Page 9] Internet Draft SIP-Specific Event Notification July 2001 Header Where SUB NOT ------ ----- --- --- Accept R o o Accept-Encoding R o o Accept-Language R o o Allow 200 - - Allow 405 o o Authorization R o osection 4.3.3. Upon receipt of this NOTIFY message, the subscriber SHOULD attempt to re-subscribe (as described in the following sections). The resulting SUBSCRIBE message can then be proxied or redirected to the node to which notification responsibility is passing. 4.2. Description of SUBSCRIBE Behavior The SUBSCRIBE method is used to request current state and state updates from a remote node. 4.2.1. Correlation to dialogs, calls, and terminals A subscription is uniquely identified by the combination of the To, From, and Call-IDgc m m Contact R m m Contact 1xx o o Contact 2xx m o Contact 3xx m m Contact 485 o o Content-Encoding e o o Content-Length e o o Content-Type e * * CSeq gc m m Date g o o Encryption g o o Expires g m o From gc m m Hide R o o Max-Forwards R o o Organization g o o Priority R o o Proxy-Authenticate 407 o o Proxy-Authorization R o o Proxy-Require R o o Require R o o Retry-After R - - Retry-After 404,480,486 o o Retry-After 503 o o Retry-After 600,603 o o Response-Key R o o Record-Route R o o Record-Route 2xx o o Route R o o Server r o o Subject R o o Timestamp g o o To gc(1) m m Unsupported 420 o o User-Agent g o o Via gc(2) m m Warning r o o WWW-Authenticate 401 o o 4.1.1.fields in the SUBSCRIBE request. Refreshes of subscriptions SHOULD reuse the same Call-ID if possible, since subscriptions are uniquely identified at presence servers using the Call-ID. Two subscriptions from the same user, for the same user, but with different Call-IDs, are considered different subscriptions. Note this is exactly the same as usage of Call-ID in registrations. Initial SUBSCRIBE requests MUST contain a "tag" parameter (as defined in RFC 2543 [1] ) in the "From" header, and MUST NOT contain a "tag" parameter in the "To" header. Responses to SUBSCRIBE requests MUST contain a "tag" parameter in the "To" header. The "tag" in the "To" header allows the subscriber to differentiate between NOTIFY requests from different clients in the case that the SUBSCRIBE request was forked. SUBSCRIBE requests for re-subscription MUST contain "tag" parameters in both the "To" and "From" headers (matching those previously established for the dialog). The relationship between subscriptions and (INVITE-initiated) sessions sharing the same dialog correlation information is undefined. Re-using dialog correlation information for subscriptions is allowed, but sharing of such information does not change the semantics of the INVITE session or the SUBSCRIBE dialog. Similarly, the relationship between a subscription in one Roach [Page 10] Internet Draft SIP-Specific Event Notification November 2001 direction (e.g. from node A to node B) and a subscription in the opposite direction (from B to A) with the same dialog correlation information is undefined. While re-using such information is allowed, the sharing of such information does not change the semantics of either SUBSCRIBE dialog. 4.2.2. Subscription duration SUBSCRIBE requests SHOULD contain an "Expires" header. This expires value indicates the duration of the subscription. The formatting of these is described in RFC 2543. In order to keep subscriptions effective beyond the duration communicated in the "Expires" header, subscribers need to refresh subscriptions on a periodic basis. This refreshing is performed in the same way as REGISTER refreshes: the To, From, and Call-ID match those in the SUBSCRIBE being refreshed, while the CSeq number is incremented. If no "Expires" header is present in a SUBSCRIBE request, the implied default is defined by the event package being used. 200-class responses to SUBSCRIBE requests also MUST contain an "Expires" header. The period of time in the response MAY be shorter or longer than specified in the request. The period of time in the response is the one which defines the duration of the subscription. Similar to REGISTER requests, SUBSCRIBE requests may be renewed at any time to prevent them from expiring at the end of the "Expires" period. These renewals will contain a the same "To," "From," and "Call-ID" as the original request, and an incremented "CSeq" number. Also similar to REGISTER requests, a natural consequence of this scheme is that a SUBSCRIBE with an "Expires" of 0 constitutes a request to unsubscribe from an event. Notifiers may also wish to cancel subscriptions to events; this is useful, for example, when the resource to which a subscription refers is no longer available. Further details on this mechanism are discussed in section 4.3.3. 4.2.3. Identification of Subscribed Events and Event Classes Identification of events is provided by three pieces of information: Request URI, Event Type, and (optionally) message body. The Request URI of a SUBSCRIBEmethodrequest, most importantly, contains enough information to route the request to the appropriate entity. It also contains enough information to Roach [Page10]11] Internet Draft SIP-Specific Event NotificationJulyNovember 2001"SUBSCRIBE" is added to the definition of the element "Method" in the SIP message grammar. Like all SIP method names,identify theSUBSCRIBE method name is case sensitive. The SUBSCRIBE method is used to request asynchronous notification of anresource for which eventor set of events at a later time. 4.1.2. NOTIFY method "NOTIFY"notification isaddeddesired, but not necessarily enough information to uniquely identify thedefinitionnature of theelement "Method" in the SIP message grammar. The NOTIFY method is used to notify a SIP node that aneventwhich has been requested by(e.g. "sip:adam.roach@ericsson.com" would be anearlier SUBSCRIBE method has occurred. It mayappropriate URI to subscribe to for my presence state; it would alsoprovide further details about the event. 4.2. New Headers This table expands on tables 4 and 5 in RFC 2543 [1] , as amended by the changes described in section 4.1. Header field where proxy ACK BYE CAN INV OPT REG SUB NOT ----------------------------------------------------------------- Allow-Events g o o o o o o o o Event R - - - - - - m m Event r - - - - - - - - 4.2.1.be an appropriate URI to subscribe to the state of my voice mailbox). Subscribers MUST include exactly one "Event" header in SUBSCRIBE requests, indicating to which event or class of events they are subscribing. Thefollowing"Event" header will contain a token which indicates the type of state for which a subscription isdefinedbeing requested. This token will be registered with the IANA and will correspond to an event package which further describes the semantics of the event or event class. The "Event" header is considered mandatory for the purposes of thisspecification. Event = (document. However, to maintain compatibility with PINT (see [3] ), servers MAY interpret a SUBSCRIBE request with no "Event"| "o" ) ":" event-type *(( ";" parameter-name ["=" ( token | quoted-string ) ] ) event-type = event-package *( "." event-subpackage ) event-package = token-nodot event-subpackage = token-nodot token-nodot = 1*( alphanum | "-" | "!" | "%" | "*" | "_" | "+" | "`" | "'" | "~" ) Event is addedheader as requesting a subscription to PINT events. If thedefinition ofservers do not support PINT, they SHOULD return "489 Bad Event" to any SUBSCRIBE messages without an EVENT header. If theelement "general-header" inevent package to which theSIP message grammar.event token corresponds defines behavior associated with the body of its SUBSCRIBE requests, those semantics apply. 4.2.4. Additional SUBSCRIBE Header Values Each SUBSCRIBE request MUST have exactly one "Contact:" header, to be used as part of route handling, as described in section 4.1.1. SUBSCRIBE requests MAY contain an "Accept" header. Thisdocument does notheader, if present, indicates the body formats allowed in subsequent NOTIFY requests. Event packages MUST definevaluesthe behavior forevent-types. These valuesSUBSCRIBE requests without "Accept" headers; usually, this will connote a single, default body type. Header values not described in this document are to bedefined by individual event packages, and MUST be registeredinterpreted as described in RFC 2543 [1] . 4.2.5. Subscriber SUBSCRIBE Behavior 4.2.5.1. Requesting a Subscription When a subscriber wishes to subscribe to a particular state for a resource, it forms a SUBSCRIBE message. The dialog correlation information is formed as if for an original INVITE: the Call-ID is a new call ID with theIANA.syntax Roach [Page11]12] Internet Draft SIP-Specific Event NotificationJulyNovember 2001Experimental event typesdescribed in RFC 2543; the To: field indicates the subscribed resource's persistent address (which will generally match the Request URI used to form the message); and the From: field will indicate the subscriber's persistent address (typically sip:user@domain). This SUBSCRIBE request will be confirmed with a final response. 200-class responses indicate that the subscription has been accepted, and that a NOTIFY will be sent immediately. A 200 response indicates that the subscription has been accepted and that the user is authorized to subscribe to the requested resource. A 202 response merely indicates that the subscription has been understood, and that authorization may or may not have been granted. The "Expires" header in a 200-class response to SUBSCRIBE indicates the actual duration for which the subscription will remain active (unless refreshed). Non-200 class final responses indicate that the subscription has not been created, and no subsequent NOTIFY message will becreated by prepending an "x-" followed bysent. All non-200 class responses (with theorganization's internet domain, withexception of "489," described herein) have thefield order reversed,same meanings and"." characters replaced by dashes (e.g. "Event: x-com-ericsson-foo"). There must be exactly one event type listed per event header. Multiple events per message are disallowed. Forhandling as described in RFC 2543 [1] . 4.2.5.2. Refreshing of Subscriptions At any time before a subscription expires, thecurious,subscriber may refresh the"o" short form is chosen to represent "occurrence." 4.2.2. "Allow-Events" Headertimer on such a subscription by re-sending a SUBSCRIBE request. Thefollowing header is definedhandling forthe purposes of this specification. Allow-Events = ( "Allow-Events" | "u" ) ":" 1#event-type Allow-Eventssuch a request isadded tothedefinitionsame as for the initial creation of a subscription except as described below. Subscription renewals will contain a "To" field matching theelement "general-header""From" field in theSIP message grammar. Forfirst NOTIFY request for thecurious,dialog containing the"u" short form is chosensubscription torepresent "understands." 4.3. New Response Codes 4.3.1. "202 Accepted" Response Code The 202 responsebe refreshed. They will contain the same "From" and "Call-ID" fields as the original SUBSCRIBE request, and an incremented "CSeq" number from the original SUBSCRIBE request. Route handling isaddedas discussed in section 4.1.1. If a SUBSCRIBE request to refresh a subscription receives a "481" response, this indicates that the"Success" header field definition: Success = "200" ; OK | "202" ; Accepted "202 Accepted"subscription hasthe same meaning asbeen terminated and thatdefined in HTTP/1.1 [6] . 4.3.2. "489 Bad Event" Response Code The 489 event response is addedthe subscriber did not receive notification of this fact. In this case, the subscriber should consider the subscription invalid. If the subscriber wishes to re-subscribe to the"Client-Error" header field definition: Client-Error = "400" ; Bad Request ... | "489" ; Bad Eventstate, he does so by composing an unrelated initial SUBSCRIBE request with a freshly-generated Call-ID and a new, unique "From" tag (see section 4.2.5.1. ) Roach [Page12]13] Internet Draft SIP-Specific Event NotificationJulyNovember 2001"489 Bad Event" is used to indicate that the server did not understand the event package specified inIf a"Event" header field. 5. Node Behavior Unless noted otherwise, SUBSCRIBE and NOTIFY requests follow the same protocol rules governing the usage of tags, Route, Record-Route, Via handling, retransmission, reliability, CSeq handling, Contact handling, provisional responses, and message formatting as those defined in RFC 2543 [1] for BYE. NeitherSUBSCRIBEnor NOTIFY necessitaterequest to refresh a subscription fails, theuse of "Require" or "Proxy-Require" headers; similarly, thereoriginal subscription isno token defined for "Supported" headers. If necessary, clients may probestill considered valid for thesupportduration of the most recently known "Expires" value as negotiated by SUBSCRIBE and its response, or as communicated by NOTIFYusing the OPTIONS request definedinRFC2543. Note also that the presence of the "Allow-Events" header in a message"Subscription-Expires," except as described above. 4.2.5.3. Unsubscribing Unsubscribing issufficient to indicate support for SUBSCRIBE and NOTIFY. Forhandled in thepurposessame way as refreshing ofgenerality, both SUBSCRIBE and NOTIFY MAY be canceled; however, doing so is not recommended. Successfully cancelled SUBSCRIBE and NOTIFY requests MUST be completed witha"487 Request Cancelled" response; the server acts as ifsubscription, with therequest were never received. In general, since neither SUBSCRIBE nor NOTIFY are allowed to have protracted transactions, attempts to cancel them are expected to fail. 5.1. Description"Expires" header set to "0." Note that a successful unsubscription will also trigger a final "NOTIFY". 4.2.5.4. Confirmation ofSUBSCRIBE BehaviorSubscription Creation TheSUBSCRIBE method is usedsubscriber can expect torequest current state and state updatedreceive a NOTIFY message from each node which has registered aremote node. 5.1.1. Correlation to legs, calls, and terminals Asuccessful subscriptionis uniquely identified byor subscription refresh. Until thecombination offirst NOTIFY message arrives, theTo, From, and Call-ID fields insubscriber should consider theSUBSCRIBE request. Refreshesstate ofsubscriptions SHOULD reuse the same Call-ID if possible, since subscriptions are uniquely identified at presence servers usingtheCall-ID. Two subscriptions fromsubscribed resource to be in a neutral state. Event packages which define new event packages MUST define this "neutral state" in such a way that makes sense for their application (see section 5.4.7. ). Due to thesame user,potential for both out-of-order messages and forking, thesame user, but with different Call-IDs, are considered different subscriptions. Notesubscriber MUST be prepared to receive NOTIFY messages before the SUBSCRIBE transaction has completed. Except as noted above, processing of this NOTIFY isexactlythe same asusage of Call-IDinregistrations. Initialsection 4.3.5. 4.2.6. Proxy SUBSCRIBErequests MUST contain a "tag" parameter (as definedBehavior Proxies need no additional behavior beyond that described in RFC 2543 [1]) into support SUBSCRIBE. If a proxy wishes to see all of the"From" header,SUBSCRIBE and NOTIFY requests for a given dialog, it MUST record-route all SUBSCRIBE and NOTIFY requests. 4.2.7. Notifier SUBSCRIBE Behavior 4.2.7.1. SUBSCRIBE Transaction Processing In no case should a SUBSCRIBE transaction extend for any longer than the time necessary for automated processing. In particular, notifiers MUST NOTcontainwait for a user response before returning a"tag" parameter in the "To" header. Responsesfinal response toSUBSCRIBE requests MUST containa"tag" parameter in the "To" header.SUBSCRIBE request. The"tag"notifier SHOULD check that the event package specified in the"To""Event" headerallowsis understood. If not, thesubscribernotifier SHOULD return a "489 Bad Event" response todifferentiate between NOTIFY requests from different clients in the caseindicate that theSUBSCRIBE request was forked. SUBSCRIBEspecified event/event class is not understood. Roach [Page13]14] Internet Draft SIP-Specific Event NotificationJulyNovember 2001requests for re-subscription MUST contain "tag" parametersThe notifier SHOULD also perform any necessary authentication and authorization per its local policy. See section 4.2.7.3. If the SUBSCRIBE request contains a tag parameter inboththe "To"and "From" headers (matching those previously established forfield, but theleg). The relationship between subscriptionsnotifier has no record of the indicated dialog, the notifier has two options. If the notifier is able and(INVITE-initiated) sessions sharingwilling to reconstruct subscription state, he may accept thesame call leg identification informationsubscription as an initial subscription. If the notifier cannot or isundefined. Re-using call leg information for subscriptionsnot willing to reconstitute such state, it should respond with a "481 Subscription does not exist." If the notifier isdiscouraged. Similarly,able to immediately determine that it understands therelationship between a subscription in one direction (e.g. from node Aevent package, that the authenticated subscriber is authorized tonode B)subscribe, andathat there are no other barriers to creating the subscription, it creates the subscription and returns a "200 OK" response, unless doing so would reveal authorization policy in an undesirable fashion (see section 6.2. ). If theopposite direction (from B to A) withnotifier cannot immediately create thesame call leg identification informationsubscription (e.g. it needs to wait for user input for authorization, or isundefined. Re-using subscription correlation information in two directionsacting for another node which isdiscouraged. 5.1.2. Subscription duration SUBSCRIBE requests MUST contain an "Expires" header.not currently reachable), or wishes to mask authorization policy, it will return a "202 Accepted" response. Thisexpires valueresponse indicates that theduration ofrequest has been received and understood, but does not necessarily imply that thesubscription.subscription has been created yet. Theformatting of these is described in RFC 2543. In order to keep subscriptions effective beyond the duration communicated in the"Expires"header, subscribers need to refresh subscriptions on a periodic basis. This refreshing is performedvalues present in SUBSCRIBE 200-class responses behave in the same way asREGISTER refreshes: the To, From, and Call-ID match thosethey do in REGISTER responses: theSUBSCRIBE being refreshed, whileserver MAY shorten or lengthen theCSeq number is incremented.interval. 200-class responses to SUBSCRIBE requestsalso MUSTwill not generally containan "Expires" header. The period of time in the response MAY be shorter than specified in the request, but MUST NOT be longer. The period of time in the response is the one which defines the duration of the subscription. Similar to REGISTER requests, SUBSCRIBE requests may be renewed atanytimeuseful information beyond subscription duration; their primary purpose is toprevent them from expiring at the end of the "Expires" period. These renewals will contain a the same "To," "From," and "Call-ID"serve asthe original request, and an incremented "CSeq" number. Also similar to REGISTER requests, a natural consequence of this scheme is thataSUBSCRIBE with an "Expires" of 0 constitutesreliability mechanism. State information will be communicated via a subsequent NOTIFY requestto unsubscribefroman event. Notifiersthe notifier. The other response codes defined in RFC 2543 mayalso wishbe used in response tocancel subscriptionsSUBSCRIBE requests, as appropriate. 4.2.7.2. Confirmation of Subscription Creation/Refreshing Upon successfully accepting or refreshing of a subscription, notifiers MUST send a NOTIFY message immediately toevents; this is useful, for example, whencommunicate the current resource state towhich a subscription refers isthe subscriber. If the resource has nolonger available. Further details onmeaningful state at the time that the SUBSCRIBE message is processed, thismechanism are discussed inNOTIFY message MAY contain an empty or neutral body. See section5.2.3. 5.1.3. Identification of Subscribed Events and Event Classes Identification of events is provided by three pieces of4.3.3. for further details on NOTIFY message generation. Roach [Page14]15] Internet Draft SIP-Specific Event NotificationJulyNovember 2001information: Request URI, Event Type, and (optionally)Note that a NOTIFY messagebody. The Request URI ofis always sent immediately after any 200-class response to a SUBSCRIBE request,most importantly, contains enough informationregardless of whether the subscription has already been authorized. 4.2.7.3. Authentication/Authorization of SUBSCRIBE requests Privacy concerns may require that notifiers either use access lists or ask the notifier owner, on a per-subscription basis, whether a particular remote node is authorized to subscribe to a certain set of events. In general, authorization of users prior to authentication is not particularly useful. SIP authentication mechanisms are discussed in RFC2543 [1] . Note that, even if the notifier node typically acts as a proxy, authentication for SUBSCRIBE requests will always be performed via a "401" response, not a "407;" notifiers always act as a user agents when accepting subscriptions and sending notifications. If authorization fails based on an access list or some other automated mechanism (i.e. it can be automatically authoritatively determined that the subscriber is not authorized toroutesubscribe), therequestnotifier SHOULD reply to theappropriate entity. It also contains enoughrequest with a "403 Forbidden" or "603 Decline" response, unless doing so might reveal informationto identifythat should stay private; see section 6.2. If theresource for which event notificationnotifier owner isdesired, but not necessarily enough informationinteractively queried touniquely identifydetermine whether a subscription is allowed, a "202 Accept" response is returned immediately. Note that a NOTIFY message is still formed and sent under these circumstances, as described in thenature ofprevious section. If subscription authorization was delayed and theevent (e.g. "sip:adam.roach@ericsson.com" would be an appropriate URI to subscribenotifier wishes tofor my presence state;convey that such authorization has been declined, itwould also be an appropriate URI to subscribe to the state of my voice mailbox). Subscribers MUST include exactly one "Event"may do so by sending a NOTIFY message containting a "Subscription-Expires" headerin SUBSCRIBE requests, indicating to which event or classwith a value ofevents they are subscribing. The "Event" header will contain"0" and asingle opaque token which identifies the event or classreason parameter ofevents for which"refused." 4.2.7.4. Refreshing of Subscriptions When a notifier receives a subscription refresh, assuming that the subscriber isbeing requested. This token will be registered withstill authorized, theIANA and will correspond to an event package which further describesnotifier updates thesemantics ofexpiration time for subscription. As with theeventinitial subscription, the server MAY shorten orevent class.increase the amount of time until expiration. The"Event" headerfinal expiration time isconsidered mandatoryplaced in the "Expires" header in the response. If no refresh for a notification address is received before its expiration time, thepurposes of this document. However, to maintain compatibility with PINT (see [4] ), serverssubscription is removed. When removing a subscription, the notifier MAYinterpretsend aSUBSCRIBE requestNOTIFY message withno "Event" header as requestingasubscription"Subscription-Expires" value of "0" toPINT events.inform it that the subscription is being removed. If such a message is sent, theservers do not support PINT, theyRoach [Page 16] Internet Draft SIP-Specific Event Notification November 2001 "Subscription-Expires" header SHOULDreturn "489 Bad Event" to any SUBSCRIBEcontain a "reason=timeout" parameter. 4.3. Description of NOTIFY Behavior NOTIFY messageswithout an EVENT header. If the event packageare sent to inform subscribers of changes in state to which theevent token corresponds defines behavior associated withsubscriber has a subscription. Subscriptions are typically put in place using thebody of itsSUBSCRIBErequests,method; however, it is possible that other means have been used. If any non-SUBSCRIBE mechanisms are defined to create subscriptions, it is the responsibility of the parties defining thosesemantics apply. 5.1.4. Additional SUBSCRIBE Header Values The "Contact:" header inmechanisms to ensure that correlation of aSUBSCRIBE message will contain information about where resultingNOTIFYrequestsmessage to the corresponding subscription is possible. Designers of such mechanisms are also warned tobe sent. Each SUBSCRIBE request must have exactly one "Contact:" header. SUBSCRIBE requests MAY contain an "Accept" header. This header, if present, indicatesmake a distinction between sending a NOTIFY message to a subscriber who is aware of thebody formats allowed in subsequentsubscription, and sending a NOTIFYrequests. Event packages MUST define themessage to an unsuspecting node. The latter behaviorfor SUBSCRIBE requests without "Accept" headers; usually, this will connoteis invalid, and MUST receive asingle, default body type. Header values"481 Subscription does notdescribed in this document are to be interpretedexist" response (unless some other 400- or 500-class error code is more applicable), as described inRFC 2543 [1] . 5.1.5. Subscriber SUBSCRIBE Behavior 5.1.5.1. Requesting a Subscription Roach [Page 15] Internet Draft SIP-Specific Event Notification July 2001 Whensection 4.3.5. In other words, knowlege of a subscription must exist in both the subscriberwishes to subscribeand the notifier to(or refreshbe valid, even if installed via asubscription to) an event class, he formsnon-SUBSCRIBE mechanism. A NOTIFY does not cancel its corresponding subscription; in other words, a single SUBSCRIBEmessage. The call leg information is formed as if for an original INVITE:request may trigger several NOTIFY requests. 4.3.1. Correlation NOTIFY requests MUST contain the same Call-IDis a new call ID withas thesyntax described in RFC 2543;SUBSCRIBE request which ordered them; theTo:"To" fieldindicatesMUST match thesubscribed resource's persistent address (which will generally"From" field in the SUBSCRIBE that ordered them, and the "From" field MUST match theRequest URI used"To" field that was sent in the 200-class response toformthemessage); andSUBSCRIBE. In other words, NOTIFY requests MUST be in theFrom:same dialog as the SUBSCRIBE that ordered them. The From fieldwill indicateof a NOTIFY request, like thesubscriber's persistent address (typically sip:user@machine for UAs, or sip:machine"To" field of a SUBSCRIBE response, MUST contain a tag; this allows forother entities). Thisthe subscriber to differentiate between events from different notifiers. Successful SUBSCRIBErequestrequests willbe confirmed with a final response.receive only one 200-classresponses indicate thatresponse; however, due to forking, the subscription may have been accepted by multiple nodes. The subscriberwillMUST therefore bereceiving a confirmation of subscriptionprepared to receive NOTIFY requests with "From:" tags which differ from the "To:" tag received in theform of aSUBSCRIBE 200-class response. If multiple NOTIFYmessage. A 200messages are received in responsecan be interpretedtomean that the requested subscription has succeeded and thataNOTIFY issingle Roach [Page 17] Internet Draft SIP-Specific Event Notification November 2001 SUBSCRIBE message, they represent different destinations tobe expected immediately. A 202 response indicates that there may be a sizable delay before a notification is received, pendingwhich theactual creation ofSUBSCRIBE request was forked. Unless thesubscription. For most implementations, there will be no difference in handling these two response codes. The "Expires" header inevent package specifies otherwise, the subscriber may either accept all such notifications as representing different dialogs (which are then refreshed separately), or send a200-class481 response toSUBSCRIBE indicates the actual duration for which the subscription will remain active (unless refreshed). Non-200 class final responses indicateany NOTIFYs on dialogs thatthe subscription hasit does notbeen created, and no subsequent NOTIFY message will be sent. All non-200 class responses (with the exception of "489," described herein) have the same meanings and handling as describedwant to keep alive. As expected, CSeq spaces are unique for each node; inRFC 2543 [1] . 5.1.5.2. Refreshing of Subscriptions At any time beforeother words, the notifier uses asubscription expires,different CSeq space than the subscribermay refresh the timer on suchand any other notifiers. 4.3.2. Identification of reported events, event classes, and current state Identification of events being reported in a notification is very similar to that described for subscriptionby re-sending a SUBSCRIBE request.to events (see section 4.2.3. ). Thehandling for suchRequest URI of a NOTIFY request contains enough information to route the request to the party which is subscribed to receive notifications. It is derived from the "Contact" header present in the corresponding SUBSCRIBE request. If the sameasevents for different resources are being subscribed to, implementors are expected to use different dialogs in order to be able to differentiate between notifications for them, unless theinitial creation of a subscription, withbody for theexception that these renewalsevent contains enough information for this correlation. As in SUBSCRIBE requests, NOTIFY "Event" headers will contain a single token which identifies thesame "To," "From," and "Call-ID" as the original SUBSCRIBE request, and an incremented "CSeq" number. Ifevent or class of events for which aSUBSCRIBE requestnotification is being generated. If the event package torefresh a subscription fails,which theoriginal subscriptionevent token corresponds defines behavior associated with the body of its NOTIFY requests, those semantics apply. This information isstill considered valid forexpected to provide additional details about thedurationnature of themost recently known "Expires" value as negotiated by SUBSCRIBEevent which has occurred andits response, or as communicated by NOTIFY. 5.1.5.3. Unsubscribing Unsubscribingthe resultant resource state. When present, the body of the NOTIFY request MUST be formatted into one of the body formats specified in the "Accept" header of the corresponding SUBSCRIBE request. 4.3.3. Notifier NOTIFY Behavior When a SUBSCRIBE request ishandledsuccessfully processed or a relevant change in thesame way as refreshing ofsubscribed state occurs, the notifier will immediately construct and send a NOTIFY request to the subscriber(s), per standard Route/Record-Route handling, as described in section 4.1.1. Roach [Page16]18] Internet Draft SIP-Specific Event NotificationJulyNovember 2001subscription, withIf the"Expires" header setnotifier is able, through any means, to"0." Notedetermine thata successful unsubscription will also trigger a final "NOTIFY". 5.1.5.4. Confirmation of Subscription Creation Thethe subscribercan expectis no longer available to receive notifications, it MAY elect to not send a notification. An example of a method by which such information may be known is the "SIP for Presence" event set (see [4] ). A NOTIFYmessage from each noderequest is considered failed if the response times out, or a non-200 class response code is received which hasregistered a successful subscription or subscription refresh. Untilno "Retry-After" header and no implied further action which can be taken to retry the request (e.g. "401 Authorization Required.") If thefirstNOTIFYmessage(s) arrive,request fails (as defined above) due to a timeout condition, and thesubscriber should considersubscription was installed using a soft-state mechanism (such as SIP signalling), thestate ofnotifier SHOULD remove thesubscribed resourcesubscription. If the NOTIFY request fails (as defined above) due tobe inanundefined state. Event packages which define new event packages MUST define this "undefined state" in sucherror response, and the subscription was installed using away that makes sense for their application. Due tosoft-state mechanism, thepotential for both out-of-order messages and forking,notifier MUST remove the corresponding subscription. If a NOTIFY request receives a 481 response, thesubscribernotifier MUSTbe prepared to receive NOTIFY messages beforeremove theSUBSCRIBE transaction has completed. Exceptcorresponding subscription even if such subscription was installed by non-SUBSCRIBE means (such asnoted above, processing of thisan administrative interface). NOTIFYisrequests SHOULD contain an "Subscription-Expires" header which indicates thesame asremaining duration of the subscription (such a header is useful insection 5.2.5. 5.1.6. Proxycase the SUBSCRIBEBehavior Proxies need no additional behavior beyond that described in RFC 2543 [1]request forks, since the response tosupport SUBSCRIBE. Notea forked subscribe -- which contains the "Expire" header thatSIP proxiesspecifies the agreed-upon expiration time -- mayalso act as subscribers or notifiers, as appropriate; under these circumstances, they will act as described in 5.1.5. and 5.1.7. 5.1.7. Notifier SUBSCRIBE Behavior 5.1.7.1. SUBSCRIBE Transaction Processing In no case should a SUBSCRIBE transaction extend for any longer thannot be received by the subscriber). The notifier SHOULD use this header to adjust the timenecessary for automated processing. In particular, notifiersremaining on the subscription; however, this mechanism MUSTNOT wait for a user response before returning a final responsenot be used to lengthen aSUBSCRIBE request.subscription, only to shorten it. The notifierSHOULD checkmay inform a subscriber that a subscription has been removed by sending a NOTIFY message with an "Subscription-Expires" value of "0." If theevent package specified induration of a subscription has been shortened or terminated by the"Event""Subscription-Expires" headeris understood. If not,as compared to thenotifier SHOULD return a "489 Bad Event"most recent 200-class SUBSCRIBE responseto indicatesent, thatthe specified event/event class is not understood. The notifierheader SHOULDalso perform any necessary authentication and authorization per its local policy. See section 5.1.7.3. Ifinclude a "reason" parameter indicating the reason that such action was taken. Currently, four such values are defined: "migration" indicates that the node acting as notifier isabletransferring responsibility for maintaing such state information toimmediately determine that it understands the event package,another node; this only makes sense when subscriptions are terminated, not when they are shortened. "Maint" indicates that theauthenticated subscribersubscription isauthorizedbeing truncated or terminated due tosubscribe,server maintainance, and "refused" indicates thatthere are no other barriers to creating the subscriptions, it createsthe subscriptionand returns a "200 OK" response.has Roach [Page17]19] Internet Draft SIP-Specific Event NotificationJulyNovember 2001Ifbeen removed or shortened administratively (e.g. by a change in ACL policy). Finally, if the notifiercannot immediately create the subscription (e.g. it needselects towait for user input for authorization, or is acting for another node which is not currently reachable), it will returnsend a"202 Accepted" response. This response indicates that the request has been received and understood, but that no action has yet taken place. The "Expires" values present in SUBSCRIBE 200-class responses behave inNOTIFY upon timeout of thesame way assubscription, theydo in REGISTER responses: the server MAY shorten the interval, but MUST not increase it. 200-class responses to SUBSCRIBE requests will not generally contain any useful information beyond subscription duration; their primary purpose is to serve asSHOULD include areliability mechanism. State information will be communicated via"Subscription-Expires" header with asubsequentvalue of "0" and a reason parameter of "timeout." 4.3.4. Proxy NOTIFYrequest from the notifier. The other response codes definedBehavior Proxies need no additional behavior beyond that described in RFC 2543may be used in response[1] toSUBSCRIBE requests, as appropriate. 5.1.7.2. Confirmation of Subscription Creation/Refreshing Upon successful creation or refreshingsupport NOTIFY. If a proxy wishes to see all of the SUBSCRIBE and NOTIFY requests for asubscription, notifiersgiven dialog, it MUSTsendrecord-route all SUBSCRIBE and NOTIFY requests. 4.3.5. Subscriber NOTIFY Behavior Upon receiving a NOTIFYmessage as soon as practical to communicate the current resource state to the subscriber. Ifrequest, theresource has no meaningful statesubscriber should check that it matches at least one of its outstanding subscriptions; if not, it MUST return a "481 Subscription does not exist" response unless another 400- or 500-class response is more appropriate. If, for some reason, thetime thatevent package designated in theSUBSCRIBE message"Event" header of the NOTIFY request isprocessed, thisnot supported, the subscriber will respond with a "489 Bad Event" response. To prevent spoofing of events, NOTIFYmessagerequests MAYcontain an empty body. See section 5.2.3. for further details onbe authenticated, using any defined SIP authentication mechanism. NOTIFYmessage generation. Ifrequests SHOULD contain "Subscription-Expires" headers which indicate theresponse totime remaining on theSUBSCRIBE message was 202,subscription. If thisinitial NOTIFY will serve as indication that the subscription has finally been processed. In the case thatheader is present, thesubscription has not been created (e.g.subscriber SHOULD take it as thenotifier was waiting for authorizationauthoritative duration andsuch authorization failed), the notifier SHOULD indicate toadjust accordingly. If an expires value of "0" is present, the subscriberthatshould consider the subscriptiondoes has not been created by settingterminated. When the"Expires" header to "0" in this initial NOTIFY response. 5.1.7.3. Authentication/Authorization of SUBSCRIBE requests Privacy concerns may require that notifiers either use access listssubscription is terminated oraskshortened using thenotifier owner, on a per-subscription basis, whether"Subscription-Expires" mechanism, there SHOULD be aparticular remote nodereason parameter present. If it isauthorized to subscribepresent and the subscriber is still interested in receiving updates toa certainthe state information, the subscriber SHOULD attempt re-subscribe upon expiration if it is setof events. In general, authorization of users priortoauthentication"migration," "timeout," is notparticularly useful. SIP authentication mechanisms are discussed in RFC2543 [1] . Note that, even ifpresent, or is set to an unknown value. Such a resubscription will be completely independant of thenotifier node typically acts asoriginal subscription, and will not share aproxy, authentication for SUBSCRIBE requestsdialog with it; it willalwaysbeperformedgenerated as described in section 4.2.5.1. If the "reason" parameter on a "Subscription-Expires" header is set to either "maint" or "refused," the subscriber SHOULD NOT attempt re-subscription. Once the notification is deemed acceptable to the subscriber, the Roach [Page18]20] Internet Draft SIP-Specific Event NotificationJulyNovember 2001viasubscriber SHOULD return a"401" response,200 response. In general, it is nota "407;" notifiers always actexpected that NOTIFY responses will contain bodies; however, they MAY, if the NOTIFY request contained an "Accept" header. Other responses defined in RFC 2543 [1] may also be returned, as appropriate. 4.4. Polling Resource State A natural consequence of the behavior described in the preceding sections is that an immediate fetch without auser agents when accepting subscriptions andpersistent subscription may be effected by sendingnotifications. If authorization fails based onanaccess list or some other automated mechanism (i.e. it can be automatically authoritatively determined that the subscriberappropriate SUBSCRIBE with an "Expires" of 0. Of course, an immediate fetch while a subscription isnot authorized to subscribe),active may be effected by sending an appropriate SUBSCRIBE with an "Expires" greater than 0. Upon receipt of this SUBSCRIBE request, the notifierSHOULD reply to(or notifiers, if the SUBSCRIBE requestwithwas forked) will send a"403 Forbidden" or "603 Decline" response, as appropriate. Depending onNOTIFY request containing resource state to thesituation, such a response may have security implications;address in the SUBSCRIBE "Contact" field. Note that normal Route and Record-Route handle still applies; see section6. If4.1.1. 4.5. Allow-Events header usage The "Allow-Events" header, if present, includes a list of tokens which indicates thenotifier owner is interactively queried to determine whetherevent packages supported by the client (if sent in asubscription is allowed,request) or server (if sent in a"202 Accept" responseresponse). In other words, a node sending an "Allow-Events" header isreturned immediately,advertising that it can process SUBSCRIBE requests andthe subsequentgenerate NOTIFYrequest is suppressed until the notifier owner responds. 5.1.7.4. Refreshingrequests for all ofSubscriptions When a notifier receives a subscription refresh, assuming thatthesubscriberevent packages listed in that header. Any node implementing one or more event packages SHOULD include an appropriate "Allow-Events" header indicating all supported events in INVITE requests and responses, OPTIONS responses, and REGISTER requests. "Allow-Events" headers MAY be included in any other type of request or response. This information isstill authorized, the notifier updates the expiration timevery useful, forthe "Contact:" address presentexample, in allowing user agents to render particular interface elements appropriately according to whether theSUBSCRIBE. As with the initial subscription,events required to implement theserver MAY lowerfeatures they represent are supported by theamountappropriate nodes. Note that "Allow-Events" headers MUST NOT be inserted by proxies. 5. Event Packages This section covers several issues which should be taken into consideration when event packages based on SUBSCRIBE and NOTIFY Roach [Page 21] Internet Draft SIP-Specific Event Notification November 2001 are proposed. 5.1. Appropriateness oftime until expiration, but MUST NOT increase it. The final expiration time is placed inUsage When designing an event package using theExpires headermethods described inthe response. If no refreshthis draft fora notification address is received before its expiration time, that addressevent notification, it isremoved from the list of addresses. When removing a contact, the notifier MAY send a NOTIFY messageimportant tothat contact withconsider: is SIP an"Expires" value of "0" to inform it thatappropriate mechanism for thesubscription isproblem set? Is SIP beingremoved.selected because of some unique feature provided by the protocol (e.g. user mobility), or merely because "it can be done?" Ifall notification addresses are removed,you find yourself defining event packages for notifications related to, for example, network management or theentire subscription is deleted. 5.2. Description of NOTIFY Behavior NOTIFY messages are senttemperature inside your car's engine, you may want toinform subscribersreconsider your selection ofchangesprotocols. Those interested instate to whichextending thesubscriber has a subscription. Subscriptions are typically putmechanism defined inplace using the SUBSCRIBE method; however, it is possible that other means have been used. If any non-SUBSCRIBE mechanismsthis document aredefinedurged tocreate subscriptions,read "Guidelines for Authors of SIP Extensions" [2] for further guidance regarding appropriate uses of SIP. Further, it isthe responsibility of the parties defining those mechanisms to ensureexpected thatcorrelation of a NOTIFY messagethis mechanism is not to be used in applications where thecorresponding subscriptionfrequency of reportable events is excessively rapid (e.g. more than about once per second). A SIP network ispossible. Designers of such mechanisms are also warnedgenerally going tomakebe provisioned for adistinction betweenreasonable signalling volume; sending aNOTIFY message tonotification every time asubscriber who is awareuser's GPS position changes by one hundreth ofthe subscription, and sendingaNOTIFY messagesecond could easily overload such a network. 5.2. Sub-packages Normal event packages define a set of state applied toan unsuspecting node. The latter behavior is invalid, and MUST receivea"481 Subscription does not exist" response (unless some other 400- or Roach [Page 19] Internet Draft SIP-Specific Event Notification July 2001 500-class error code is more applicable),specific type of resource, such asdescribed in section 5.2.5. In other words, subscriptions must exist in both the subscriberuser presence, call state, andthe notifier to be valid, even if installed via a non-SUBSCRIBE mechanism. A NOTIFY does not cancel its corresponding subscription; in other words,messaging mailbox state. Sub-packages are asingle SUBSCRIBE request may trigger several NOTIFY requests. 5.2.1. Correlation NOTIFY requests MUST contain the same Call-ID, local URI, and remote URI as the SUBSCRIBE request which ordered them. This is the same setspecial type ofcriteria thatpackage which define acall leg. The From fieldset ofa NOTIFY request MUST contain a tag; this allows for the subscriber to differentiate between events from different notifiers. Successful SUBSCRIBE requests will receive only one 200-class response; however, duestate applied toforking, the subscription may have been accepted by multiple nodes. Theother packages, such as statistics, access policy, and subscriberMUST thereforelists. Sub-packages may even bepreparedapplied toreceive NOTIFY requests with "From:" tags which differ from the "To:" tag received inother sub-packages. To extend theSUBSCRIBE 200-class response. Handlingobject-oriented analogy made earlier, sub-packages can be thought ofthe situation inas templatized C++ packages whichmultiple distinct NOTIFY requests are received formust be applied to other packages to be useful. The name of aSUBSCRIBEsub-package as applied to a package isstill an open issue; see section 8.2. As expected, CSeq spaces are unique for each node; in other words,formed by appending a period followed by thenotifier usessub-package name to the end of the package. For example, if adifferent CSeq space thansubpackage called "watcherinfo" were being applied to a package called "presence," thesubscriberevent token used in "Event" and "Allow-Events" would be "presence.watcherinfo". Sub-packages must be defined so that they can be applied to any Roach [Page 22] Internet Draft SIP-Specific Event Notification November 2001 arbitrary package. In othernotifiers. 5.2.2. Identificationwords, sub-packages cannot be specifically tied to one or a few "parent" packages in such a way that they will not work with other packages. 5.3. Amount ofreported events,State to be Conveyed When designing eventclasses, and current state Identificationpackages, it is important to consider the type ofevents being reported ininformation which will be conveyed during anotificationnotification. A natural temptation isvery similartothat described for subscription to events (see section 5.1.3. ). The Request URIconvey merely the event (e.g. "a new voice message just arrived") without accompanying state (e.g. "7 total voice messages"). This complicates implementation ofa NOTIFY request contains enough informationsubscribing entities (since they have toroutemaintain complete state for therequestentity tothe partywhich they have subscribed), and also issubscribedparticularly susceptible toreceive notifications. It is derived from the "Contact" header present in the corresponding SUBSCRIBE request. If the same events for different resources are being subscribed to, implementorssynchronization problems. There areexpectedtwo possible solutions touse different "Call Legs" (To, From, Call-ID) in orderthis problem that event packages may choose tobe ableimplement. 5.3.1. Complete State Information For packages which typically convey state information that is reasonably small (on the order of 1 kb or so), it is suggested that event packages are designed so as todifferentiate between notifications for them, unlesssend complete state information when an event occurs. In thebodycircumstances that state may not be sufficient for a particular class of events, the eventcontains Roach [Page 20] Internet Draft SIP-Specific Event Notification July 2001 enoughpackages should include complete state informationfor this correlation. As in SUBSCRIBE requests, NOTIFY "Event" headers will contain a single opaque token which identifiesalong with the eventor class of events for which a notificationthat occurred. For example, "no customer service representatives available" may not be as useful "no customer service representatives available; representative sip:46@cs.xyz.int just logged off". 5.3.2. State Deltas In the case that the state information to be conveyed isbeing generated. Iflarge, the event package may choose to detail a scheme by whichthe event token corresponds defines behavior associated with the bodyNOTIFY messages contain state deltas instead ofitscomplete state. Such a scheme would work as follows: any NOTIFYrequests, those semantics apply. This information is expectedsent in immediate response toprovide additional details about the naturea SUBSCRIBE contains full state information. NOTIFY messages sent because of a state change will contain only theevent whichstate information that hasoccurred andchanged; theresultant resource state. When present,subscriber will then merge this information into its current knowledge about thebodystate of theNOTIFY requestresource. Any event package that supports delta changes to states MUSTbe formatted intouse a payload which contains a version number that increases by exactly oneoffor each NOTIFY message. Note that thebody formats specifiedstate version number appears in the"Accept" headerbody of thecorresponding SUBSCRIBE request. The formatting rules and behavior when no "Accept" headermessage, not in a SIP header. Roach [Page 23] Internet Draft SIP-Specific Event Notification November 2001 If a NOTIFY arrives that has a version number that ispresent are expected to be definedincremented by more than one, thedocument which describessubscriber knows that a state delta has been missed; it ignores therelevant event package. 5.2.3. NotifierNOTIFYBehavior When a SUBSCRIBE request is successfully processed or a relevant change inmessage containing thesubscribedstateoccurs,delta (except for thenotifier will constructversion number, which it retains to detect message loss), andsendre-sends a SUBSCRIBE to force a NOTIFYrequestcontaining a complete state snapshot. 5.4. Event Package Responsibilities Event packages are not required tothe subscriber(s), as specified in the "Contact" fieldre-iterate any of theSUBSCRIBE request. Such a message should be sentbehavior described inas timely a manner as is practical. If the notifier is able, through any means,this document, although they may choose todeterminedo so for clarity or emphasis. In general, though, such packages are expected to describe only the behavior that extends or modifies thesubscriber is no longer available to receive notifications, it MAY elect tobehavior described in this document. Note that any behavior designated with "SHOULD" or "MUST" in this document is notsend a notification. An example of a methodallowed to be changed bywhichextension documents; however, suchinformationdocuments maybe known iselect to strengthen "SHOULD" requirements to "MUST" strength if required by their application. In addition to the"SIPnormal sections expected by "Instructions to RFC Authors" [6] and "Guidelines forPresence"Authors of SIP Extensions" [2] , authors of eventset (see [5] ). If the original subscription contained a "Record-Route" header, notifications are sent according topackages MUST address each of therules outlinedissues detailed inRFC 2543 [1] , as iftheSUBSCRIBE werefollowing subsections, whenever applicable. 5.4.1. Event Package Name This mandatory section of anINVITE, andevent package defines theNOTIFY were any subsequent message (e.g. BYE). Notify requests MUST contain a "Contact" header. This contact header istoken name to be usedbyto designate thesubscriber in building "Route" headers for subsequent subscriptions (i.e. refreshes). A NOTIFY request is considered failed ifevent package. It MUST include theresponse times out, or a non-200 class response code is received which has no "Retry-After" header and no implied further actioninformation whichcan be taken to retryappears in therequest (e.g. "401 Authorization Required.")IANA registration of the token. For information on registering such types, see section 7. 5.4.2. Event Package Parameters If parameters are to be used on theNOTIFY request fails (as defined above),"Event" header to modify thenotifier MUST removebehavior of thecontact fromevent package, the syntax and semantics of such headers must be clearly defined. 5.4.3. SUBSCRIBE Bodies It is expected that most, but not all, event packages will define syntax and semantics for SUBSCRIBE method bodies; these bodies will typically modify, expand, filter, throttle, and/or set thresholds for theappropriate subscription. If removalclass ofthe contact leaves no remaining contacts, the entireevents being requested. Designers of event packages are strongly encouraged to re-use existing MIME types for message bodies where practical. This mandatory section of an event package defines what type or types of event bodies are expected in SUBSCRIBE requests (or Roach [Page21]24] Internet Draft SIP-Specific Event NotificationJulyNovember 2001subscriptionspecify that no event bodies are expected). It should point to detailed definitions of syntax and semantics for all referenced body types. 5.4.4. Subscription Duration It isremoved. NOTIFY requests MAY contain an "Expires" header which indicatesrecommended that event packages give a suggested range of times considered reasonable for theremainingduration ofthea subscription.The notifier MAY use this header to adjust the time remaining on the subscription; however, this mechanismSuch packages MUSTnot be used to lengthen a subscription, only to shorten it. The notifier may inform a subscriber that a subscription has been removed by sendingalso define aNOTIFY message with andefault "Expires" valueof "0." 5.2.4. Proxy NOTIFY Behavior Proxies need no additional behavior beyond that described in RFC 2543 [1]tosupport NOTIFY. 5.2.5. Subscriberbe used if none is specified. 5.4.5. NOTIFYBehavior Upon receiving aBodies The NOTIFYrequest,body is used to report state on thesubscriber should check that it matches at least one of its outstanding subscriptions; if not, it MUST returnresource being monitored. Each package must define a"481 Subscription does not exist" response unless another 400-what type or types of event bodies are expected in NOTIFY requests. Such packages must specify or500-class response is more appropriate. If,cite detailed specifications forsome reason,the syntax and semantics associated with such eventpackage designatedbody. Event packages also need to define which MIME type is to be assumed if none are specified in the"Event""Accept" header of theNOTIFY request is not supported, the subscriber will respond with a "489 Bad Event" response. To prevent spoofingSUBSCRIBE request. 5.4.6. Notifier processing ofevents, NOTIFY requests MAY be authenticated, using any defined SIP authentication mechanism. NOTIFYSUBSCRIBE requestsmay contain "Expires" headers which indicate the time remaining on the subscription. If this header is present,This section describes thesubscriber SHOULD take it asprocessing to be performed by theauthoritative duration and adjust accordingly. If an expires valuenotifier upon receipt of"0" is present, the subscriber should consider the subscription terminated. Note that this does not prevent the subscriber from re-sendinga SUBSCRIBEif he wishes to re-initiate the subscription. Once the notificationrequest. Such a section isdeemed acceptablerequired. Information in this section includes details of how to authenticate subscribers and authorization issues for thesubscriber, the subscriber SHOULD return a 200 response. In general, it is not expected that NOTIFYpackage. Such authorization issues may include, for example, whether all SUBSCRIBE requests for this package are answered with 202 responseswill contain bodies; however, they MAY, if the(see section 6.2. ). 5.4.7. Notifier generation of NOTIFYrequest containedrequests This section of an"Accept" header. Other responses defined in RFC 2543 [1] may alsoevent package describes the process by which the notifier generates and sends a NOTIFY request. This includes detailed information about what events cause a NOTIFY to bereturned, as appropriate. Event packages should describe appropriate handling forsent, how to compute thesituationstate information inwhich NOTIFY requests are received from multiple notifiers. In general, such handling will involve a simple merging ofthereceivedNOTIFY, how to generate "neutral" or "fake" state information to hide authorization delays and decisions from users, and whether state information is complete or deltas for notificationsinto(see section 5.3. ) It may optionally describe the behavior used to processes the subsequent response. Such asingle, overall state.section is required. 5.4.8. Subscriber processing of NOTIFY requests Roach [Page22]25] Internet Draft SIP-Specific Event NotificationJulyNovember 20015.3. Polling Resource State A natural consequence of the behavior described in the preceding sections is that an immediate fetch without a persistent subscription may be effected by sending an appropriate SUBSCRIBE with an "Expires"This section of0. Of course,animmediate fetch while a subscription is active may be effectedevent package describes the process followed bysending an appropriate SUBSCRIBE with an "Expires" greater than 0. Uponthe subscriber upon receipt ofthis SUBSCRIBE request, the notifier (or notifiers, if the SUBSCRIBE request was forked) will senda NOTIFYrequest containingrequest, including any logic required to form a coherent resource state (if applicable). 5.4.9. Handling of forked requests Each event package should specify whether forked SUBSCRIBE requests are allowed to install multiple subscriptions. If such behavior is not allowed, any NOTIFY messages not matching theaddress in200-class response to the initial SUBSCRIBE"Contact" field. 5.4. Allow-Events header usage The "Allow-Events" header, if present, includesmessage are responded to with alist of tokens which indicates481. In the case that multiple subscriptions are allowed, the eventpackages supported bypackage must specify whether merging of theclient (if sent in a request) or server (if sent in a response). In other words,notifications to form anode sending an "Allow-Events" headersingle state isadvertisingrequired, and how such merging is to be performed. Note that itcan process SUBSCRIBE requests and generate NOTIFY requests for all of theis possible that some event packageslistedmay be defined in such a way thatheader. Any node implementing one or moreeach dialog is tied to a mutually exclusive state which is unaffected by the other dialogs; this must be clearly stated if it is the case. 5.4.10. Rate of notifications Each eventpackagespackage is expected to define a requirement (RECOMMENDED, SHOULDincludeor MUST strength) which defines anappropriate "Allow-Events" header indicating all supported events in INVITE requests and responses, OPTIONS responses, and REGISTER requests. "Allow-Events" headers MAYabsolute maximum on the rate at which notifications are allowed to beincluded in any other typegenerated by a single notifier. Such packages may further define a throttle mechanism which allows subscribers to further limit the rate ofrequestnotification. 5.4.11. State Agents Designers of event packages should consider whether their package can benefit from network aggregation points ("State Agents") and/or nodes which act on behalf of other nodes. (For example, nodes which provide state information about a resource when such a resource is unable orresponse. Thisunwilling to provide such state information itself). An example of such an application isvery useful, for example, in allowinga node which tracks the presence and availability of a useragents to render particular interface elements appropriately accordingin the network. If state agents are towhetherbe used by theevents required to implementpackage, thefeaturespackage must specify how such state agents aggregate information and how theyrepresentprovide authentication and authorization. 5.4.12. Examples Event packages should include several demonstrative message flow diagrams paired with several typical, syntactically correct and Roach [Page 26] Internet Draft SIP-Specific Event Notification November 2001 complete messages. It is recommended that documents describing event packages clearly indicate that such examples aresupported byinformative and not normative, with instructions that implementors refer to theappropriate nodes.main text of the draft for exact protocol details. 6. Security Considerations 6.1. Access Control The ability to accept subscriptions should be under the direct control of the user, since many types of events may be considered sensitive for the purposes of privacy. Similarly, the notifier should have the ability to selectively reject subscriptions based on the calling party (based on access control lists),and/orusing standard SIP authentication mechanisms. The methods for creation and distribution of such access control lists is outside the scope of this draft. 6.2. Release of Sensitive Policy Information The mere act of returning a"403 Forbidden"200 or"603 Decline" response codecertain 4xx and 6xx responses toaSUBSCRIBErequestrequests may, under certainvery rare Roach [Page 23] Internet Draft SIP-Specific Event Notification July 2001circumstances, create privacyconcerns. Similarly, a delay in the initial notification may create the same concerns.concerns by revealing sensitive policy information. In these cases, the notifiermay elect toshould always returnan immediate 200 or 202 response and senda 202 response. While the subsequent NOTIFY messagewith (possibly erroneous) state. Note that this behaviormay not convey true state, it MUST appear to contain a potentially correct piece of data from the point of view of the subscriber, indistinguishable from a valid response. Information about whether a user is authorized to subscribe to the requested state is never conveyed back to the original user under these circumstances. 6.3. Denial-of-Service attacks The current model (one SUBSCRIBE request triggers arare exception,SUBSCRIBE response andshould notone or more NOTIFY requests) is a classic setup for an amplifier node to beexhibited without justification.used in a smurf attack. Also, the creation of state upon receipt of a SUBSCRIBE request can be used by attackers to consume resources on a victim's machine, rendering it unusable. To reduce the chances of such an attack, implementations of notifiers SHOULD require authentication. Authentication issues are discussed in RFC2543 [1] . 7. IANA Considerations (This section is not applicable until this document is published Roach [Page 27] Internet Draft SIP-Specific Event Notification November 2001 as an RFC.) This document defines an event-type namespace which requires a central coordinating body. The body chosen for this coordination is the Internet Assigned Numbers Authority (IANA). There are two different types of event-types: normal event packages, and event sub-packages; see section3.3.5.2. To avoid confusion, subpackage names and package names share the same namespace; in other words, a sub-package MUST NOT share a name with a package. Following the policies outlined in "Guidelines for Writing an IANA Considerations Section in RFCs"[8][7] , normal event package identification tokens are allocated as First Come First Served, and event sub-package identification tokens are allocated on a IETF Consensus basis.Package names beginning with "x-" are experimental, and are reserved for Private Use. such names MUST be formed according to the rules outlined in section 4.2.1. Note that the naming scheme allows a certain level of Hierarchical Allocation for experimental types. Organizations may choose to centrally coordinate allocation of names within the scope of the experimental namespace designated by their internet domain name. Assignment of such authority is not in the scope of this document, and will not be provided by the IANA.Registrations with the IANA MUST include the token being registered and whether the token is a package or a subpackage. Further, packages MUST include contact information for the party responsible for the registration and/or a published document which describes the event package. Sub-package token registrations MUST include a pointer to the published RFC which defines the sub-package. Registered tokens to designate packages and sub-packages MUST NOT contain the character ".", which is used to separate sub-packages from packages. 7.1. Registration TemplateRoach [Page 24] Internet Draft SIP-Specific Event Notification July 2001As this document specifies no package or sub-package names, the initial IANA registration for event types will be empty. The remainder of the text in this section gives an example of the type of information to be maintained by the IANA; it also demonstrates all five possible permutations of package type, contact, and reference. The table below lists theevent packages and sub-packages defined in "SIP-Specific Event Notification" [RFC xxxx]. Each name is designated as a package or a subpackage under "Type." Package Name Type Contact Reference ------------ ---- ------- --------- example1 package [Roach] example2 package [Roach] [RFC xxxx] example3 package [RFC xxxx] example4 sub-package [Roach] [RFC xxxx] example5 sub-package [RFC xxxx] PEOPLE ------ [Roach] Adam Roach <adam.roach@ericsson.com> REFERENCES ---------- [RFC xxxx] A. Roach "SIP-Specific Event Notification", RFC XXXX, August 2002. 8. Open Issues 8.1. Denial-of-Service attacks The current model (one SUBSCRIBE request triggers a SUBSCRIBE response and one or more NOTIFY requests) is a classic setup for an amplifier node to be used in a smurf attack. Also, the creation of state upon receipt of a SUBSCRIBE request can be used by attackers to consume resources on a victim's machine, rendering it unusable. These problems can be mitigated by requiring that all SUBSCRIBE requests be authenticated (and that unauthenticated SUBSCRIBE requests maintain zero state), but this doesn't actually solve the problem, as muchevent packages and sub-packages defined in "SIP-Specific Event Notification" [RFC xxxx]. Each name is designated asit makes it somewhat less likely to be exploited.a package or a subpackage under "Type." Roach [Page25]28] Internet Draft SIP-Specific Event NotificationJulyNovember 2001Suggestions for improvementsPackage Name Type Contact Reference ------------ ---- ------- --------- example1 package [Roach] example2 package [Roach] [RFC xxxx] example3 package [RFC xxxx] example4 sub-package [Roach] [RFC xxxx] example5 sub-package [RFC xxxx] PEOPLE ------ [Roach] Adam Roach <adam.roach@ericsson.com> REFERENCES ---------- [RFC xxxx] A. Roach "SIP-Specific Event Notification", RFC XXXX, August 2002. 8. Open Issues In addition to the three issues listed below, the BNF in thisarea are solicited, and shoulddocument needs to betaken on the mailing list (see section 12. ). 8.2. SUBSCRIBE Forking Forking poses an interesting problem for SUBSCRIBE requests. At first glance, everything would seemconverted towork okay; a forked SUBSCRIBE which successfully reaches more than one notifier will install a subscription in all ofexplicit LWS to match thenotifier nodes. Generally, several 200 class responseslatest bis draft; this change will bereceived by the forking proxy, andreflected in thefirst one willnext version. 8.1. CANCEL Handling This is actually a protocol-wide open issue which has impacts on this specification: there hasn't been a clear consensus about cancellation of non-INVITE requests yet. If non-INVITE requests cannot bereturnedcancelled, we need tothe subscriber. Upon receiptremove section 4.1.3. 8.2. Version ofthe 200 response, the subscriber could correctly deduce that the subscription has been successfully created in at least one node. Once the NOTIFY responses begin arriving, it is trivialSIP todifferentiate between the notifiers using the "To" tag values. If the subscriber is happy having multiple outstanding subscriptions, he can accept eachreference Much ofthem, and refresh them independently. If multiple subscriptions don't make sense fortheevent package, or introduce a levelhandling in this document is rather different than what is described in RFC2543; in fact, many ofcomplexity thatthesubscriber implementor doesn't wantrecent changes toworry about, all subscriptions with correlation information (i.e. "To" tags) differing from those receivedthis document have been tracking changes in the200-class response may be rejected with a 481 response (which will remove the subscription from"bis" versions of thenotifiers). On closer examination, there appearsSIP specification. We can continue tobe a minor problem with proxies inserting "Record-Route" headers: specifically,reference RFC2543 while pulling in huge chunks of the200-class response tobis draft for compatibility (for example, theSUBSCRIBERoute handling would essentially be copied word-for-word from the bis draft), or we canonly carry one route;start referencing theroutes tobis drafts. Of course, referencing theother notifiers appearsbis drafts allows us tobe effectively lost. This problem is rather trivialpick up changes toovercome; in particular,protocol semantics "for free," while importing chunks of it requires constant maintanance and runs thenewest versionsrisk ofSIP havegetting out of sync. Roach [Page 29] Internet Draft SIP-Specific Event Notification November 2001 On the other hand, placing a"SHOULD" strength requirement that proxies wishing to stay independency on thepath include "Record-Route" headers in all requests. This means thatbis draft pushes theincoming NOTIFYs themselves will contain this routing informationtimeframe forproxiesthis draft (and the drafts thatcomply withdepend on it) out past thenewer SIP specification. Sincetime that thedraft you are currently reading technically referencesnext SIP RFC2543 (whichis published. 8.3. Immediate NOTIFYs There has been discussion, but nosuch provision), we can describe this behavior in here. Proxies which have no notionconsensus, on the issue ofwhat "SUBSCRIBE" and "NOTIFY" mean don't know that "SUBSCRIBE" has a long-running leg associated with it. Record-Routing a "SUBSCRIBE" without knowing what it means should cause no problems, but those proxies certainly won't knowwhether each SUBSCRIBE must have an immediate NOTIFY message sent in response. In attempts toexpect "NOTIFY" messages. Onfollow theother hand, proxies wishingprevailing sentiment, this draft had become internally inconsistent. This version of this document has eliminated these inconsistancies by requiring notifiers always totrack subscriptionssend a NOTIFY immediately upon receiving a SUBSCRIBE. This decision does not necessarily represent group consensus, andnotifications are doubtless awarefurther discussion may be warranted. 9. Changes 9.1. Changes from draft-ietf-...-00 - Fixed confusing typo in section describing correlation ofthis draft; if weSUBSCRIBE requests - Added explanitory text to clarify tag handling when generating re-subscriptions - Expanded general handling section to include specific discussion of Route/Record-Route handling. - Included use of "methods" parameter on Contact as aprovision that proxies interested in tracking these typesmeans for detecting support for SUBSCRIBE and NOTIFY. - Added definition oflegs MUST include Record-Route headers in allterm "dialog"; changed "leg" to "dialog" everwhere. - Added syntax for "Subscription-Expires" header. - Changed NOTIFYrequests, it solves our routing problem -- and it's completely compatible withmessages to refer to "Subscription-Expires" everywhere (instead of "Expires.") Roach [Page26]30] Internet Draft SIP-Specific Event NotificationJulyNovember 2001the remainder- Added information about generation and handling ofSIP, since we're just strengthening a requirement already presented in the newer SIP specification. So, there's a rather airtight technical solution481 responses tothe problem; currently, no one seemsSUBSCRIBE requests - Changed having Expires header in SUBSCRIBE from MUST tobe disputing that fact. However, there areSHOULD; this aligns more closely with REGISTER behavior - Removed experimental/private event package names, per list consensus - Cleaned up sometheory-of-knowledge type philosophical arguments that claimlegacy text left over from very early drafts thatinstallingallowed multiplesubscriptions with one subscription request is a fundamentally flawed concept. The arguments, if I understand them correctly, roughly state that acontacts per subscriptionis to a particular single state, and that only one node in the network can possibly be considered- Strengthened language requiring theauthoritative sourceremoval ofthat state. I would counterargue that for certain event packages -- like user presence -- this is absolutely correct. Those packages should mandate that all but onesubscriptions if a NOTIFYis rejectedrequest fails with a 481.In circumstances where the node reachedClarified that such removal isthe authoritative sourcerequired forone instanceall subscriptions, including administrative ones. - Removed description ofa setdelaying NOTIFY requests until authorization is granted. Such behavior was inconsistent with other parts ofstate (such as terminal state), it makes a lotthis document. - Moved description ofsenseevent packages tohave the abilitylater in document, toinstall a subscription into every end-node reached. Of course, the forgoing discussion reflects the author's viewpoint; others would certainly castreduce thesituation in different light. In any case, without a group consensus on this topic, it is considered annumber of forward references. - Minor editorial and nits changes - Added new openissue. 9. Changes 9.1.issues to open issues section. All previous open issues have been resolved. 9.2. Changes from draft-roach-...-03 - Added DOS attacks section to open issues. - Added discussion of forking to open issues - Changed response to PINT request for notifiers who don't support PINT from 400 to 489. Roach [Page 31] Internet Draft SIP-Specific Event Notification November 2001 - Added sentence to security section to call attention to potential privacy issues of delayed NOTIFY responses. - Added clarification: access control list handling is out of scope. - (Hopefully) Final resolution on out-of-band subscriptions: mentioned in sectionRoach [Page 27] Internet Draft SIP-Specific Event Notification July 2001 5.2.4.3. Removed from open issues. - Made "Contact" header optional for SUBSCRIBE 1xx responses. - Added description clarifying tag handling (section5.1.1.4.2.1. ) - Removed event throttling from open issues. - Editorial cleanup to remove term "extension draft" and similar; "event package" is now (hopefully) used consistently throughout the document. - Remove discussion of event agents from open issues. This is covered in the event packages section now. - Added discussion of forking to open issues. - Added discussion of sub-packages - Added clarification that, upon receiving a "NOTIFY" with an expires of "0", the subscriber can re-subscribe. This allows trivial migration of subscriptions between nodes. - Added preliminary IANA Considerations section Roach [Page 32] Internet Draft SIP-Specific Event Notification November 2001 - Changed syntax for experimental event tokens to avoid possibly ambiguity between experimental tokens and sub-packages. - Slight adjustment to "Event" syntax to accommodate sub-packages. - Added section describing the information which is to be included in documents describing event packages.Roach [Page 28] Internet Draft SIP-Specific Event Notification July 2001- Made 481 responses mandatory for unexpected notifications (allowing notifiers to remove subscriptions in error cases) - Several minor non-semantic editorial changes.9.2.9.3. Changes from draft-roach-...-02 - Clarification under "Notifier SUBSCRIBE behavior" which indicates that the first NOTIFY message (sent immediately in response to a SUBSCRIBE) may contain an empty body, if resource state doesn't make sense at that point in time. - Text on message flow in overview section corrected - Removed suggestion that clients attempt to unsubscribe whenever they receive a NOTIFY for an unknown event. Such behavior opens up DOS attacks, and will lead to message loops unless additional precautions are taken. The 481 response to the NOTIFY should serve the same purpose. - Changed processing of non-200 responses to NOTIFY from "SHOULD remove contact" to "MUST remove contact" to support the above change. - Re-added discussion of out-of-band subscription mechanisms (including open issue of resource identification). Roach [Page 33] Internet Draft SIP-Specific Event Notification November 2001 - Added text specifying that SUBSCRIBE transactions are not to be prolonged. This is based on the consensus that non-INVITE transactions should never be prolonged; such consensus within the SIP working group was reached at the 49th IETF. - Added "202 Accepted" response code to support the above change. The behavior of this 202 response code is a generalization of that described in the presence draft. - Updated to specify that the response to an unauthorized SUBSCRIBE request is 603 or 403.Roach [Page 29] Internet Draft SIP-Specific Event Notification July 2001- Level-4 subheadings added to particularly long sections to break them up into logical units. This helps make the behavior description seem somewhat less rambling. This also caused some re-ordering of these paragraphs (hopefully in a way that makes them more readable). - Some final mopping up of old text describing "call related" and "third party" subscriptions (deprecated concepts). - Duplicate explanation of subscription duration removed from subscriber SUBSCRIBE behavior section. - Other text generally applicable to SUBSCRIBE (instead of just subscriber handling of SUBSCRIBE) moved to parent section. - Updated header table to reflect mandatory usage of "Expires" header in SUBSCRIBE requests and responses - Removed "Event" header usage in responses - Added sentence suggesting that notifiers may notify subscribers when a subscription has timed out. - Clarified that a failed attempt to refresh a subscription does not imply that the original subscription has been cancelled. Roach [Page 34] Internet Draft SIP-Specific Event Notification November 2001 - Clarified that 489 is a valid response to "NOTIFY" requests. - Minor editorial changes to clean up awkward and/or unclear grammar in several places9.3.9.4. Changes from draft-roach-...-01 - Multiple contacts per SUBSCRIBE message disallowed. - Contact header now required in NOTIFY messages.Roach [Page 30] Internet Draft SIP-Specific Event Notification July 2001- Distinction between third party/call member events removed. - Distinction between call-related/resource-related events removed. - Clarified that subscribers must expect NOTIFY messages before the SUBSCRIBE transaction completes - Added immediate NOTIFY message after successful SUBSCRIBE; this solves a myriad of issues, most having to do with forking. - Added discussion of "undefined state" (before a NOTIFY arrives). - Added mechanism for notifiers to shorten/cancel outstanding subscriptions. - Removed open issue about appropriateness of new "489" response. - Removed all discussion of out-of-band subscriptions. - Added brief discussion of event state polling. 10. References [1] M. Handley/H. Schulzrinne/E. Schooler/J. Rosenberg, "SIP: Session Initiation Protocol", RFC 2543, IETF; March 1999.[2] Adam Roach, "Automatic Call Back Service in SIP",Roach [Page 35] Internet Draft<draft-roach-sip-acb-00.txt>, IETF; March 2000. Work in progress. [3]SIP-Specific Event Notification November 2001 [2] J. Rosenberg, H. Schulzrinne, "Guidelines for Authors of SIP Extensions",<draft-ietf-sip-guidelines-01.txt>,<draft-ietf-sip-guidelines-02.txt>, IETF;July 2000.March 2001. Work in progress.[4][3] S. Petrack, L. Conroy, "The PINT Service Protocol", RFC 2848, IETF; June 2000.[5][4] J. Rosenberg et. al., "SIP Extensions for Presence",<draft-rosenberg-impp-presence-00.txt>,<draft-ietf-simple-presence-03.txt>, IETF;June 2000.September 2001. Work in progress.Roach [Page 31] Internet Draft SIP-Specific Event Notification July 2001 [6][5] R. Fielding et. al., "Hypertext Transfer Protocol -- HTTP/1.1", RFC2068, IETF, January 1997.[7][6] J. Postel, J. Reynolds, "Instructions to RFC Authors", RFC2223, IETF, October 1997.[8][7] T. Narten, H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, IETF, October 1998. [8] Schulzrinne/Rosenberg, "SIP Caller Preferences and Callee Capabilities", <draft-ietf-sip-callerprefs-04.txt>, IETF; June 2001. Work in progress. 11. Acknowledgements Thanks to the participants in the Events BOF at the 48th IETF meeting in Pittsburgh, as well as those who gave ideas and suggestions on the SIP Events mailing list. In particular, I wish to thank Henning Schulzrinne of Columbia University for coming up with the final three-tiered event identification scheme, Sean Olson of Ericsson for miscellaneous guidance, Jonathan Rosenberg for a thorough scrubbing of the -00 draft, and the authors of the "SIP Extensions for Presence" draft for their input to SUBSCRIBE and NOTIFY request semantics. 12.Feedback and Discussion Comments regarding this draft are welcomed at the author's address listed below. General-purpose discussion of asynchronous event topics, including this draft, should be taken on the sip-events mailing list (and NOT the general-purpose SIP mailing list). To subscribe, send mail to "sip-events@standards.ericsson.net" with the word "SUBSCRIBE" in the body. 13.Author's Address Adam Roach Ericsson Inc. Mailstop L-04851 International Pkwy.740 E. Campbell Rd. Richardson, TX 75081 USA Phone: +1 972 583 7594 Fax: +1 972 669 0154 E-Mail: adam.roach@ericsson.com Roach [Page32]36] ----