diff options
Diffstat (limited to 'doc/rfc/rfc3265.txt')
-rw-r--r-- | doc/rfc/rfc3265.txt | 2131 |
1 files changed, 2131 insertions, 0 deletions
diff --git a/doc/rfc/rfc3265.txt b/doc/rfc/rfc3265.txt new file mode 100644 index 0000000..a987c92 --- /dev/null +++ b/doc/rfc/rfc3265.txt @@ -0,0 +1,2131 @@ + + + + + + +Network Working Group A. B. Roach +Request for Comments: 3265 dynamicsoft +Updates: 2543 June 2002 +Category: Standards Track + + + Session Initiation Protocol (SIP)-Specific Event Notification + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2002). All Rights Reserved. + +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. + +Table of Contents + + 1. Introduction........................................... 3 + 1.1. Overview of Operation.................................. 4 + 1.2. Documentation Conventions.............................. 4 + 2. Definitions............................................ 5 + 3. Node Behavior.......................................... 6 + 3.1. Description of SUBSCRIBE Behavior...................... 6 + 3.1.1. Subscription Duration.................................. 6 + 3.1.2. Identification of Subscribed Events and Event Classes.. 6 + 3.1.3. Additional SUBSCRIBE Header Values..................... 7 + 3.1.4. Subscriber SUBSCRIBE Behavior.......................... 7 + 3.1.5. Proxy SUBSCRIBE Behavior............................... 9 + 3.1.6. Notifier SUBSCRIBE Behavior............................ 10 + + + +Roach Standards Track [Page 1] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + 3.2. Description of NOTIFY Behavior......................... 13 + 3.2.1. Identification of Reported Events, Event Classes, and + Current State.......................................... 13 + 3.2.2. Notifier NOTIFY Behavior............................... 14 + 3.2.3. Proxy NOTIFY Behavior.................................. 15 + 3.2.4. Subscriber NOTIFY Behavior............................. 16 + 3.3. General................................................ 18 + 3.3.1. Detecting support for SUBSCRIBE and NOTIFY............. 18 + 3.3.2. CANCEL requests........................................ 18 + 3.3.3. Forking................................................ 18 + 3.3.4. Dialog creation and termination........................ 18 + 3.3.5. State Agents and Notifier Migration.................... 19 + 3.3.6. Polling Resource State................................. 20 + 3.3.7. Allow-Events header usage.............................. 21 + 3.3.8. PINT Compatibility..................................... 21 + 4. Event Packages......................................... 21 + 4.1. Appropriateness of Usage............................... 21 + 4.2. Event Template-packages................................ 22 + 4.3. Amount of State to be Conveyed......................... 22 + 4.3.1. Complete State Information............................. 23 + 4.3.2. State Deltas........................................... 23 + 4.4. Event Package Responsibilities......................... 24 + 4.4.1. Event Package Name..................................... 24 + 4.4.2. Event Package Parameters............................... 24 + 4.4.3. SUBSCRIBE Bodies....................................... 24 + 4.4.4. Subscription Duration.................................. 25 + 4.4.5. NOTIFY Bodies.......................................... 25 + 4.4.6. Notifier processing of SUBSCRIBE requests.............. 25 + 4.4.7. Notifier generation of NOTIFY requests................. 25 + 4.4.8. Subscriber processing of NOTIFY requests............... 26 + 4.4.9. Handling of forked requests............................ 26 + 4.4.10. Rate of notifications.................................. 26 + 4.4.11. State Agents........................................... 27 + 4.4.12. Examples............................................... 27 + 4.4.13. Use of URIs to Retrieve State.......................... 27 + 5. Security Considerations................................ 28 + 5.1. Access Control......................................... 28 + 5.2. Notifier Privacy Mechanism............................. 28 + 5.3. Denial-of-Service attacks.............................. 28 + 5.4. Replay Attacks......................................... 29 + 5.5. Man-in-the middle attacks.............................. 29 + 5.6. Confidentiality........................................ 29 + 6. IANA Considerations.................................... 30 + 6.1. Registration Information............................... 30 + 6.2. Registration Template.................................. 31 + 6.3. Header Field Names..................................... 31 + 6.4. Response Codes......................................... 32 + 7. Syntax................................................. 32 + + + +Roach Standards Track [Page 2] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + 7.1. New Methods............................................ 32 + 7.1.1. SUBSCRIBE method....................................... 34 + 7.1.2. NOTIFY method.......................................... 34 + 7.2. New Headers............................................ 34 + 7.2.1. "Event" header......................................... 34 + 7.2.2. "Allow-Events" Header.................................. 35 + 7.2.3. "Subscription-State" Header............................ 35 + 7.3. New Response Codes..................................... 35 + 7.3.1. "202 Accepted" Response Code........................... 35 + 7.3.2. "489 Bad Event" Response Code.......................... 35 + 7.4. Augmented BNF Definitions.............................. 35 + 8. Normative References................................... 36 + 9. Informative References................................. 37 + 10. Acknowledgements....................................... 37 + 11. Notice Regarding Intellectual Property Rights.......... 37 + 12. Author's Address....................................... 37 + 13. Full Copyright Statement............................... 38 + +1. Introduction + + The ability to request asynchronous notification of events proves + useful in many types of SIP 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 PSTN and Internet + Internetworking (PINT) [2] status (based on call state events). + + The methods described in this document provide 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, that event packages based on this + framework may define arbitrarily elaborate rules which govern the + subscription and notification for the events or classes of events + they describe. + + This document does not describe an extension which may be used + directly; it must be extended by other documents (herein referred to + as "event packages"). In object-oriented design terminology, it may + + + + + +Roach Standards Track [Page 3] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + be thought of as an abstract base class which must be derived into an + instantiatable class by further extensions. Guidelines for creating + these extensions are described in section 4. + +1.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: + + Subscriber Notifier + |-----SUBSCRIBE---->| Request state subscription + |<-------200--------| Acknowledge subscription + |<------NOTIFY----- | Return current state information + |--------200------->| + |<------NOTIFY----- | Return current state information + |--------200------->| + + Subscriptions are expired and must be refreshed by subsequent + SUBSCRIBE messages. + +1.2. Documentation Conventions + + There are several paragraphs throughout this document which provide + motivational or clarifying text. Such passages are non-normative, + and are provided only to assist with reader comprehension. These + passages are set off from the remainder of the text by being indented + thus: + + This is an example of non-normative explanatory text. It does not + form part of the specification, and is used only for + clarification. + + Numbers in square brackets (e.g., [1]) denote a reference to one of + the entries in the reference sections; see sections 8 and 9. + + The all-capital terms "MUST", "SHOULD", "MAY", "SHOULD NOT", "MUST + NOT", and "RECOMMENDED" are used as defined in RFC 2119 [5]. + + The use of quotation marks next to periods and commas follows the + convention used by the American Mathematical Society; although + contrary to traditional American English convention, this usage lends + clarity to certain passages. + + + + + +Roach Standards Track [Page 4] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +2. Definitions + + Event Package: An event package is an additional specification which + defines a set of state information to be reported by a notifier to + a subscriber. Event packages also define further syntax and + semantics based on the framework defined by this document required + to convey such state information. + + Event Template-Package: An event template-package is a special kind + of event package which defines a set of states which may be + applied to all possible event packages, including itself. + + Notification: Notification is the act of a notifier sending a NOTIFY + message to a subscriber to inform the subscriber of the state of a + resource. + + Notifier: A notifier is a user agent which generates NOTIFY requests + for the purpose of notifying subscribers of the state of a + resource. Notifiers typically also accept SUBSCRIBE requests to + create subscriptions. + + State Agent: A state agent is a notifier which publishes state + information on behalf of a resource; in order to do so, it may + need to gather such state information from multiple sources. + State agents always have complete state information for the + resource for which they are creating notifications. + + Subscriber: A subscriber is a user agent which receives NOTIFY + requests from notifiers; these NOTIFY requests contain information + about the state of a resource in which the subscriber is + interested. Subscribers typically also generate SUBSCRIBE + requests and send them to notifiers to create subscriptions. + + Subscription: A subscription is a set of application state associated + with a dialog. This application state includes a pointer to the + associated dialog, the event package name, and possibly an + identification token. Event packages will define additional + subscription state information. By definition, subscriptions + exist in both a subscriber and a notifier. + + Subscription Migration: Subscription migration is the act of moving a + subscription from one notifier to another notifier. + + + + + + + + + +Roach Standards Track [Page 5] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +3. Node Behavior + +3.1. Description of SUBSCRIBE Behavior + + The SUBSCRIBE method is used to request current state and state + updates from a remote node. + +3.1.1. Subscription Duration + + SUBSCRIBE requests SHOULD contain an "Expires" header (defined in SIP + [1]). This expires value indicates the duration of the subscription. + In order to keep subscriptions effective beyond the duration + communicated in the "Expires" header, subscribers need to refresh + subscriptions on a periodic basis using a new SUBSCRIBE message on + the same dialog as defined in SIP [1]. + + 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 + but MUST NOT be longer than specified in the request. The period of + time in the response is the one which defines the duration of the + subscription. + + An "expires" parameter on the "Contact" header has no semantics for + SUBSCRIBE and is explicitly not equivalent to an "Expires" header in + a SUBSCRIBE request or response. + + A natural consequence of this scheme is that a SUBSCRIBE with an + "Expires" of 0 constitutes a request to unsubscribe from an event. + + In addition to being a request to unsubscribe, a SUBSCRIBE message + with "Expires" of 0 also causes a fetch of state; see section + 3.3.6. + + 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 3.2.2. + +3.1.2. 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. + + + + + + +Roach Standards Track [Page 6] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + The Request URI of a SUBSCRIBE request, most importantly, contains + enough information to route the request to the appropriate entity per + the request routing procedures outlined in SIP [1]. It also contains + enough information to identify the resource for which event + notification is desired, but not necessarily enough information to + uniquely identify the nature of the event (e.g., + "sip:adam@dynamicsoft.com" would be an appropriate URI to subscribe + to for my presence state; it would also 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. The "Event" header will contain a token which indicates + the type of state for which a subscription is being 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 MAY also contain an "id" parameter. + This "id" parameter, if present, contains an opaque token which + identifies the specific subscription within a dialog. An "id" + parameter is only valid within the scope of a single dialog. + + If the event package to which the event token corresponds defines + behavior associated with the body of its SUBSCRIBE requests, those + semantics apply. + + Event packages may also define parameters for the Event header; if + they do so, they must define the semantics for such parameters. + +3.1.3. Additional SUBSCRIBE Header Values + + Because SUBSCRIBE requests create a dialog as defined in SIP [1], + they MAY contain an "Accept" header. This header, if present, + indicates the body formats allowed in subsequent NOTIFY requests. + Event packages MUST define the behavior for SUBSCRIBE requests + without "Accept" headers; usually, this will connote a single, + default body type. + + Header values not described in this document are to be interpreted as + described in SIP [1]. + +3.1.4. Subscriber SUBSCRIBE Behavior + +3.1.4.1. Requesting a Subscription + + SUBSCRIBE is a dialog-creating method, as described in SIP [1]. + + When a subscriber wishes to subscribe to a particular state for a + resource, it forms a SUBSCRIBE message. If the initial SUBSCRIBE + + + +Roach Standards Track [Page 7] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + represents a request outside of a dialog (as it typically will), its + construction follows the procedures outlined in SIP [1] for UAC + request generation outside of a dialog. + + 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 no subscription or dialog + has been 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 described in SIP [1]. + + A SUBSCRIBE request MAY include an "id" parameter in its "Event" + header to allow differentiation between multiple subscriptions in the + same dialog. + +3.1.4.2. Refreshing of Subscriptions + + At any time before a subscription expires, the subscriber may refresh + the timer on such a subscription by sending another SUBSCRIBE request + on the same dialog as the existing subscription, and with the same + "Event" header "id" parameter (if one was present in the initial + subscription). The handling for such a request is the same as for + the initial creation of a subscription except as described below. + + If the initial SUBSCRIBE message contained an "id" parameter on + the "Event" header, then refreshes of the subscription must also + contain an identical "id" parameter; they will otherwise be + considered new subscriptions in an existing dialog. + + If a SUBSCRIBE request to refresh a subscription receives a "481" + response, this indicates that the subscription has been terminated + and that the 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 state, he + does so by composing an unrelated initial SUBSCRIBE request with a + freshly-generated Call-ID and a new, unique "From" tag (see section + 3.1.4.1.) + + + + +Roach Standards Track [Page 8] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + If a SUBSCRIBE request to refresh a subscription fails with a non-481 + response, the original subscription is still considered valid for the + duration of the most recently known "Expires" value as negotiated by + SUBSCRIBE and its response, or as communicated by NOTIFY in the + "Subscription-State" header "expires" parameter. + + Note that many such errors indicate that there may be a problem + with the network or the notifier such that no further NOTIFY + messages will be received. + +3.1.4.3. Unsubscribing + + Unsubscribing is handled in the same way as refreshing of a + subscription, with the "Expires" header set to "0". Note that a + successful unsubscription will also trigger a final NOTIFY message. + +3.1.4.4. Confirmation of Subscription Creation + + The subscriber can expect to receive a NOTIFY message from each node + which has processed a successful subscription or subscription + refresh. Until the first NOTIFY message arrives, the subscriber + should consider the state of the subscribed resource to be in a + neutral state. Documents which define new event packages MUST define + this "neutral state" in such a way that makes sense for their + application (see section 4.4.7.). + + Due to the potential for both out-of-order messages and forking, the + subscriber MUST be prepared to receive NOTIFY messages before the + SUBSCRIBE transaction has completed. + + Except as noted above, processing of this NOTIFY is the same as in + section 3.2.4. + +3.1.5. Proxy SUBSCRIBE Behavior + + Proxies need no additional behavior beyond that described in SIP [1] + to support SUBSCRIBE. If a proxy wishes to see all of the SUBSCRIBE + and NOTIFY requests for a given dialog, it MUST record-route the + initial SUBSCRIBE and any dialog-establishing NOTIFY requests. Such + proxies SHOULD also record-route all other SUBSCRIBE and NOTIFY + requests. + + Note that subscribers and notifiers may elect to use S/MIME + encryption of SUBSCRIBE and NOTIFY requests; consequently, proxies + cannot rely on being able to access any information that is not + explicitly required to be proxy-readable by SIP [1]. + + + + + +Roach Standards Track [Page 9] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +3.1.6. Notifier SUBSCRIBE Behavior + +3.1.6.1. Initial 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 NOT wait for a user response before returning a final + response to a SUBSCRIBE request. + + This requirement is imposed primarily to prevent the non-INVITE + transaction timeout timer F (see [1]) from firing during the + SUBSCRIBE transaction, since interaction with a user would often + exceed 64*T1 seconds. + + The notifier SHOULD check that the event package specified in the + "Event" header is understood. If not, the notifier SHOULD return a + "489 Bad Event" response to indicate that the specified event/event + class is not understood. + + The notifier SHOULD also perform any necessary authentication and + authorization per its local policy. See section 3.1.6.3. + + The notifier MAY also check that the duration in the "Expires" header + is not too small. If and only if the expiration interval is greater + than zero AND smaller than one hour AND less than a notifier- + configured minimum, the notifier MAY return a "423 Interval too + small" error which contains a "Min-Expires" header field. The "Min- + Expires" header field is described in SIP [1]. + + If the notifier is able to immediately determine that it understands + the event package, that the authenticated subscriber is authorized to + subscribe, and that there are no other barriers to creating the + subscription, it creates the subscription and a dialog (if + necessary), and returns a "200 OK" response (unless doing so would + reveal authorization policy in an undesirable fashion; see section + 5.2.). + + If the notifier cannot immediately create the subscription (e.g., it + needs to wait for user input for authorization, or is acting for + another node which is not currently reachable), or wishes to mask + authorization policy, it will return a "202 Accepted" response. This + response indicates that the request has been received and understood, + but does not necessarily imply that the subscription has been + authorized yet. + + When a subscription is created in the notifier, it stores the event + package name and the "Event" header "id" parameter (if present) as + part of the subscription information. + + + +Roach Standards Track [Page 10] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + The "Expires" values present in SUBSCRIBE 200-class responses behave + in the same way as they do in REGISTER responses: the server MAY + shorten the interval, but MUST NOT lengthen it. + + If the duration specified in a SUBSCRIBE message is unacceptably + short, the notifier may be able to send a 423 response, as + described earlier in this section. + + 200-class responses to SUBSCRIBE requests will not generally contain + any useful information beyond subscription duration; their primary + purpose is to serve as a reliability mechanism. State information + will be communicated via a subsequent NOTIFY request from the + notifier. + + The other response codes defined in SIP [1] may be used in response + to SUBSCRIBE requests, as appropriate. + +3.1.6.2. Confirmation of Subscription Creation/Refreshing + + Upon successfully accepting or refreshing a subscription, notifiers + MUST send a NOTIFY message immediately to communicate the current + resource state to the subscriber. This NOTIFY message is sent on the + same dialog as created by the SUBSCRIBE response. If the resource + has no meaningful state at the time that the SUBSCRIBE message is + processed, this NOTIFY message MAY contain an empty or neutral body. + See section 3.2.2. for further details on NOTIFY message generation. + + Note that a NOTIFY message is always sent immediately after any 200- + class response to a SUBSCRIBE request, regardless of whether the + subscription has already been authorized. + +3.1.6.3. Authentication/Authorization of SUBSCRIBE requests + + Privacy concerns may require that notifiers apply policy to determine + whether a particular subscriber is authorized to subscribe to a + certain set of events. Such policy may be defined by mechanisms such + as access control lists or real-time interaction with a user. In + general, authorization of subscribers prior to authentication is not + particularly useful. + + SIP authentication mechanisms are discussed in SIP [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. + + + + + + +Roach Standards Track [Page 11] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + Of course, when acting as a proxy, a node will perform normal + proxy authentication (using 407). The foregoing explanation is a + reminder that notifiers are always UAs, and as such perform UA + authentication. + + 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 to subscribe), the + notifier SHOULD reply to the request with a "403 Forbidden" or "603 + Decline" response, unless doing so might reveal information that + should stay private; see section 5.2. + + If the notifier owner is interactively queried to determine 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 the previous section. + + If subscription authorization was delayed and the notifier wishes to + convey that such authorization has been declined, it may do so by + sending a NOTIFY message containing a "Subscription-State" header + with a value of "terminated" and a reason parameter of "rejected". + +3.1.6.4. Refreshing of Subscriptions + + When a notifier receives a subscription refresh, assuming that the + subscriber is still authorized, the notifier updates the expiration + time for the subscription. As with the initial subscription, the + server MAY shorten the amount of time until expiration, but MUST NOT + increase it. The final expiration time is placed in the "Expires" + header in the response. If the duration specified in a SUBSCRIBE + message is unacceptably short, the notifier SHOULD respond with a + "423 Subscription Too Brief" message. + + If no refresh for a notification address is received before its + expiration time, the subscription is removed. When removing a + subscription, the notifier SHOULD send a NOTIFY message with a + "Subscription-State" value of "terminated" to inform it that the + subscription is being removed. If such a message is sent, the + "Subscription-State" header SHOULD contain a "reason=timeout" + parameter. + + The sending of a NOTIFY when a subscription expires allows the + corresponding dialog to be terminated, if appropriate. + + + + + + + + +Roach Standards Track [Page 12] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +3.2. Description of NOTIFY Behavior + + NOTIFY messages are sent to inform subscribers of changes in state to + which the subscriber has a subscription. Subscriptions are typically + put in place using the SUBSCRIBE 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 those mechanisms to + ensure that correlation of a NOTIFY message to the corresponding + subscription is possible. Designers of such mechanisms are also + warned to make a distinction between sending a NOTIFY message to a + subscriber who is aware of the subscription, and sending a NOTIFY + message to an unsuspecting node. The latter behavior is invalid, and + MUST receive a "481 Subscription does not exist" response (unless + some other 400- or 500-class error code is more applicable), as + described in section 3.2.4. In other words, knowledge of a + subscription must exist in both the subscriber and the notifier to be + valid, even if installed via a non-SUBSCRIBE mechanism. + + A NOTIFY does not terminate its corresponding subscription; in other + words, a single SUBSCRIBE request may trigger several NOTIFY + requests. + +3.2.1. Identification of Reported Events, Event Classes, and Current + State + + Identification of events being reported in a notification is very + similar to that described for subscription to events (see section + 3.1.2.). + + As in SUBSCRIBE requests, NOTIFY "Event" headers will contain a + single event package name for which a notification is being + generated. The package name in the "Event" header MUST match the + "Event" header in the corresponding SUBSCRIBE message. If an "id" + parameter was present in the SUBSCRIBE message, that "id" parameter + MUST also be present in the corresponding NOTIFY messages. + + Event packages may define semantics associated with the body of their + NOTIFY requests; if they do so, those semantics apply. NOTIFY bodies + are expected to provide additional details about the nature of the + event which has occurred and the 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. This body will contain either the + state of the subscribed resource or a pointer to such state in the + form of a URI (see section 4.4.13). + + + +Roach Standards Track [Page 13] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +3.2.2. Notifier NOTIFY Behavior + + When a SUBSCRIBE request is answered with a 200-class response, the + notifier MUST immediately construct and send a NOTIFY request to the + subscriber. When a change in the subscribed state occurs, the + notifier SHOULD immediately construct and send a NOTIFY request, + subject to authorization, local policy, and throttling + considerations. + + A NOTIFY request is considered failed if the response times out, or a + non-200 class response code is received which has no "Retry-After" + header and no implied further action which can be taken to retry the + request (e.g., "401 Authorization Required".) + + If the NOTIFY request fails (as defined above) due to a timeout + condition, and the subscription was installed using a soft-state + mechanism (such as SUBSCRIBE), the notifier SHOULD remove the + subscription. + + This behavior prevents unnecessary transmission of state + information for subscribers who have crashed or disappeared from + the network. Because such transmissions will be sent multiple + times, per the retransmission algorithm defined in SIP [1] + (instead of the typical single transmission for functioning + clients), continuing to service them when no client is available + to acknowledge them could place undue strain on a network. Upon + client restart or reestablishment of a network connection, it is + expected that clients will send SUBSCRIBE messages to refresh + potentially stale state information; such messages will re-install + subscriptions in all relevant nodes. + + If the NOTIFY request fails (as defined above) due to an error + response, and the subscription was installed using a soft-state + mechanism, the notifier MUST remove the corresponding subscription. + + A notify error response would generally indicate that something + has gone wrong with the subscriber or with some proxy on the way + to the subscriber. If the subscriber is in error, it makes the + most sense to allow the subscriber to rectify the situation (by + re-subscribing) once the error condition has been handled. If a + proxy is in error, the periodic SUBSCRIBE refreshes will re- + install subscription state once the network problem has been + resolved. + + If a NOTIFY request receives a 481 response, the notifier MUST remove + the corresponding subscription even if such subscription was + installed by non-SUBSCRIBE means (such as an administrative + interface). + + + +Roach Standards Track [Page 14] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + If the above behavior were not required, subscribers receiving a + notify for an unknown subscription would need to send an error + status code in response to the NOTIFY and also send a SUBSCRIBE + request to remove the subscription. Since this behavior would + make subscribers available for use as amplifiers in denial of + service attacks, we have instead elected to give the 481 response + special meaning: it is used to indicate that a subscription must + be cancelled under all circumstances. + + NOTIFY requests MUST contain a "Subscription-State" header with a + value of "active", "pending", or "terminated". The "active" value + indicates that the subscription has been accepted and has been + authorized (in most cases; see section 5.2.). The "pending" value + indicates that the subscription has been received, but that policy + information is insufficient to accept or deny the subscription at + this time. The "terminated" value indicates that the subscription is + not active. + + If the value of the "Subscription-State" header is "active" or + "pending", the notifier SHOULD also include in the "Subscription- + State" header an "expires" parameter which indicates the time + remaining on the subscription. The notifier MAY use this mechanism + to shorten a subscription; however, this mechanism MUST NOT be used + to lengthen a subscription. + + Including expiration information for active and pending + subscriptions is useful in case the SUBSCRIBE request forks, since + the response to a forked SUBSCRIBE may not be received by the + subscriber. Note well that this "expires" value is a parameter on + the "Subscription-State" header, NOT an "Expires" header. + + If the value of the "Subscription-State" header is "terminated", the + notifier SHOULD also include a "reason" parameter. The notifier MAY + also include a "retry-after" parameter, where appropriate. For + details on the value and semantics of the "reason" and "retry-after" + parameters, see section 3.2.4. + +3.2.3. Proxy NOTIFY Behavior + + Proxies need no additional behavior beyond that described in SIP [1] + to support NOTIFY. If a proxy wishes to see all of the SUBSCRIBE and + NOTIFY requests for a given dialog, it MUST record-route the initial + SUBSCRIBE and any dialog-establishing NOTIFY requests. Such proxies + SHOULD also record-route all other SUBSCRIBE and NOTIFY requests. + + + + + + + +Roach Standards Track [Page 15] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + Note that subscribers and notifiers may elect to use S/MIME + encryption of SUBSCRIBE and NOTIFY requests; consequently, proxies + cannot rely on being able to access any information that is not + explicitly required to be proxy-readable by SIP [1]. + +3.2.4. Subscriber NOTIFY Behavior + + Upon receiving a NOTIFY request, the subscriber 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. The rules + for matching NOTIFY requests with subscriptions that create a new + dialog are described in section 3.3.4. Notifications for + subscriptions which were created inside an existing dialog match if + they are in the same dialog and the "Event" headers match (as + described in section 7.2.1.) + + If, for some reason, the event package designated in the "Event" + header of the NOTIFY request is not supported, the subscriber will + respond with a "489 Bad Event" response. + + To prevent spoofing of events, NOTIFY requests SHOULD be + authenticated, using any defined SIP authentication mechanism. + + NOTIFY requests MUST contain "Subscription-State" headers which + indicate the status of the subscription. + + If the "Subscription-State" header value is "active", it means that + the subscription has been accepted and (in general) has been + authorized. If the header also contains an "expires" parameter, the + subscriber SHOULD take it as the authoritative subscription duration + and adjust accordingly. The "retry-after" and "reason" parameters + have no semantics for "active". + + If the "Subscription-State" value is "pending", the subscription has + been received by the notifier, but there is insufficient policy + information to grant or deny the subscription yet. If the header + also contains an "expires" parameter, the subscriber SHOULD take it + as the authoritative subscription duration and adjust accordingly. + No further action is necessary on the part of the subscriber. The + "retry-after" and "reason" parameters have no semantics for + "pending". + + If the "Subscription-State" value is "terminated", the subscriber + should consider the subscription terminated. The "expires" parameter + has no semantics for "terminated". If a reason code is present, the + client should behave as described below. If no reason code or an + unknown reason code is present, the client MAY attempt to re- + + + +Roach Standards Track [Page 16] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + subscribe at any time (unless a "retry-after" parameter is present, + in which case the client SHOULD NOT attempt re-subscription until + after the number of seconds specified by the "retry-after" + parameter). The defined reason codes are: + + deactivated: The subscription has been terminated, but the subscriber + SHOULD retry immediately with a new subscription. One primary use + of such a status code is to allow migration of subscriptions + between nodes. The "retry-after" parameter has no semantics for + "deactivated". + + probation: The subscription has been terminated, but the client + SHOULD retry at some later time. If a "retry-after" parameter is + also present, the client SHOULD wait at least the number of + seconds specified by that parameter before attempting to re- + subscribe. + + rejected: The subscription has been terminated due to change in + authorization policy. Clients SHOULD NOT attempt to re-subscribe. + The "retry-after" parameter has no semantics for "rejected". + + timeout: The subscription has been terminated because it was not + refreshed before it expired. Clients MAY re-subscribe + immediately. The "retry-after" parameter has no semantics for + "timeout". + + giveup: The subscription has been terminated because the notifier + could not obtain authorization in a timely fashion. If a "retry- + after" parameter is also present, the client SHOULD wait at least + the number of seconds specified by that parameter before + attempting to re-subscribe; otherwise, the client MAY retry + immediately, but will likely get put back into pending state. + + noresource: The subscription has been terminated because the resource + state which was being monitored no longer exists. Clients SHOULD + NOT attempt to re-subscribe. The "retry-after" parameter has no + semantics for "noresource". + + Once the notification is deemed acceptable to the subscriber, the + subscriber SHOULD return a 200 response. In general, it is not + expected that NOTIFY responses will contain bodies; however, they + MAY, if the NOTIFY request contained an "Accept" header. + + Other responses defined in SIP [1] may also be returned, as + appropriate. In no case should a NOTIFY transaction extend for any + longer than the time necessary for automated processing. In + particular, subscribers MUST NOT wait for a user response before + returning a final response to a NOTIFY request. + + + +Roach Standards Track [Page 17] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +3.3. General + +3.3.1. Detecting support for SUBSCRIBE and NOTIFY + + Neither SUBSCRIBE nor NOTIFY necessitate the use of "Require" or + "Proxy-Require" headers; similarly, there is no token defined for + "Supported" headers. If necessary, clients may probe for the support + of SUBSCRIBE and NOTIFY using the OPTIONS request defined in SIP [1]. + + The presence of the "Allow-Events" header in a message is sufficient + to indicate support for SUBSCRIBE and NOTIFY. + + The "methods" parameter for Contact may also be used to + specifically announce support for SUBSCRIBE and NOTIFY messages + when registering. (See reference [8] for details on the "methods" + parameter). + +3.3.2. CANCEL requests + + No semantics are associated with cancelling SUBSCRIBE or NOTIFY. + +3.3.3. Forking + + In accordance with the rules for proxying non-INVITE requests as + defined in SIP [1], successful SUBSCRIBE requests will receive only + one 200-class response; however, due to forking, the subscription may + have been accepted by multiple nodes. The subscriber MUST therefore + be prepared to receive NOTIFY requests with "From:" tags which differ + from the "To:" tag received in the SUBSCRIBE 200-class response. + + If multiple NOTIFY messages are received in different dialogs in + response to a single SUBSCRIBE message, each dialog represents a + different destination to which the SUBSCRIBE request was forked. For + information on subscriber handling in such situations, see section + 4.4.9. + +3.3.4. Dialog creation and termination + + If an initial SUBSCRIBE request is not sent on a pre-existing dialog, + the subscriber will wait for a response to the SUBSCRIBE request or a + matching NOTIFY. + + Responses are matched to such SUBSCRIBE requests if they contain the + same the same "Call-ID", the same "From" header "tag", and the same + "CSeq". Rules for the comparison of these headers are described in + SIP [1]. If a 200-class response matches such a SUBSCRIBE request, + it creates a new subscription and a new dialog (unless they have + already been created by a matching NOTIFY request; see below). + + + +Roach Standards Track [Page 18] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + NOTIFY requests are matched to such SUBSCRIBE requests if they + contain the same "Call-ID", a "To" header "tag" parameter which + matches the "From" header "tag" parameter of the SUBSCRIBE, and the + same "Event" header field. Rules for comparisons of the "Event" + headers are described in section 7.2.1. If a matching NOTIFY request + contains a "Subscription-State" of "active" or "pending", it creates + a new subscription and a new dialog (unless they have already been + created by a matching response, as described above). + + If an initial SUBSCRIBE is sent on a pre-existing dialog, a matching + 200-class response or successful NOTIFY request merely creates a new + subscription associated with that dialog. + + Multiple subscriptions can be associated with a single dialog. + Subscriptions may also exist in dialogs associated with INVITE- + created application state and other application state created by + mechanisms defined in other specifications. These sets of + application state do not interact beyond the behavior described for a + dialog (e.g., route set handling). + + A subscription is destroyed when a notifier sends a NOTIFY request + with a "Subscription-State" of "terminated". + + A subscriber may send a SUBSCRIBE request with an "Expires" header + of 0 in order to trigger the sending of such a NOTIFY request; + however, for the purposes of subscription and dialog lifetime, the + subscription is not considered terminated until the NOTIFY with a + "Subscription-State" of "terminated" is sent. + + If a subscription's destruction leaves no other application state + associated with the dialog, the dialog terminates. The destruction + of other application state (such as that created by an INVITE) will + not terminate the dialog if a subscription is still associated with + that dialog. + + Note that the above behavior means that a dialog created with an + INVITE does not necessarily terminate upon receipt of a BYE. + Similarly, in the case that several subscriptions are associated + with a single dialog, the dialog does not terminate until all the + subscriptions in it are destroyed. + +3.3.5. State Agents and Notifier Migration + + When state agents (see section 4.4.11.) are used, it is often useful + to allow migration of subscriptions between state agents and the + nodes for which they are providing state aggregation (or even among + various state agents). Such migration may be effected by sending a + + + + +Roach Standards Track [Page 19] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + NOTIFY message with a "Subscription-State" header of "terminated", + and a reason parameter of "deactivated". This NOTIFY request is + otherwise normal, and is formed as described in section 3.2.2. + + Upon receipt of this NOTIFY message, the subscriber SHOULD attempt to + re-subscribe (as described in the preceding sections). Note that + this subscription is established on a new dialog, and does not re-use + the route set from the previous subscription dialog. + + The actual migration is effected by making a change to the policy + (such as routing decisions) of one or more servers to which the + SUBSCRIBE request will be sent in such a way that a different node + ends up responding to the SUBSCRIBE request. This may be as simple + as a change in the local policy in the notifier from which the + subscription is migrating so that it serves as a proxy or redirect + server instead of a notifier. + + Whether, when, and why to perform notifier migrations may be + described in individual event packages; otherwise, such decisions are + a matter of local notifier policy, and are left up to individual + implementations. + +3.3.6. 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 a SUBSCRIBE with an "Expires" of 0. + + Of course, an immediate fetch while a subscription is active may be + effected by sending a SUBSCRIBE with an "Expires" equal to the number + of seconds remaining in the subscription. + + Upon receipt of this SUBSCRIBE request, the notifier (or notifiers, + if the SUBSCRIBE request was forked) will send a NOTIFY request + containing resource state in the same dialog. + + Note that the NOTIFY messages triggered by SUBSCRIBE messages with + "Expires" headers of 0 will contain a "Subscription-State" value of + "terminated", and a "reason" parameter of "timeout". + + Polling of event state can cause significant increases in load on the + network and notifiers; as such, it should be used only sparingly. In + particular, polling SHOULD NOT be used in circumstances in which it + will typically result in more network messages than long-running + subscriptions. + + + + + + +Roach Standards Track [Page 20] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + When polling is used, subscribers SHOULD attempt to cache + authentication credentials between polls so as to reduce the number + of messages sent. + +3.3.7. Allow-Events header usage + + The "Allow-Events" header, if present, includes a list of tokens + which indicates the event packages supported by the client (if sent + in a request) or server (if sent in a response). In other words, a + node sending an "Allow-Events" header is advertising that it can + process SUBSCRIBE requests and generate NOTIFY requests for all of + the event 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 + all methods which initiate dialogs and their responses (such as + INVITE) and OPTIONS responses. + + This information is very useful, for example, in allowing user agents + to render particular interface elements appropriately according to + whether the events required to implement the features they represent + are supported by the appropriate nodes. + + Note that "Allow-Events" headers MUST NOT be inserted by proxies. + +3.3.8. PINT Compatibility + + The "Event" header is considered mandatory for the purposes of this + document. However, to maintain compatibility with PINT (see [2]), + servers MAY interpret a SUBSCRIBE request with no "Event" header as + requesting a subscription to PINT events. If a server does not + support PINT, it SHOULD return "489 Bad Event" to any SUBSCRIBE + messages without an "Event" header. + +4. Event Packages + + This section covers several issues which should be taken into + consideration when event packages based on SUBSCRIBE and NOTIFY are + proposed. + +4.1. Appropriateness of Usage + + When designing an event package using the methods described in this + document for event notification, it is important to consider: is SIP + an appropriate mechanism for the 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 + + + + +Roach Standards Track [Page 21] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + defining event packages 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 interested in extending the mechanism defined in this + document are urged to follow the development of "Guidelines for + Authors of SIP Extensions" [7] for further guidance regarding + appropriate uses of SIP. + + Further, it is expected that this mechanism is not to be used in + applications 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 hundredth of a second could easily overload such a network. + +4.2. Event Template-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. + + Event template-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. Event template-packages may even be + applied to other event template-packages. + + To extend the object-oriented analogy made earlier, event template- + packages can be thought of as templatized C++ packages which must be + applied to other packages to be useful. + + The name of an event template-package as applied to a package is + formed by appending a period followed by the event template-package + name to the end of the package. For example, if a template-package + called "winfo" were being applied to a package called "presence", the + event token used in "Event" and "Allow-Events" would be + "presence.winfo". + + Event template-packages must be defined so that they can be applied + to any arbitrary package. In other words, event template-packages + cannot be specifically tied to one or a few "parent" packages in such + a way that they will not work with other packages. + +4.3. Amount of State to be Conveyed + + When designing event packages, it is important to consider the type + of information which will be conveyed during a notification. + + + + +Roach Standards Track [Page 22] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + 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. + + There are two possible solutions to this problem that event packages + may choose to implement. + +4.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 to send complete state information + when an event occurs. + + In some circumstances, conveying the current state alone may be + insufficient for a particular class of events. In these cases, the + event packages should include complete state information along with + the event that occurred. For example, conveying "no customer service + representatives available" may not be as useful as conveying "no + customer service representatives available; representative + sip:46@cs.xyz.int just logged off". + +4.3.2. State Deltas + + In the case that the state information to be conveyed is large, the + event package may choose to detail a scheme by which NOTIFY messages + contain state deltas instead of complete state. + + Such a scheme would work as follows: any NOTIFY sent in immediate + response to a SUBSCRIBE contains full state information. NOTIFY + messages sent because of a state change will contain only the state + information that has changed; the subscriber will then merge this + information into its current knowledge about the state of the + resource. + + Any event package that supports delta changes to states MUST include + a version number that increases by exactly one for each NOTIFY + transaction in a subscription. Note that the state version number + appears in the body of the message, not in a SIP header. + + If a NOTIFY arrives that has a version number that is incremented by + more than one, the subscriber knows that a state delta has been + missed; it ignores the NOTIFY message containing the state delta + + + + + +Roach Standards Track [Page 23] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + (except for the version number, which it retains to detect message + loss), and re-sends a SUBSCRIBE to force a NOTIFY containing a + complete state snapshot. + +4.4. Event Package Responsibilities + + Event packages are not required to reiterate any of the behavior + described in this document, although they may choose to do so for + clarity or emphasis. In general, though, such packages are + expected to describe only the behavior that extends or modifies + the behavior described in this document. + + Note that any behavior designated with "SHOULD" or "MUST" in this + document is not allowed to be weakened by extension documents; + however, such documents may elect to strengthen "SHOULD" + requirements to "MUST" strength if required by their application. + + In addition to the normal sections expected in standards-track + RFCs and SIP extension documents, authors of event packages need + to address each of the issues detailed in the following + subsections, whenever applicable. + +4.4.1. Event Package Name + + This section, which MUST be present, defines the token name to be + used to designate the event package. It MUST include the information + which appears in the IANA registration of the token. For information + on registering such types, see section 6. + +4.4.2. Event Package Parameters + + If parameters are to be used on the "Event" header to modify the + behavior of the event package, the syntax and semantics of such + headers MUST be clearly defined. + +4.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 + the class of events being requested. Designers of event packages are + strongly encouraged to re-use existing MIME types for message bodies + where practical. + + + + + + + + +Roach Standards Track [Page 24] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + 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 syntax and semantics for all referenced body types. + +4.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 MUST also define a default "Expires" value to be used if + none is specified. + +4.4.5. NOTIFY Bodies + + The NOTIFY body is used to report state on the resource being + monitored. Each package MUST define what type or types of event + bodies are expected in NOTIFY requests. Such packages MUST specify + or cite detailed specifications for the syntax and semantics + associated with such event body. + + Event packages also MUST define which MIME type is to be assumed if + none are specified in the "Accept" header of the SUBSCRIBE request. + +4.4.6. Notifier processing of SUBSCRIBE requests + + This section describes the processing to be performed by the notifier + upon receipt of a SUBSCRIBE request. Such a section is required. + + Information in this section includes details of how to authenticate + subscribers and authorization issues for the package. Such + authorization issues may include, for example, whether all SUBSCRIBE + requests for this package are answered with 202 responses (see + section 5.2.). + +4.4.7. Notifier generation of NOTIFY requests + + This section of an event 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 be sent, how + to compute the state information in the NOTIFY, 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 notifications; see section 4.3. Such a section is + required. + + This section may optionally describe the behavior used to process the + subsequent response. + + + + +Roach Standards Track [Page 25] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +4.4.8. Subscriber processing of NOTIFY requests + + This section of an event package describes the process followed by + the subscriber upon receipt of a NOTIFY request, including any logic + required to form a coherent resource state (if applicable). + +4.4.9. Handling of forked requests + + Each event package MUST specify whether forked SUBSCRIBE requests are + allowed to install multiple subscriptions. + + If such behavior is not allowed, the first potential dialog- + establishing message will create a dialog. All subsequent NOTIFY + messages which correspond to the SUBSCRIBE message (i.e., match "To", + "From", "From" header "tag" parameter, "Call-ID", "CSeq", "Event", + and "Event" header "id" parameter) but which do not match the dialog + would be rejected with a 481 response. Note that the 200-class + response to the SUBSCRIBE can arrive after a matching NOTIFY has been + received; such responses might not correlate to the same dialog + established by the NOTIFY. Except as required to complete the + SUBSCRIBE transaction, such non-matching 200-class responses are + ignored. + + If installing of multiple subscriptions by way of a single forked + SUBSCRIBE is allowed, the subscriber establishes a new dialog towards + each notifier by returning a 200-class response to each NOTIFY. Each + dialog is then handled as its own entity, and is refreshed + independent of the other dialogs. + + In the case that multiple subscriptions are allowed, the event + package MUST specify whether merging of the notifications to form a + single state is required, and how such merging is to be performed. + Note that it is possible that some event packages may be defined in + such a way that each 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. + +4.4.10. Rate of notifications + + Each event package is expected to define a requirement (SHOULD or + MUST strength) which defines an absolute maximum on the rate at which + notifications are allowed to be generated by a single notifier. + + Each package MAY further define a throttle mechanism which allows + subscribers to further limit the rate of notification. + + + + + + +Roach Standards Track [Page 26] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +4.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 or unwilling to provide such state information itself). An + example of such an application is a node which tracks the presence + and availability of a user in the network. + + If state agents are to be used by the package, the package MUST + specify how such state agents aggregate information and how they + provide authentication and authorization. + + Event packages MAY also outline specific scenarios under which + notifier migrations take place. + +4.4.12. Examples + + Event packages SHOULD include several demonstrative message flow + diagrams paired with several typical, syntactically correct, and + complete messages. + + It is RECOMMENDED that documents describing event packages clearly + indicate that such examples are informative and not normative, with + instructions that implementors refer to the main text of the document + for exact protocol details. + +4.4.13. Use of URIs to Retrieve State + + Some types of event packages may define state information which is + potentially too large to reasonably send in a SIP message. To + alleviate this problem, event packages may include the ability to + convey a URI instead of state information; this URI will then be used + to retrieve the actual state information. + + The precise mechanisms for conveying such URIs are out of the scope + of this document. + + + + + + + + + + + + + +Roach Standards Track [Page 27] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +5. Security Considerations + +5.1. Access Control + + The ability to accept subscriptions should be under the direct + control of the notifier's 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 subscriber identity (based on access control lists), + using standard SIP authentication mechanisms. The methods for + creation and distribution of such access control lists is outside the + scope of this document. + +5.2. Notifier Privacy Mechanism + + The mere act of returning a 200 or certain 4xx and 6xx responses to + SUBSCRIBE requests may, under certain circumstances, create privacy + concerns by revealing sensitive policy information. In these cases, + the notifier SHOULD always return a 202 response. While the + subsequent NOTIFY message may 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. + + Individual packages and their related documents for which such a mode + of operation makes sense can further describe how and why to generate + such potentially correct data. For example, such a mode of operation + is mandated by RFC 2779 [6] for user presence information. + +5.3. 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. + + To reduce the chances of such an attack, implementations of notifiers + SHOULD require authentication. Authentication issues are discussed + in SIP [1]. + + + + + + + +Roach Standards Track [Page 28] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +5.4. Replay Attacks + + Replaying of either SUBSCRIBE or NOTIFY can have detrimental effects. + + In the case of SUBSCRIBE messages, attackers may be able to install + any arbitrary subscription which it witnessed being installed at some + point in the past. Replaying of NOTIFY messages may be used to spoof + old state information (although a good versioning mechanism in the + body of the NOTIFY messages may help mitigate such an attack). Note + that the prohibition on sending NOTIFY messages to nodes which have + not subscribed to an event also aids in mitigating the effects of + such an attack. + + To prevent such attacks, implementations SHOULD require + authentication with anti-replay protection. Authentication issues + are discussed in SIP [1]. + +5.5. Man-in-the middle attacks + + Even with authentication, man-in-the-middle attacks using SUBSCRIBE + may be used to install arbitrary subscriptions, hijack existing + subscriptions, terminate outstanding subscriptions, or modify the + resource to which a subscription is being made. To prevent such + attacks, implementations SHOULD provide integrity protection across + "Contact", "Route", "Expires", "Event", and "To" headers of SUBSCRIBE + messages, at a minimum. If SUBSCRIBE bodies are used to define + further information about the state of the call, they SHOULD be + included in the integrity protection scheme. + + Man-in-the-middle attacks may also attempt to use NOTIFY messages to + spoof arbitrary state information and/or terminate outstanding + subscriptions. To prevent such attacks, implementations SHOULD + provide integrity protection across the "Call-ID", "CSeq", and + "Subscription-State" headers and the bodies of NOTIFY messages. + + Integrity protection of message headers and bodies is discussed in + SIP [1]. + +5.6. Confidentiality + + The state information contained in a NOTIFY message has the potential + to contain sensitive information. Implementations MAY encrypt such + information to ensure confidentiality. + + While less likely, it is also possible that the information contained + in a SUBSCRIBE message contains information that users might not want + to have revealed. Implementations MAY encrypt such information to + ensure confidentiality. + + + +Roach Standards Track [Page 29] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + To allow the remote party to hide information it considers sensitive, + all implementations SHOULD be able to handle encrypted SUBSCRIBE and + NOTIFY messages. + + The mechanisms for providing confidentiality are detailed in SIP [1]. + +6. IANA Considerations + + 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 template-packages; see section 4.2. To avoid confusion, + template-package names and package names share the same namespace; in + other words, an event template-package MUST NOT share a name with a + package. + + Following the policies outlined in "Guidelines for Writing an IANA + Considerations Section in RFCs" [4], normal event package + identification tokens are allocated as First Come First Served, and + event template-package identification tokens are allocated on a IETF + Consensus basis. + + Registrations with the IANA MUST include the token being registered + and whether the token is a package or a template-package. Further, + packages MUST include contact information for the party responsible + for the registration and/or a published document which describes the + event package. Event template-package token registrations MUST + include a pointer to the published RFC which defines the event + template-package. + + Registered tokens to designate packages and template-packages MUST + NOT contain the character ".", which is used to separate template- + packages from packages. + +6.1. Registration Information + + As this document specifies no package or template-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 the event packages and template-packages + defined in "SIP-Specific Event Notification" [RFC3265]. Each name is + designated as a package or a template-package under "Type". + + + + +Roach Standards Track [Page 30] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + Package Name Type Contact Reference + ------------ ---- ------- --------- + example1 package [Roach] + example2 package [Roach] [RFC3265] + example3 package [RFC3265] + example4 template [Roach] [RFC3265] + example5 template [RFC3265] + + PEOPLE + ------ + [Roach] Adam Roach <adam@dynamicsoft.com> + + REFERENCES + ---------- + [RFC3265] Roach, A., "SIP-Specific Event Notification", RFC 3265, + June 2002. + +6.2. Registration Template + + To: ietf-sip-events@iana.org + Subject: Registration of new SIP event package + + Package Name: + + (Package names must conform to the syntax described in + section 7.2.1.) + + Is this registration for a Template Package: + + (indicate yes or no) + + Published Specification(s): + + (Template packages require a published RFC. Other packages + may reference a specification when appropriate). + + Person & email address to contact for further information: + +6.3. Header Field Names + + This document registers three new header field names, described + elsewhere in this document. These headers are defined by the + following information, which is to be added to the header sub- + registry under http://www.iana.org/assignments/sip-parameters. + + Header Name: Allow-Events + Compact Form: u + + + + +Roach Standards Track [Page 31] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + Header Name: Subscription-State + Compact Form: (none) + + Header Name: Event + Compact Form: o + +6.4. Response Codes + + This document registers two new response codes. These response codes + are defined by the following information, which is to be added to the + method and response-code sub-registry under + http://www.iana.org/assignments/sip-parameters. + + Response Code Number: 202 + Default Reason Phrase: Accepted + + Response Code Number: 489 + Default Reason Phrase: Bad Event + +7. Syntax + + This section describes the syntax extensions required for event + notification in SIP. Semantics are described in section 3. Note + that the formal syntax definitions described in this document are + expressed in the ABNF format used in SIP [1], and contain references + to elements defined therein. + +7.1. New Methods + + This document describes two new SIP methods: SUBSCRIBE and + NOTIFY. + + This table expands on tables 2 and 3 in SIP [1]. + + Header Where SUB NOT + ------ ----- --- --- + Accept R o o + Accept 2xx - - + Accept 415 o o + Accept-Encoding R o o + Accept-Encoding 2xx - - + Accept-Encoding 415 o o + Accept-Language R o o + Accept-Language 2xx - - + Accept-Language 415 o o + Alert-Info R - - + Alert-Info 180 - - + Allow R o o + + + +Roach Standards Track [Page 32] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + Allow 2xx o o + Allow r o o + Allow 405 m m + Authentication-Info 2xx o o + Authorization R o o + Call-ID c m m + Contact R m m + Contact 1xx o o + Contact 2xx m o + Contact 3xx m m + Contact 485 o o + Content-Disposition o o + Content-Encoding o o + Content-Language o o + Content-Length t t + Content-Type * * + CSeq c m m + Date o o + Error-Info 300-699 o o + Expires o - + Expires 2xx m - + From c m m + In-Reply-To R - - + Max-Forwards R m m + Min-Expires 423 m - + MIME-Version o o + Organization o - + Priority R o - + Proxy-Authenticate 407 m m + Proxy-Authorization R o o + Proxy-Require R o o + RAck R - - + Record-Route R o o + Record-Route 2xx,401,484 o o + Reply-To - - + Require o o + Retry-After 404,413,480,486 o o + Retry-After 500,503 o o + Retry-After 600,603 o o + Route R c c + RSeq 1xx o o + Server r o o + Subject R - - + Supported R o o + Supported 2xx o o + Timestamp o o + To c(1) m m + Unsupported 420 o o + + + +Roach Standards Track [Page 33] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + User-Agent o o + Via c m m + Warning R - o + Warning r o o + WWW-Authenticate 401 m m + +7.1.1. SUBSCRIBE method + + "SUBSCRIBE" is added to the definition of the element "Method" in the + SIP message grammar. + + Like all SIP method names, the SUBSCRIBE method name is case + sensitive. The SUBSCRIBE method is used to request asynchronous + notification of an event or set of events at a later time. + +7.1.2. NOTIFY method + + "NOTIFY" is added to the definition of the element "Method" in the + SIP message grammar. + + The NOTIFY method is used to notify a SIP node that an event which + has been requested by an earlier SUBSCRIBE method has occurred. It + may also provide further details about the event. + +7.2. New Headers + + This table expands on tables 2 and 3 in SIP [1], as amended by the + changes described in section 7.1. + + Header field where proxy ACK BYE CAN INV OPT REG PRA SUB NOT + ----------------------------------------------------------------- + Allow-Events R o o - o o o o o o + Allow-Events 2xx - o - o o o o o o + Allow-Events 489 - - - - - - - m m + Event R - - - - - - - m m + Subscription-State R - - - - - - - - m + +7.2.1. "Event" header + + Event is added to the definition of the element "message-header" in + the SIP message grammar. + + For the purposes of matching responses and NOTIFY messages with + SUBSCRIBE messages, the event-type portion of the "Event" header is + compared byte-by-byte, and the "id" parameter token (if present) is + compared byte-by-byte. An "Event" header containing an "id" + parameter never matches an "Event" header without an "id" parameter. + No other parameters are considered when performing a comparison. + + + +Roach Standards Track [Page 34] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + Note that the forgoing text means that "Event: foo; id=1234" would + match "Event: foo; param=abcd; id=1234", but not "Event: foo" (id + does not match) or "Event: Foo; id=1234" (event portion does not + match). + + This document does not define values for event-types. These values + will be defined by individual event packages, and MUST be registered + with the IANA. + + There MUST be exactly one event type listed per event header. + Multiple events per message are disallowed. + +7.2.2. "Allow-Events" Header + + Allow-Events is added to the definition of the element "general- + header" in the SIP message grammar. Its usage is described in + section 3.3.7. + +7.2.3. "Subscription-State" Header + + Subscription-State is added to the definition of the element + "request-header" in the SIP message grammar. Its usage is described + in section 3.2.4. + +7.3. New Response Codes + +7.3.1. "202 Accepted" Response Code + + The 202 response is added to the "Success" header field definition. + "202 Accepted" has the same meaning as that defined in HTTP/1.1 [3]. + +7.3.2. "489 Bad Event" Response Code + + The 489 event response is added to the "Client-Error" header field + definition. "489 Bad Event" is used to indicate that the server did + not understand the event package specified in a "Event" header field. + +7.4. Augmented BNF Definitions + + The Augmented BNF definitions for the various new and modified syntax + elements follows. The notation is as used in SIP [1], and any + elements not defined in this section are as defined in SIP and the + documents to which it refers. + + SUBSCRIBEm = %x53.55.42.53.43.52.49.42.45 ; SUBSCRIBE in caps + NOTIFYm = %x4E.4F.54.49.46.59 ; NOTIFY in caps + extension-method = SUBSCRIBEm / NOTIFYm / token + + + + +Roach Standards Track [Page 35] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + Event = ( "Event" / "o" ) HCOLON event-type + *( SEMI event-param ) + event-type = event-package *( "." event-template ) + event-package = token-nodot + event-template = token-nodot + token-nodot = 1*( alphanum / "-" / "!" / "%" / "*" + / "_" / "+" / "`" / "'" / "~" ) + event-param = generic-param / ( "id" EQUAL token ) + + Allow-Events = ( "Allow-Events" / "u" ) HCOLON event-type + *(COMMA event-type) + + Subscription-State = "Subscription-State" HCOLON substate-value + *( SEMI subexp-params ) + substate-value = "active" / "pending" / "terminated" + / extension-substate + extension-substate = token + subexp-params = ("reason" EQUAL event-reason-value) + / ("expires" EQUAL delta-seconds) + / ("retry-after" EQUAL delta-seconds) + / generic-param + event-reason-value = "deactivated" + / "probation" + / "rejected" + / "timeout" + / "giveup" + / "noresource" + / event-reason-extension + event-reason-extension = token + +8. Normative References + + [1] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., + Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: + Session Initiation Protocol", RFC 3261, June 2002. + + [2] Petrack, S. and L. Conroy, "The PINT Service Protocol", RFC + 2848, June 2000. + + [3] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., + Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- + HTTP/1.1", RFC 2616, June 1999. + + [4] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA + Considerations Section in RFCs", BCP 26, RFC 2434, October + 1998. + + + + + +Roach Standards Track [Page 36] + +RFC 3265 SIP-Specific Event Notification June 2002 + + + [5] Bradner, S., "Key Words for Use in RFCs to Indicate Requirement + Levels", BCP 14, RFC 2119, March 1997. + + [6] Day, M., Aggarwal, S., Mohr, G. and J. Vincent, "Instant + Messaging/Presence Protocol Requirements", RFC 2779, February + 2000. + +9. Informative References + + [7] Rosenberg, J. and H. Schulzrinne, "Guidelines for Authors of + SIP Extensions", Work in Progress. + + [8] Schulzrinne, H. and J. Rosenberg, "SIP Caller Preferences and + Callee Capabilities", Work in Progress. + +10. 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 for + miscellaneous guidance, Jonathan Rosenberg for a thorough scrubbing + of the -00 draft, and the authors of the "SIP Extensions for + Presence" document for their input to SUBSCRIBE and NOTIFY request + semantics. + +11. Notice Regarding Intellectual Property Rights + + The IETF has been notified of intellectual property rights claimed in + regard to some or all of the specification contained in this + document. For more information, consult the online list of claimed + rights at http://www.ietf.org/ipr.html + +12. Author's Address + + Adam Roach + dynamicsoft + 5100 Tennyson Parkway + Suite 1200 + Plano, TX 75024 + USA + + EMail: adam@dynamicsoft.com + Voice: sip:adam@dynamicsoft.com + + + + + + +Roach Standards Track [Page 37] + +RFC 3265 SIP-Specific Event Notification June 2002 + + +13. Full Copyright Statement + + Copyright (C) The Internet Society (2002). All Rights Reserved. + + This document and translations of it may be copied and furnished to + others, and derivative works that comment on or otherwise explain it + or assist in its implementation may be prepared, copied, published + and distributed, in whole or in part, without restriction of any + kind, provided that the above copyright notice and this paragraph are + included on all such copies and derivative works. However, this + document itself may not be modified in any way, such as by removing + the copyright notice or references to the Internet Society or other + Internet organizations, except as needed for the purpose of + developing Internet standards in which case the procedures for + copyrights defined in the Internet Standards process must be + followed, or as required to translate it into languages other than + English. + + The limited permissions granted above are perpetual and will not be + revoked by the Internet Society or its successors or assigns. + + This document and the information contained herein is provided on an + "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING + TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION + HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + + + + + + + + + + + +Roach Standards Track [Page 38] + |