summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3903.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc3903.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc3903.txt')
-rw-r--r--doc/rfc/rfc3903.txt1795
1 files changed, 1795 insertions, 0 deletions
diff --git a/doc/rfc/rfc3903.txt b/doc/rfc/rfc3903.txt
new file mode 100644
index 0000000..21a425f
--- /dev/null
+++ b/doc/rfc/rfc3903.txt
@@ -0,0 +1,1795 @@
+
+
+
+
+
+
+Network Working Group A. Niemi, Ed.
+Request for Comments: 3903 Nokia
+Category: Standards Track October 2004
+
+
+ Session Initiation Protocol (SIP) Extension
+ for Event State Publication
+
+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 (2004).
+
+Abstract
+
+ This document describes an extension to the Session Initiation
+ Protocol (SIP) for publishing event state used within the SIP Events
+ framework. The first application of this extension is for the
+ publication of presence information.
+
+ The mechanism described in this document can be extended to support
+ publication of any event state for which there exists an appropriate
+ event package. It is not intended to be a general-purpose mechanism
+ for transport of arbitrary data, as there are better-suited
+ mechanisms for this purpose.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 2. Definitions and Document Conventions . . . . . . . . . . . . 3
+ 3. Overall Operation . . . . . . . . . . . . . . . . . . . . . 4
+ 4. Constructing PUBLISH Requests . . . . . . . . . . . . . . . 5
+ 4.1. Identification of Published Event State. . . . . . . . 6
+ 4.2. Creating Initial Publication . . . . . . . . . . . . . 7
+ 4.3. Refreshing Event State . . . . . . . . . . . . . . . . 8
+ 4.4. Modifying Event State . . . . . . . . . . . . . . . . 9
+ 4.5. Removing Event State . . . . . . . . . . . . . . . . . 9
+ 5. Processing PUBLISH Responses . . . . . . . . . . . . . . . . 10
+ 6. Processing PUBLISH Requests . . . . . . . . . . . . . . . . 10
+ 7. Processing OPTIONS Requests . . . . . . . . . . . . . . . . 13
+ 8. Use of Entity-tags in PUBLISH . . . . . . . . . . . . . . . 13
+
+
+
+Niemi Standards Track [Page 1]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ 8.1. General Notes. . . . . . . . . . . . . . . . . . . . . 13
+ 8.2. Client Usage . . . . . . . . . . . . . . . . . . . . . 14
+ 8.3. Server Usage . . . . . . . . . . . . . . . . . . . . . 14
+ 9. Controlling the Rate of Publication . . . . . . . . . . . . 15
+ 10. Considerations for Event Packages using PUBLISH . . . . . . 15
+ 10.1. PUBLISH Bodies . . . . . . . . . . . . . . . . . . . . 16
+ 10.2. PUBLISH Response Bodies. . . . . . . . . . . . . . . . 16
+ 10.3. Multiple Sources for Event State . . . . . . . . . . . 16
+ 10.4. Event State Segmentation . . . . . . . . . . . . . . . 17
+ 10.5. Rate of Publication. . . . . . . . . . . . . . . . . . 17
+ 11. Protocol Element Definitions . . . . . . . . . . . . . . . . 17
+ 11.1. New Methods. . . . . . . . . . . . . . . . . . . . . . 17
+ 11.1.1. PUBLISH Method . . . . . . . . . . . . . . . . 17
+ 11.2. New Response Codes . . . . . . . . . . . . . . . . . . 19
+ 11.2.1. "412 Conditional Request Failed" Response Code 19
+ 11.3. New Header Fields . . . . . . . . . . . . . . . . . . 20
+ 11.3.1. "SIP-ETag" Header Field . . . . . . . . . . . 20
+ 11.3.2. "SIP-If-Match" Header Field . . . . . . . . . 20
+ 12. Augmented BNF Definitions . . . . . . . . . . . . . . . . . 21
+ 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . 21
+ 13.1. Methods . . . . . . . . . . . . . . . . . . . . . . . 21
+ 13.2. Response Codes . . . . . . . . . . . . . . . . . . . . 21
+ 13.3. Header Field Names . . . . . . . . . . . . . . . . . . 21
+ 14. Security Considerations . . . . . . . . . . . . . . . . . . 22
+ 14.1. Access Control . . . . . . . . . . . . . . . . . . . . 22
+ 14.2. Denial of Service Attacks . . . . . . . . . . . . . . 22
+ 14.3. Replay Attacks . . . . . . . . . . . . . . . . . . . . 22
+ 14.4. Man in the Middle Attacks . . . . . . . . . . . . . . 23
+ 14.5. Confidentiality . . . . . . . . . . . . . . . . . . . 23
+ 15. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 24
+ 16. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 29
+ 17. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30
+ 18. References . . . . . . . . . . . . . . . . . . . . . . . . . 30
+ 18.1. Normative References . . . . . . . . . . . . . . . . . 30
+ 18.2. Informative References . . . . . . . . . . . . . . . . 31
+ Author's Address. . . . . . . . . . . . . . . . . . . . . . . . . 31
+ Full Copyright Statement. . . . . . . . . . . . . . . . . . . . . 32
+
+1. Introduction
+
+ This specification provides a framework for the publication of event
+ state from a user agent to an entity that is responsible for
+ compositing this event state and distributing it to interested
+ parties through the SIP Events [1] framework.
+
+
+
+
+
+
+
+Niemi Standards Track [Page 2]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ In addition to defining an event publication framework, this
+ specification defines a concrete usage of that framework for the
+ publication of presence state [2] by a presence user agent [3] to a
+ presence compositor, which has a tightly coupled relationship with
+ the presence agent [1].
+
+ The requirements and model for presence publication are documented in
+ [10]. This specification will address each of those requirements.
+
+ The mechanism described in this document can be extended to support
+ publication of any event state for which there exists an appropriate
+ event package as defined in [1]. For instance, an application of SIP
+ events for message waiting indications [11] might choose to collect
+ the statuses of voice-mail boxes across a set of user agents using
+ the PUBLISH mechanism. The compositor in such an application would
+ then be responsible for collecting and distributing this state to the
+ subscribers of the event package.
+
+ Each application that makes use of the PUBLISH mechanism in the
+ publication of event state will need to adhere to the guidelines set
+ in Section 10. The mechanism described in this document is not
+ intended to be a general-purpose mechanism for transport of arbitrary
+ data, as there are better-suited mechanisms for this purpose.
+
+2. Definitions and Document Conventions
+
+ In addition to the definitions of RFC 2778 [3], RFC 3265 [1], and RFC
+ 3261 [4], this document introduces some new concepts:
+
+ Event State: State information for a resource, associated with an
+ event package and an address-of-record.
+
+ Event Publication Agent (EPA): The User Agent Client (UAC) that
+ issues PUBLISH requests to publish event state.
+
+ Event State Compositor (ESC): The User Agent Server (UAS) that
+ processes PUBLISH requests, and is responsible for compositing
+ event state into a complete, composite event state of a resource.
+
+ Presence Compositor: A type of Event State Compositor that is
+ responsible for compositing presence state for a presentity.
+
+ Publication: The act of an EPA sending a PUBLISH request to an ESC to
+ publish event state.
+
+ Event Hard State: The steady-state or default event state of a
+ resource, which the ESC may use in the absence of, or in addition
+ to, soft state publications.
+
+
+
+Niemi Standards Track [Page 3]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ Event Soft State: Event state published by an EPA using the PUBLISH
+ mechanism. A protocol element (i.e., an entity-tag) is used to
+ identify a specific soft state entity at the ESC. Soft state has
+ a defined lifetime and will expire after a negotiated amount of
+ time.
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in BCP 14, RFC 2119 [5]
+ and indicate requirement levels for compliant implementations.
+
+ Indented passages such as this one are used in this document to
+ provide additional information and clarifying text. They do not
+ contain descriptions of normative protocol behavior.
+
+3. Overall Operation
+
+ This document defines a new SIP method, PUBLISH, for publishing event
+ state. PUBLISH is similar to REGISTER in that it allows a user to
+ create, modify, and remove state in another entity which manages this
+ state on behalf of the user. Addressing a PUBLISH request is
+ identical to addressing a SUBSCRIBE request. The Request-URI of a
+ PUBLISH request is populated with the address of the resource for
+ which the user wishes to publish event state. The user may in turn
+ have multiple User Agents or endpoints that publish event state.
+ Each endpoint may publish its own unique state, out of which the
+ event state compositor generates the composite event state of the
+ resource. In addition to a particular resource, all published event
+ state is associated with a specific event package. Through a
+ subscription to that event package, the user is able to discover the
+ composite event state of all of the active publications.
+
+ A User Agent Client (UAC) that publishes event state is labeled an
+ Event Publication Agent (EPA). For presence, this is the familiar
+ Presence User Agent (PUA) role as defined in [2]. The entity that
+ processes the PUBLISH request is known as an Event State Compositor
+ (ESC). For presence, this is the familiar Presence Agent (PA) role
+ as defined in [2].
+
+ PUBLISH requests create soft state in the ESC. This event soft state
+ has a defined lifetime and will expire after a negotiated amount of
+ time, requiring the publication to be refreshed by subsequent PUBLISH
+ requests. There may also be event hard state provisioned for each
+ resource for a particular event package. This event state represents
+ the resource state that is present at all times, and does not expire.
+ The ESC may use event hard state in the absence of, or in addition
+ to, event soft state provided through the PUBLISH mechanism. Setting
+
+
+
+
+Niemi Standards Track [Page 4]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ this event hard state or configuring the ESC policy regarding the
+ aggregation of different event state is out of the scope of this
+ specification.
+
+ The body of a PUBLISH request carries the published event state. In
+ response to every successful PUBLISH request, the ESC assigns an
+ identifier to the publication in the form of an entity-tag. This
+ identifier is then used by the EPA in any subsequent PUBLISH request
+ that modifies, refreshes or removes the event state of that
+ publication. When event state expires or is explicitly removed, the
+ entity-tag associated with it becomes invalid. A publication for an
+ invalid entity-tag will naturally fail, and the EPA needs to start
+ anew and resend its event state without referencing a previous
+ entity-tag.
+
+4. Constructing PUBLISH Requests
+
+ PUBLISH requests create, modify, and remove event state associated
+ with an address-of-record. A suitably authorized third party may
+ also perform publication on behalf of a particular address-of-record.
+
+ Except as noted, the construction of the PUBLISH request and the
+ behavior of clients sending a PUBLISH request are identical to the
+ general UAC behavior described in Section 8.1 and Section 17.1 of RFC
+ 3261 [4].
+
+ If necessary, clients may probe for the support of PUBLISH using the
+ OPTIONS request defined in SIP [4]. The presence of "PUBLISH" in the
+ "Allow" header field in a response to an OPTIONS request indicates
+ support for the PUBLISH method. In addition, the "Allow-Events"
+ header field indicates the supported event packages.
+
+ Note that it is possible for the OPTIONS request to fork, and
+ consequently return a response from a User Agent other than the
+ ESC. In that case, support for the PUBLISH method may not be
+ appropriately represented for that particular Request-URI.
+
+ A PUBLISH request does not establish a dialog. A UAC MAY include a
+ Route header field in a PUBLISH request based on a pre-existing route
+ set as described in Section 8.1 of RFC 3261 [4]. The Record-Route
+ header field has no meaning in PUBLISH requests or responses, and
+ MUST be ignored if present. In particular, the UAC MUST NOT create a
+ new route set based on the presence or absence of a Record-Route
+ header field in any response to a PUBLISH request.
+
+ The PUBLISH request MAY contain a Contact header field, but including
+ one in a PUBLISH request has no meaning in the event publication
+ context and will be ignored by the ESC. An EPA MAY send a PUBLISH
+
+
+
+Niemi Standards Track [Page 5]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ request within an existing dialog. In that case, the request is
+ received in the context of any media session or sessions associated
+ with that dialog.
+
+ Note that while sending a PUBLISH request within an existing
+ dialog is not prohibited, it will typically not result in the
+ expected behavior. Unless the other end of the dialog is also an
+ ESC, it will probably reject the request.
+
+ EPAs MUST NOT send a new PUBLISH request (not a re-transmission) for
+ the same Request-URI, until they have received a final response from
+ the ESC for the previous one or the previous PUBLISH request has
+ timed out.
+
+4.1. Identification of Published Event State
+
+ Identification of published event state is provided by three pieces
+ of information: Request-URI, event type, and (optionally) an entity-
+ tag.
+
+ The Request-URI of a PUBLISH request contains enough information to
+ route the request to the appropriate entity per the request routing
+ procedures outlined in RFC 3261 [4]. It also contains enough
+ information to identify the resource whose event state is to be
+ published, but not enough information to determine the type of the
+ published event state.
+
+ For determining the type of the published event state, the EPA MUST
+ include a single Event header field in PUBLISH requests. The value
+ of this header field indicates the event package for which this
+ request is publishing event state.
+
+ For each successful PUBLISH request, the ESC will generate and assign
+ an entity-tag and return it in the SIP-ETag header field of the 2xx
+ response.
+
+ When updating previously published event state, PUBLISH requests MUST
+ contain a single SIP-If-Match header field identifying the specific
+ event state that the request is refreshing, modifying or removing.
+ This header field MUST contain a single entity-tag that was returned
+ by the ESC in the SIP-ETag header field of the response to a previous
+ publication.
+
+ The PUBLISH request MAY contain a body, which contains event state
+ that the client wishes to publish. The content format and semantics
+ are dependent on the event package identified in the Event header
+ field.
+
+
+
+
+Niemi Standards Track [Page 6]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ The presence of a body and the SIP-If-Match header field determine
+ the specific operation that the request is performing, as described
+ in Table 1.
+
+ +-----------+-------+---------------+---------------+
+ | Operation | Body? | SIP-If-Match? | Expires Value |
+ +-----------+-------+---------------+---------------+
+ | Initial | yes | no | > 0 |
+ | Refresh | no | yes | > 0 |
+ | Modify | yes | yes | > 0 |
+ | Remove | no | yes | 0 |
+ +-----------+-------+---------------+---------------+
+
+ Table 1: Publication Operations
+
+ An 'Initial' publication sets the initial event state for a
+ particular EPA. There may, of course, already be event state
+ published by other EPAs (for the same address-of-record). That state
+ is unaffected by an initial publication. A 'Refresh' publication
+ refreshes the lifetime of a previous publication, whereas a 'Modify'
+ publication modifies the event state of a previous publication. A
+ 'Remove' publication requests immediate removal of event state.
+ These operations are described in more detail in the following
+ sections.
+
+4.2. Creating Initial Publication
+
+ An initial publication is a PUBLISH request created by the EPA and
+ sent to the ESC that establishes soft state for the event package
+ indicated in the Event header field of the request, and bound to the
+ address in the Request-URI of the request.
+
+ An initial PUBLISH request MUST NOT contain a SIP-If-Match header
+ field. However, if the EPA expects an appropriate, locally stored
+ entity-tag to still be valid, it SHOULD first try to modify that
+ event state as described in Section 4.4, instead of submitting an
+ initial publication.
+
+ An initial PUBLISH request MUST contain a body that contains the
+ published event state.
+
+ An initial PUBLISH request MAY contain a single Expires header field.
+ This value indicates the suggested lifetime of the event state
+ publication.
+
+
+
+
+
+
+
+Niemi Standards Track [Page 7]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ The ESC may lower the suggested lifetime of the publication, but it
+ will never extend it. If an Expires header field is not present, the
+ EPA is indicating its desire for the ESC to choose. The Expires
+ header field in a 2xx response to the initial PUBLISH indicates the
+ actual duration for which the publication will remain active. Unless
+ refreshed before this lifetime is exceeded, the publication will
+ expire.
+
+4.3. Refreshing Event State
+
+ An EPA is responsible for refreshing its previously established
+ publications before their expiration interval has elapsed. To
+ refresh a publication, the EPA MUST create a PUBLISH request that
+ includes in a SIP-If-Match header field the entity-tag of the
+ publication to be refreshed.
+
+ The SIP-If-Match header field containing an entity-tag conditions the
+ PUBLISH request to refresh a specific event state established by a
+ prior publication. If the entity-tag matches previously published
+ event state at the ESC, the refresh succeeds, and the EPA receives a
+ 2xx response.
+
+ Like the 2xx response to an initial PUBLISH request, the 2xx response
+ to a refresh PUBLISH request will contain a SIP-ETag header field
+ with an entity-tag. The EPA MUST store this entity-tag, replacing
+ any existing entity-tag for the refreshed event state. See Section
+ 8.2 for more information on the EPA handling of entity-tags.
+
+ If there is no matching event state, e.g., the event state to be
+ refreshed has already expired, the EPA receives a 412 (Conditional
+ Request Failed) response to the PUBLISH request.
+
+ A publication refresh MAY contain a single Expires header field.
+ This value indicates the suggested lifetime of the event state.
+
+ The ESC may lower the suggested lifetime of the publication refresh,
+ but it will never extend it. If an Expires header field is not
+ present, the EPA is indicating its desire for the ESC to choose. The
+ Expires header field in a 2xx response to the publication refresh
+ indicates the actual duration for which the publication will remain
+ active.
+
+ A publication refresh only extends the expiration time of already
+ existing event state. It does not affect that event state in any
+ other way. Therefore, a PUBLISH request that refreshes event state
+ MUST NOT have a body.
+
+
+
+
+
+Niemi Standards Track [Page 8]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+4.4. Modifying Event State
+
+ Modifying event state closely resembles the creation of initial event
+ state. However, instead of establishing completely new event state
+ at the ESC, already existing event state is updated with modified
+ event state. The nature of this update depends on the content of the
+ body, and the semantics associated with the format of that body.
+
+ To modify event state, the EPA MUST construct a PUBLISH request that
+ includes in a SIP-If-Match header field the entity-tag of the event
+ state publication to be modified. A PUBLISH request that modifies
+ event state MUST contain a body that includes the modified event
+ state.
+
+ The SIP-If-Match header field conditions the PUBLISH request to
+ modify a specific event state established by a prior publication, and
+ identified by the entity-tag. If the entity-tag matches previously
+ published event state at the ESC, that event state is replaced by the
+ event state carried in the PUBLISH request, and the EPA receives a
+ 2xx response.
+
+ Like the 2xx response to an initial PUBLISH request, the 2xx response
+ to a modifying PUBLISH request will contain a SIP-ETag header field
+ with an entity-tag. The EPA MUST store this entity-tag, replacing
+ any existing entity-tag for the modified event state. See Section
+ 8.2 for more information on the EPA handling of entity-tags.
+
+ If there is no matching event state at the ESC, e.g., the event state
+ to be modified has already expired, the EPA receives a 412
+ (Conditional Request Failed) response to the PUBLISH request.
+
+ A modifying PUBLISH request MAY contain a single Expires header
+ field. This value indicates the suggested lifetime of the event
+ state publication.
+
+ The ESC may lower the suggested lifetime of the publication, but it
+ will never extend it. If an Expires header field is not present, the
+ EPA is indicating its desire for the ESC to choose. The Expires
+ header field in a 2xx response to the modifying PUBLISH request
+ indicates the actual duration for which the publication will remain
+ active. Unless refreshed before this lifetime is exceeded, the
+ publication will expire.
+
+4.5. Removing Event State
+
+ Event state established by a prior publication may also be explicitly
+ removed.
+
+
+
+
+Niemi Standards Track [Page 9]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ To request the immediate removal of event state, an EPA MUST create a
+ PUBLISH request with an Expires value of "0", and set the SIP-If-
+ Match header field to contain the entity-tag of the event state
+ publication to be removed.
+
+ Note that removing event state is effectively a publication
+ refresh suggesting an infinitesimal expiration interval.
+ Consequently, the refreshed event state expires immediately after
+ being refreshed.
+
+ Similar to an event state refresh, the removal of event state only
+ affects the expiry of the event state. Therefore, a PUBLISH request
+ that removes event state MUST NOT contain a body.
+
+5. Processing PUBLISH Responses
+
+ When processing responses to PUBLISH requests, the steps in Section
+ 8.1.2 of RFC 3261 [4] apply.
+
+ If an EPA receives a 412 (Conditional Request Failed) response, it
+ MUST NOT reattempt the PUBLISH request. Instead, to publish event
+ state, the EPA SHOULD perform an initial publication, i.e., a PUBLISH
+ request without a SIP-If-Match header field, as described in Section
+ 4.2. The EPA MUST also discard the entity-tag that produced this
+ error response.
+
+ If an EPA receives a 423 (Interval Too Brief) response to a PUBLISH
+ request, it MAY retry the publication after changing the expiration
+ interval in the Expires header field to be equal to or greater than
+ the expiration interval within the Min-Expires header field of the
+ 423 (Interval Too Brief) response.
+
+6. Processing PUBLISH Requests
+
+ The Event State Compositor (ESC) is a User Agent Server (UAS) that
+ processes and responds to PUBLISH requests, and maintains a list of
+ publications for a given address-of-record. The ESC has to know
+ (e.g., through configuration) the set of addresses for which it
+ maintains event state.
+
+ The ESC MUST ignore the Record-Route header field if it is included
+ in a PUBLISH request. The ESC MUST NOT include a Record-Route header
+ field in any response to a PUBLISH request. The ESC MUST ignore the
+ Contact header field if one is present in a PUBLISH request.
+
+
+
+
+
+
+
+Niemi Standards Track [Page 10]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ PUBLISH requests with the same Request-URI MUST be processed in the
+ order that they are received. PUBLISH requests MUST also be
+ processed atomically, meaning that a particular PUBLISH request is
+ either processed completely or not at all.
+
+ When receiving a PUBLISH request, the ESC follows the steps defining
+ general UAS behavior in Section 8.2 of RFC 3261 [4]. In addition,
+ for PUBLISH specific behavior the ESC follows these steps:
+
+ 1. The ESC inspects the Request-URI to determine whether this request
+ is targeted to a resource for which the ESC is responsible for
+ maintaining event state. If not, the ESC MUST return a 404 (Not
+ Found) response and skip the remaining steps.
+
+ It may also be that the Request-URI points to a domain that the
+ ESC is not responsible for. In that case, the UAS receiving the
+ request can assume the role of a proxy server and forward the
+ request to a more appropriate target.
+
+ 2. The ESC examines the Event header field of the PUBLISH request.
+ If the Event header field is missing or contains an event package
+ which the ESC does not support, the ESC MUST respond to the
+ PUBLISH request with a 489 (Bad Event) response, and skip the
+ remaining steps.
+
+ 3. The ESC examines the SIP-If-Match header field of the PUBLISH
+ request for the presence of a request precondition.
+
+ * If the request does not contain a SIP-If-Match header field,
+ the ESC MUST generate and store a locally unique entity-tag for
+ identifying the publication. This entity-tag is associated
+ with the event-state carried in the body of the PUBLISH
+ request.
+
+ * Else, if the request has a SIP-If-Match header field, the ESC
+ checks whether the header field contains a single entity-tag.
+ If not, the request is invalid, and the ESC MUST return with a
+ 400 (Invalid Request) response and skip the remaining steps.
+
+ * Else, the ESC extracts the entity-tag contained in the SIP-If-
+ Match header field and matches that entity-tag against all
+ locally stored entity-tags for this resource and event package.
+ If no match is found, the ESC MUST reject the publication with
+ a response of 412 (Conditional Request Failed), and skip the
+ remaining steps.
+
+
+
+
+
+
+Niemi Standards Track [Page 11]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ 4. The ESC processes the Expires header field value from the PUBLISH
+ request.
+
+ * If the request has an Expires header field, that value MUST be
+ taken as the requested expiration.
+
+ * Else, a locally-configured default value MUST be taken as the
+ requested expiration.
+
+ * The ESC MAY choose an expiration less than the requested
+ expiration interval. Only if the requested expiration interval
+ is greater than zero and less than a locally-configured
+ minimum, the ESC MAY reject the publication with a response of
+ 423 (Interval Too Brief), and skip the remaining steps. This
+ response MUST contain a Min-Expires header field that states
+ the minimum expiration interval the ESC is willing to honor.
+
+ 5. The ESC processes the published event state contained in the body
+ of the PUBLISH request. If the content type of the request does
+ not match the event package, or is not understood by the ESC, the
+ ESC MUST reject the request with an appropriate response, such as
+ 415 (Unsupported Media Type), and skip the remainder of the steps.
+
+ * The ESC stores the event state delivered in the body of the
+ PUBLISH request and identified by the associated entity-tag,
+ updating any existing event state for that entity-tag. The
+ expiration value is set to the chosen expiration interval.
+
+ * If the request has no message body and contained no entity-tag,
+ the ESC SHOULD reject the request with an appropriate response,
+ such as 400 (Invalid Request), and skip the remainder of the
+ steps. Alternatively, in case either ESC local policy or the
+ event package has defined semantics for an initial publication
+ containing no message body, the ESC MAY accept it.
+
+ * Else, the event state identified by the entity-tag is
+ refreshed, setting the expiration value to the chosen
+ expiration interval.
+
+ * If the chosen expiration interval has a special value of "0",
+ the event state identified by the entity-tag MUST be
+ immediately removed. The ESC MUST NOT store any event state as
+ a result of such a request.
+
+
+
+
+
+
+
+
+Niemi Standards Track [Page 12]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ The processing of the PUBLISH request MUST be atomic. If internal
+ errors (such as the inability to access a back-end database) occur
+ before processing is complete, the publication MUST NOT succeed,
+ and the ESC MUST fail with an appropriate error response, such as
+ 504 (Server Time-out), and skip the last step.
+
+ 6. The ESC returns a 200 (OK) response. The response MUST contain an
+ Expires header field indicating the expiration interval chosen by
+ the ESC. The response MUST also contain a SIP-ETag header field
+ that contains a single entity-tag identifying the publication.
+ The ESC MUST generate a new entity-tag for each successful
+ publication, replacing any previous entity-tag associated with
+ that event state. The generated entity-tag MUST be unique from any
+ other entity-tags currently assigned to event state associated
+ with that Request-URI, and MUST be different from any entity-tag
+ assigned previously to event state for that Request-URI. See
+ Section 8.3 for more information on the ESC handling of entity-
+ tags.
+
+7. Processing OPTIONS Requests
+
+ A client may probe the ESC for the support of PUBLISH using the
+ OPTIONS request defined in SIP [4]. The ESC processes OPTIONS
+ requests as defined in Section 11.2 of RFC 3261 [4]. In the response
+ to an OPTIONS request, the ESC SHOULD include "PUBLISH" to the list
+ of allowed methods in the Allow header field. Also, it SHOULD list
+ the supported event packages in an Allow-Events header field.
+
+ The Allow header field may also be used to specifically announce
+ support for PUBLISH messages when registering. (See SIP Capabilities
+ [12] for details).
+
+8. Use of Entity-tags in PUBLISH
+
+ This section makes a general overview of the entity-tags usage in
+ PUBLISH. It is informative in nature and thus contains no normative
+ protocol description.
+
+8.1. General Notes
+
+ The PUBLISH mechanism makes use of entity-tags, as defined in HTTP/
+ 1.1 [13]. While the main functionality is preserved, the syntax and
+ semantics for entity-tags and the corresponding header fields is
+ adapted specifically for use with the PUBLISH method. The main
+ differences are:
+
+ o The syntax for entity-tags is a token instead of quoted-string.
+ There is also no prefix defined for indicating a weak entity-tag.
+
+
+
+Niemi Standards Track [Page 13]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ o A PUBLISH precondition can only apply to a single entity-tag, so
+ request preconditions with multiple entity-tags are not allowed.
+
+ o A request precondition can't apply to "any" entity, namely there
+ is no special "*" entity-tag value defined for PUBLISH.
+
+ o Whereas in HTTP/1.1 returning an entity-tag is optional for origin
+ servers, in PUBLISH ESCs are required to always return an entity-
+ tag for a successful publication.
+
+ The main motivation for the above adaptation is that PUBLISH is
+ conceptually an HTTP PUT, for which only a subset of the features in
+ cache validation using entity-tags is allowed in HTTP/1.1. It makes
+ little sense to enable features other than this subset for event
+ state publication.
+
+ To make it apparent that the entity-tags usage in PUBLISH is similar
+ but not identical to HTTP/1.1, we have not adopted the header field
+ names directly from HTTP/1.1, but rather have created similar but
+ distinct names, as can be seen in Section 11.
+
+8.2. Client Usage
+
+ Each successful publication will get assigned an entity-tag which is
+ then delivered to the EPA in the response to the PUBLISH request.
+ The EPA needs to store that entity-tag, replacing any previous
+ entity-tag for that event state. If a request fails with a 412
+ (Conditional Request Failed) response, the EPA discards the entity-
+ tag that caused the failure.
+
+ Entity-tags are opaque tokens to the EPA. The EPA cannot infer any
+ further semantics from an entity-tag beyond a simple identifier, or
+ assume a specific formatting. An entity-tag may be a monotonically
+ increasing counter, but it may also be a totally random token. It is
+ up to the ESC implementation as to what the formatting of an entity-
+ tag is.
+
+8.3. Server Usage
+
+ Entity-tags are generated and maintained by the ESC. They are part
+ of the state maintained by the ESC that also includes the actual
+ event state and its remaining expiration interval. An entity-tag is
+ generated and stored for each successful event state publication, and
+ returned to the EPA in a 200 (OK) response. Each event state
+ publication from the EPA that updates a previous publication will
+ include an entity-tag that the ESC can use as a search key in the set
+ of active publications.
+
+
+
+
+Niemi Standards Track [Page 14]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ The way in which an entity-tag is generated is an implementation
+ decision. One possible way to generate an entity-tag is to implement
+ it as an integer counter that is incremented by one for each
+ successfully processed publication. Other, equally valid ways for
+ generating entity-tags exist, and this document makes no
+ recommendations or preference for a single way.
+
+9. Controlling the Rate of Publication
+
+ As an entity responsible for aggregating state information from
+ potentially many sources, the ESC can be subject to considerable
+ amounts of publication traffic. There are ways to reduce the amount
+ of PUBLISH requests that the ESC receives:
+
+ o Choice of the expiration interval for a publication can be
+ affected by the ESC. It can insist that an EPA chooses a longer
+ expiration value to what it suggests, in case the ESC's local
+ default minimum expiration value is not reached. Maintaining a
+ longer default minimum expiration value at the ESC reduces the
+ rate at which publications are refreshed.
+
+ o Another way of reducing publication traffic is to use a SIP-level
+ push-back to quench a specific source of publication traffic. To
+ push back on publications from a particular source, the ESC MAY
+ respond to a PUBLISH request with a 503 (Service Unavailable), as
+ defined in RFC 3261 [4]. This response SHOULD contain a Retry-
+ After header field indicating the time interval that the
+ publication source is required to wait until sending another
+ PUBLISH request.
+
+ At the time of writing this specification, work on managing load in
+ SIP is starting, which may be able to provide further tools for
+ managing load in event state publication systems.
+
+10. Considerations for Event Packages using PUBLISH
+
+ This section discusses several issues which should be taken into
+ consideration when applying the PUBLISH mechanism to event packages.
+ It also demonstrates how these issues are handled when using PUBLISH
+ for presence publication.
+
+ Any future event package specification SHOULD include a discussion of
+ its considerations for using PUBLISH. At a minimum those
+ considerations SHOULD address the issues presented in this chapter,
+ and MAY include additional considerations.
+
+
+
+
+
+
+Niemi Standards Track [Page 15]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+10.1. PUBLISH Bodies
+
+ The body of the PUBLISH request typically carries the published event
+ state. Any application of the PUBLISH mechanism for a given event
+ package MUST define what content type or types are expected in
+ PUBLISH requests. Each event package MUST also describe the
+ semantics associated with that content type, and MUST prescribe a
+ default, mandatory to implement MIME type.
+
+ This document defines the semantics of the presence publication
+ requests (event package "presence") when the Common Profile for
+ Presence (CPP) Presence Information Data Format (PIDF) [6] is used.
+ A PUA that uses PUBLISH to publish presence state to the PA MUST
+ support the PIDF presence format. It MAY support other formats.
+
+10.2. PUBLISH Response Bodies
+
+ The response to a PUBLISH request indicates whether the request was
+ successful or not. In general, the body of such a response will be
+ empty unless the event package defines explicit meaning for such a
+ body.
+
+ There is no such meaning for the body of a response to a presence
+ publication.
+
+10.3. Multiple Sources for Event State
+
+ For some event packages, the underlying model is that of a single
+ entity responsible for aggregating event state (ESC), and multiple
+ sources, out of which only some may be using the PUBLISH mechanism.
+
+ Note that sources for event state other than those using the
+ PUBLISH mechanism are explicitly allowed. However, it is beyond
+ the scope of this document to define such interfaces.
+
+ Event packages that make use of the PUBLISH mechanism SHOULD describe
+ whether this model for event state publication is applicable, and MAY
+ describe specific mechanisms used for aggregating publications from
+ multiple sources.
+
+ For presence, a PUA can publish presence state for just a subset of
+ the tuples that may be composited into the presence document that
+ watchers receive in a NOTIFY. The mechanism by which the ESC
+ aggregates this information is a matter of local policy and out of
+ the scope of this specification.
+
+
+
+
+
+
+Niemi Standards Track [Page 16]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+10.4. Event State Segmentation
+
+ For some event packages, there exists a natural decomposition of
+ event state into segments. Each segment is defined as one of
+ potentially many identifiable sections in the published event state.
+ Any event package whose content type supports such segmentation of
+ event state, SHOULD describe the way in which these event state
+ segments are identified by the ESC.
+
+ In presence publication, the EPA MUST keep the "id" attributes of
+ tuples consistent in the context of an entity-tag. If a publication
+ modifies the contents of a tuple, that tuple MUST maintain its
+ original "id". The ESC will interpret each tuple in the context of
+ the entity-tag with which the request arrived. A tuple whose "id" is
+ missing compared to the original publication will be considered as
+ being removed. Similarly, a tuple is interpreted as being added if
+ its "id" attribute is one that the original publication did not
+ contain.
+
+10.5. Rate of Publication
+
+ Controlling the rate of publication is discussed in Section 9.
+ Individual event packages MAY in turn define recommendations (SHOULD
+ or MUST strength) on absolute maximum rates at which publications are
+ allowed to be generated by a single EPA.
+
+ There are no rate limiting recommendations for presence publication.
+
+11. Protocol Element Definitions
+
+ This section describes the extensions required for event publication
+ in SIP.
+
+11.1. New Methods
+
+11.1.1. PUBLISH Method
+
+ "PUBLISH" is added to the definition of the element "Method" in the
+ SIP message grammar. As with all other SIP methods, the method name
+ is case sensitive. PUBLISH is used to publish event state to an
+ entity responsible for compositing this event state.
+
+ Table 2 and Table 3 extend Tables 2 and 3 of RFC 3261 [4] by adding
+ an additional column, defining the header fields that can be used in
+ PUBLISH requests and responses. The keys in these tables are
+ specified in Section 20 of RFC 3261 [4].
+
+
+
+
+
+Niemi Standards Track [Page 17]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ +---------------------+---------+---------+
+ | Header Field | where | PUBLISH |
+ +---------------------+---------+---------+
+ | Accept | R | o |
+ | Accept | 2xx | - |
+ | Accept | 415 | m* |
+ | Accept-Encoding | R | o |
+ | Accept-Encoding | 2xx | - |
+ | Accept-Encoding | 415 | m* |
+ | Accept-Language | R | o |
+ | Accept-Language | 2xx | - |
+ | Accept-Language | 415 | m* |
+ | Alert-Info | | - |
+ | Allow | R | o |
+ | Allow | r | o |
+ | Allow | 405 | m |
+ | Allow-Events | R | o |
+ | Allow-Events | 489 | m |
+ | Authentication-Info | 2xx | o |
+ | Authorization | R | o |
+ | Call-ID | c | m |
+ | Call-Info | | o |
+ | Contact | R | - |
+ | Contact | 1xx | - |
+ | Contact | 2xx | - |
+ | Contact | 3xx | o |
+ | Contact | 485 | o |
+ | Content-Disposition | | o |
+ | Content-Encoding | | o |
+ | Content-Language | | o |
+ | Content-Length | | t |
+ | Content-Type | | * |
+ | CSeq | c | m |
+ | Date | | o |
+ | Event | R | m |
+ | Error-Info | 300-699 | o |
+ | Expires | | o |
+ | Expires | 2xx | m |
+ | From | c | m |
+ | In-Reply-To | R | - |
+ | Max-Forwards | R | m |
+ | Min-Expires | 423 | m |
+ | MIME-Version | | o |
+ | Organization | | o |
+ +---------------------+---------+---------+
+
+ Table 2: Summary of header fields, A--O
+
+
+
+
+Niemi Standards Track [Page 18]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ +---------------------+-----------------+---------+
+ | Header Field | where | PUBLISH |
+ +---------------------+-----------------+---------+
+ | Priority | R | o |
+ | Proxy-Authenticate | 407 | m |
+ | Proxy-Authenticate | 401 | o |
+ | Proxy-Authorization | R | o |
+ | Proxy-Require | R | o |
+ | Record-Route | | - |
+ | Reply-To | | - |
+ | Require | | o |
+ | Retry-After | 404,413,480,486 | o |
+ | Retry-After | 500,503 | o |
+ | Retry-After | 600,603 | o |
+ | Route | R | c |
+ | Server | r | o |
+ | Subject | R | o |
+ | Supported | R | o |
+ | Supported | 2xx | o |
+ | Timestamp | | o |
+ | To | c(1) | m |
+ | Unsupported | 420 | o |
+ | User-Agent | | o |
+ | Via | R | m |
+ | Via | rc | m |
+ | Warning | r | o |
+ | WWW-Authenticate | 401 | m |
+ | WWW-Authenticate | 407 | o |
+ +---------------------+-----------------+---------+
+
+ Table 3: Summary of header fields, P--Z
+
+11.2. New Response Codes
+
+11.2.1. "412 Conditional Request Failed" Response Code
+
+ The 412 (Conditional Request Failed) response is added to the
+ "Client-Error" header field definition. 412 (Conditional Request
+ Failed) is used to indicate that the precondition given for the
+ request has failed.
+
+
+
+
+
+
+
+
+
+
+
+Niemi Standards Track [Page 19]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+11.3. New Header Fields
+
+ Table 4, Table 5, and Table 6 expand on Table 3 in SIP [4], as
+ amended by the changes in Section 11.1.
+
+ +--------------+-------+-------+-----+-----+-----+-----+-----+
+ | Header Field | where | proxy | ACK | BYE | CAN | INF | INV |
+ +--------------+-------+-------+-----+-----+-----+-----+-----+
+ | SIP-ETag | 2xx | | - | - | - | - | - |
+ | SIP-If-Match | R | | - | - | - | - | - |
+ +--------------+-------+-------+-----+-----+-----+-----+-----+
+
+ Table 4: Summary of header fields, P--Z
+
+ +--------------+-------+-------+-----+-----+-----+-----+-----+
+ | Header Field | where | proxy | NOT | OPT | PRA | REG | SUB |
+ +--------------+-------+-------+-----+-----+-----+-----+-----+
+ | SIP-ETag | 2xx | | - | - | - | - | - |
+ | SIP-If-Match | R | | - | - | - | - | - |
+ +--------------+-------+-------+-----+-----+-----+-----+-----+
+
+ Table 5: Summary of header fields, P--Z
+
+ +--------------+-------+-------+-----+-----+-----+---------+
+ | Header Field | where | proxy | UPD | MSG | REF | PUBLISH |
+ +--------------+-------+-------+-----+-----+-----+---------+
+ | SIP-ETag | 2xx | | - | - | - | m |
+ | SIP-If-Match | R | | - | - | - | o |
+ +--------------+-------+-------+-----+-----+-----+---------+
+
+ Table 6: Summary of header fields, P--Z
+
+11.3.1. "SIP-ETag" Header Field
+
+ SIP-ETag is added to the definition of the element "general-header"
+ in the SIP message grammar. Usage of this header is described in
+ Section 4 and Section 6.
+
+11.3.2. "SIP-If-Match" Header Field
+
+ SIP-If-Match is added to the definition of the element "general-
+ header" in the SIP message grammar. Usage of this header is
+ described in Section 4 and Section 6.
+
+
+
+
+
+
+
+
+Niemi Standards Track [Page 20]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+12. Augmented BNF Definitions
+
+ This section describes the syntax extensions required for event
+ publication in SIP. The formal syntax definitions described in this
+ section are expressed in the Augmented BNF [7] format used in SIP
+ [4], and contain references to elements defined therein.
+
+ PUBLISHm = %x50.55.42.4C.49.53.48 ; PUBLISH in caps.
+ extension-method = PUBLISHm / token
+ SIP-ETag = "SIP-ETag" HCOLON entity-tag
+ SIP-If-Match = "SIP-If-Match" HCOLON entity-tag
+ entity-tag = token
+
+13. IANA Considerations
+
+ This document registers a new method name, a new response code and
+ two new header field names.
+
+13.1. Methods
+
+ This document registers a new SIP method, defined by the following
+ information, which has been added to the method and response-code
+ sub-registry under http://www.iana.org/assignments/sip-parameters.
+
+ Method Name: PUBLISH
+ Reference: [RFC3903]
+
+13.2. Response Codes
+
+ This document registers a new response code. This response code is
+ defined by the following information, which has been added to the
+ method and response-code sub-registry under
+ http://www.iana.org/assignments/sip-parameters.
+
+ Response Code Number: 412
+ Default Reason Phrase: Conditional Request Failed
+
+13.3. Header Field Names
+
+ This document registers two new SIP header field names. These
+ headers are defined by the following information, which has been
+ added to the header sub-registry under
+ http://www.iana.org/assignments/sip-parameters.
+
+ Header Name: SIP-ETag
+ Compact Form: (none)
+
+
+
+
+
+Niemi Standards Track [Page 21]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ Header Name: SIP-If-Match
+ Compact Form: (none)
+
+14. Security Considerations
+
+14.1. Access Control
+
+ Since event state may be considered sensitive information, the ESC
+ should have the ability to selectively accept publications from
+ authorized sources only, based on the identity of the EPA.
+
+ The state agent SHOULD authenticate the EPA, and SHOULD apply its
+ authorization policies (e.g., based on access control lists) to all
+ requests. The composition model makes no assumptions that all input
+ sources for an ESC are on the same network, or in the same
+ administrative domain.
+
+ ESCs and EPAs MUST implement Digest for authenticating PUBLISH
+ requests, as defined in RFC 3261 [4]. The exact methods for creating
+ and manipulating access control policies in the ESC are outside the
+ scope of this document.
+
+14.2. Denial of Service Attacks
+
+ The creation of state at the ESC upon receipt of a PUBLISH request
+ can be used by attackers to consume resources on a victim's machine,
+ possibly rendering it unusable.
+
+ To reduce the chances of such an attack, implementations of ESCs
+ SHOULD require authentication of PUBLISH requests. Implementations
+ MUST support Digest authentication, as defined in RFC 3261 [4].
+
+ Also, the ESC SHOULD throttle incoming publications and the
+ corresponding notifications resulting from the changes in event
+ state. As a first step, careful selection of default minimum Expires
+ header field values for the supported event packages at an ESC can
+ help limit refreshes of event state.
+
+ Additional throttling and debounce logic at the ESC is advisable to
+ further reduce the notification traffic produced as a result of a
+ PUBLISH request.
+
+14.3. Replay Attacks
+
+ Replaying a PUBLISH request can have detrimental effects. An
+ attacker may be able to perform any event state publication it
+ witnessed being performed at some point in the past, by replaying
+ that PUBLISH request. Among other things, such a replay message may
+
+
+
+Niemi Standards Track [Page 22]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ be used to spoof old event state information, although a versioning
+ mechanism, e.g., a timestamp, in the state information may help
+ mitigate such an attack.
+
+ To prevent replay attacks, implementations MUST support Digest
+ authentication with replay protection, as defined in RFC 3261 [4].
+ Further mechanisms for countering replay attacks are discussed in SIP
+ [4].
+
+14.4. Man in the Middle Attacks
+
+ Even with authentication, man-in-the-middle attacks using PUBLISH may
+ be used to install arbitrary event state information, modify or
+ remove existing event state information in publications, or even
+ remove event state altogether at an ESC.
+
+ To prevent such attacks, implementations SHOULD, at a minimum,
+ provide integrity protection across the To, From, Event, SIP-If-
+ Match, Route, and Expires header fields and the bodies of PUBLISH
+ requests.
+
+ If the ESC receives event state in a PUBLISH request which is
+ integrity protected using a security association that is not with the
+ ESC (e.g., integrity protection is applied end-to-end, from publisher
+ to subscriber), the state agent coupled with the ESC MUST NOT modify
+ the event state before exposing it to the subscribers of this event
+ state in NOTIFY requests. This is to preserve the end-to-end
+ integrity of the event state.
+
+ For integrity protection, ESCs MUST implement TLS [8], and MUST
+ support both mutual and one-way authentication, and MUST also support
+ the SIPS URI scheme defined in SIP [4]. EPAs SHOULD be capable of
+ initiating TLS and SHOULD support the SIPS URI scheme. ESCs and EPAs
+ MAY support S/MIME [9] for integrity protection, as defined in SIP
+ [4].
+
+14.5. Confidentiality
+
+ The state information contained in a PUBLISH message may potentially
+ contain sensitive information. Implementations MAY encrypt such
+ information to ensure confidentiality.
+
+ For providing confidentiality, ESCs MUST implement TLS [8], MUST
+ support both mutual and one-way authentication, and MUST also support
+ the SIPS URI scheme defined in SIP [4]. EPAs SHOULD be capable of
+ initiating TLS and SHOULD support the SIPS URI scheme. ESCs and EPAs
+ MAY support S/MIME [9] for encryption of event state information, as
+ defined in SIP [4].
+
+
+
+Niemi Standards Track [Page 23]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+15. Examples
+
+ This section shows an example of using the PUBLISH method for
+ publishing a presence document from a presence user agent to a
+ presence agent. The watcher in this example is subscribing to the
+ presentity's presence information from the PA. The PUA may also
+ SUBSCRIBE to its own presence to see the composite presence state
+ exposed by the PA. This is an optional but likely step for the PUA,
+ and is not shown in this example.
+
+ When the value of the Content-Length header field is "..." this means
+ that the value should be whatever the computed length of the body is.
+
+ PUA PA WATCHER
+ (EPA) (ESC)
+ | | |
+ | | <---- M1: SUBSCRIBE --- |
+ | | |
+ | | ----- M2: 200 OK -----> |
+ | | |
+ | | ----- M3: NOTIFY -----> |
+ | | |
+ | | <---- M4: 200 OK ------ |
+ | | |
+ | | |
+ | ---- M5: PUBLISH ---> | |
+ | | |
+ | <--- M6: 200 OK ---- | |
+ | | |
+ | | ----- M7: NOTIFY -----> |
+ | | |
+ | | <---- M8: 200 OK ------ |
+ | | |
+ | ---- M9: PUBLISH ---> | |
+ | | |
+ | <--- M10: 200 OK --- | |
+ | | |
+ | | |
+ | --- M11: PUBLISH ---> | |
+ | | |
+ | <-- M12: 200 OK ---- | |
+ | | |
+ | | ----- M13: NOTIFY ----> |
+ | | |
+ | | <---- M14: 200 OK ----- |
+ | | |
+
+
+
+
+
+Niemi Standards Track [Page 24]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ Message flow:
+
+ M1: The watcher initiates a new subscription to the
+ presentity@example.com's presence agent.
+
+ SUBSCRIBE sip:presentity@example.com SIP/2.0
+ Via: SIP/2.0/UDP host.example.com;branch=z9hG4bKnashds7
+ To: <sip:presentity@example.com>
+ From: <sip:watcher@example.com>;tag=12341234
+ Call-ID: 12345678@host.example.com
+ CSeq: 1 SUBSCRIBE
+ Max-Forwards: 70
+ Expires: 3600
+ Event: presence
+ Contact: sip:user@host.example.com
+ Content-Length: 0
+
+ M2: The presence agent for presentity@example.com processes the
+ subscription request and creates a new subscription. A 200 (OK)
+ response is sent to confirm the subscription.
+
+ SIP/2.0 200 OK
+ Via: SIP/2.0/UDP host.example.com;branch=z9hG4bKnashds7
+ ;received=192.0.2.1
+ To: <sip:presentity@example.com>;tag=abcd1234
+ From: <sip:watcher@example.com>;tag=12341234
+ Call-ID: 12345678@host.example.com
+ CSeq: 1 SUBSCRIBE
+ Contact: sip:pa.example.com
+ Expires: 3600
+ Content-Length: 0
+
+ M3: In order to complete the process, the presence agent sends the
+ watcher a NOTIFY with the current presence state of the
+ presentity.
+
+ NOTIFY sip:user@host.example.com SIP/2.0
+ Via: SIP/2.0/UDP pa.example.com;branch=z9hG4bK8sdf2
+ To: <sip:watcher@example.com>;tag=12341234
+ From: <sip:presentity@example.com>;tag=abcd1234
+ Call-ID: 12345678@host.example.com
+ CSeq: 1 NOTIFY
+ Max-Forwards: 70
+ Event: presence
+ Subscription-State: active; expires=3599
+ Contact: sip:pa.example.com
+ Content-Type: application/pidf+xml
+ Content-Length: ...
+
+
+
+Niemi Standards Track [Page 25]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ [PIDF document]
+
+ M4: The watcher confirms receipt of the NOTIFY request.
+
+ SIP/2.0 200 OK
+ Via: SIP/2.0/UDP pa.example.com;branch=z9hG4bK8sdf2
+ ;received=192.0.2.2
+ To: <sip:watcher@example.com>;tag=12341234
+ From: <sip:presentity@example.com>;tag=abcd1234
+ Call-ID: 12345678@host.example.com
+ CSeq: 1 NOTIFY
+
+ M5: A presence user agent (acting for the presentity) initiates a
+ PUBLISH request to the presence agent in order to update it with
+ new presence information. The Expires header field indicates the
+ suggested duration for this event soft state.
+
+ PUBLISH sip:presentity@example.com SIP/2.0
+ Via: SIP/2.0/UDP pua.example.com;branch=z9hG4bK652hsge
+ To: <sip:presentity@example.com>
+ From: <sip:presentity@example.com>;tag=1234wxyz
+ Call-ID: 81818181@pua.example.com
+ CSeq: 1 PUBLISH
+ Max-Forwards: 70
+ Expires: 3600
+ Event: presence
+ Content-Type: application/pidf+xml
+ Content-Length: ...
+
+ [Published PIDF document]
+
+ M6: The presence agent receives, and accepts the presence
+ publication. The published data is incorporated into the
+ presentity's presence information.
+
+ SIP/2.0 200 OK
+ Via: SIP/2.0/UDP pua.example.com;branch=z9hG4bK652hsge
+ ;received=192.0.2.3
+ To: <sip:presentity@example.com>;tag=1a2b3c4d
+ From: <sip:presentity@example.com>;tag=1234wxyz
+ Call-ID: 81818181@pua.example.com
+ CSeq: 1 PUBLISH
+ SIP-ETag: dx200xyz
+ Expires: 1800
+
+ M7: The presence agent determines that a reportable change has been
+ made to the presentity's presence information, and sends a
+ new presence notification to the watcher.
+
+
+
+Niemi Standards Track [Page 26]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ NOTIFY sip:user@host.example.com SIP/2.0
+ Via: SIP/2.0/UDP pa.example.com;branch=z9hG4bK4cd42a
+ To: <sip:watcher@example.com>;tag=12341234
+ From: <sip:presentity@example.com>;tag=abcd1234
+ Call-ID: 12345678@host.example.com
+ CSeq: 2 NOTIFY
+ Max-Forwards: 70
+ Event: presence
+ Subscription-State: active; expires=3400
+ Contact: sip:pa.example.com
+ Content-Type: application/pidf+xml
+ Content-Length: ...
+
+ [New PIDF document]
+
+ M8: The watcher confirms receipt of the NOTIFY request.
+
+ SIP/2.0 200 OK
+ Via: SIP/2.0/UDP pa.example.com;branch=z9hG4bK4cd42a
+ ;received=192.0.2.2
+ To: <sip:watcher@example.com>;tag=12341234
+ From: <sip:presentity@example.com>;tag=abcd1234
+ Call-ID: 12345678@host.example.com
+ CSeq: 2 NOTIFY
+ Content-Length: 0
+
+ M9: The PUA determines that the event state it previously published
+ is about to expire, and refreshes that event state.
+
+ PUBLISH sip:presentity@example.com SIP/2.0
+ Via: SIP/2.0/UDP pua.example.com;branch=z9hG4bK771ash02
+ To: <sip:presentity@example.com>
+ From: <sip:presentity@example.com>;tag=1234kljk
+ Call-ID: 98798798@pua.example.com
+ CSeq: 1 PUBLISH
+ Max-Forwards: 70
+ SIP-If-Match: dx200xyz
+ Expires: 3600
+ Event: presence
+ Content-Length: 0
+
+ M10: The presence agent receives, and accepts the publication
+ refresh. The timers regarding the expiration of the specific
+ event state identified by the entity-tag are updated. As always,
+ the ESC returns an entity-tag in the response to a successful
+ PUBLISH. Note that no actual state change has occurred, so the
+ watchers will receive no NOTIFYs.
+
+
+
+
+Niemi Standards Track [Page 27]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ SIP/2.0 200 OK
+ Via: SIP/2.0/UDP pua.example.com;branch=z9hG4bK771ash02
+ ;received=192.0.2.3
+ To: <sip:presentity@example.com>;tag=2affde434
+ From: <sip:presentity@example.com>;tag=1234kljk
+ Call-ID: 98798798@pua.example.com
+ CSeq: 1 PUBLISH
+ SIP-ETag: kwj449x
+ Expires: 1800
+
+ M11: The PUA of the presentity detects a change in the user's
+ presence state. It initiates a PUBLISH request to the presence
+ agent to modify the published presence information with the recent
+ change.
+
+ PUBLISH sip:presentity@example.com SIP/2.0
+ Via: SIP/2.0/UDP pua.example.com;branch=z9hG4bKcdad2
+ To: <sip:presentity@example.com>
+ From: <sip:presentity@example.com>;tag=54321mm
+ Call-ID: 5566778@pua.example.com
+ CSeq: 1 PUBLISH
+ Max-Forwards: 70
+ SIP-If-Match: kwj449x
+ Expires: 3600
+ Event: presence
+ Content-Type: application/pidf+xml
+ Content-Length: ...
+
+ [Published PIDF Document]
+
+ M12: The presence agent receives, and accepts the modifying
+ publication. The published data is incorporated into the
+ presentity's presence information, updating the previous
+ publication from the same PUA.
+
+ SIP/2.0 200 OK
+ Via: SIP/2.0/UDP pua.example.com;branch=z9hG4bKcdad2
+ ;received=192.0.2.3
+ To: <sip:presentity@example.com>;tag=effe22aa
+ From: <sip:presentity@example.com>;tag=54321mm
+ Call-ID: 5566778@pua.example.com
+ CSeq: 1 PUBLISH
+ SIP-ETag: qwi982ks
+ Expires: 3600
+
+ M13: The presence agent determines that a reportable change has been
+ made to the presentity's presence document, and sends a
+ new presence notification to all active subscriptions.
+
+
+
+Niemi Standards Track [Page 28]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+ NOTIFY sip:user@host.example.com SIP/2.0
+ Via: SIP/2.0/UDP pa.example.com;branch=z9hG4bK32defd3
+ To: <sip:watcher@example.com>;tag=12341234
+ From: <sip:presentity@example.com>;tag=abcd1234
+ Call-ID: 12345678@host.example.com
+ CSeq: 2 NOTIFY
+ Max-Forwards: 70
+ Event: presence
+ Subscription-State: active; expires=3400
+ Contact: sip:pa.example.com
+ Content-Type: application/pidf+xml
+ Content-Length: ...
+
+ [New PIDF document]
+
+ M14: The watcher confirms receipt of the NOTIFY request.
+
+ SIP/2.0 200 OK
+ Via: SIP/2.0/UDP pa.example.com;branch=z9hG4bK32defd3
+ ;received=192.0.2.3
+ To: <sip:watcher@example.com>;tag=12341234
+ From: <sip:presentity@example.com>;tag=abcd1234
+ Call-ID: 12345678@host.example.com
+ CSeq: 2 NOTIFY
+ Content-Length: 0
+
+16. Contributors
+
+ The original contributors to this specification are:
+
+ Ben Campbell
+ Estacado Systems
+
+ Sean Olson
+ Microsoft
+
+ Jon Peterson
+ Neustar, Inc.
+
+ Jonathan Rosenberg
+ dynamicsoft
+
+ Brian Stucker
+ Nortel Networks, Inc.
+
+
+
+
+
+
+
+Niemi Standards Track [Page 29]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+17. Acknowledgements
+
+ The authors would like to thank the SIMPLE Working Group for their
+ collective effort, and specifically the following people for their
+ review and support of this work: Henning Schulzrinne, Paul Kyzivat,
+ Hisham Khartabil, George Foti, Keith Drage, Samir Srivastava, Arun
+ Kumar, Adam Roach, Pekka Pessi, Kai Wang, Cullen Jennings, Mikko
+ Lonnfors, Eva-Maria Leppanen, Ernst Horvath, Thanos Diacakis, Oded
+ Cnaan, Rohan Mahy, and Dean Willis.
+
+18. References
+
+18.1. Normative References
+
+ [1] Roach, A., "Session Initiation Protocol (SIP)-Specific Event
+ Notification", RFC 3265, June 2002.
+
+ [2] Rosenberg, J., "A Presence Event Package for the Session
+ Initiation Protocol (SIP)", RFC 3856, August 2004.
+
+ [3] Day, M., Rosenberg, J., and H. Sugano, "A Model for Presence and
+ Instant Messaging", RFC 2778, February 2000.
+
+ [4] 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.
+
+ [5] Bradner, S., "Key words for use in RFCs to Indicate Requirement
+ Levels", BCP 14, RFC 2119, March 1997.
+
+ [6] Sugano, H., Fujimoto, S., Klyne, G., Bateman, A., Carr, W., and
+ J. Peterson, "Presence Information Data Format (PIDF)", RFC
+ 3863, August 2004.
+
+ [7] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", RFC 2234, November 1997.
+
+ [8] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC
+ 2246, January 1999.
+
+ [9] Ramsdell, B., Ed., "Secure/Multipurpose Internet Mail Extensions
+ (S/MIME) Version 3.1 Message Specification", RFC 3851, July
+ 2004.
+
+
+
+
+
+
+
+
+Niemi Standards Track [Page 30]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+19.2. Informative References
+
+ [10] Campbell, B., "SIMPLE Presence Publication Requirements", Work
+ in Progress, February 2003.
+
+ [11] Mahy, R., "A Message Summary and Message Waiting Indication
+ Event Package for the Session Initiation Protocol (SIP)", RFC
+ 3842, August 2004.
+
+ [12] Rosenberg, J., Schulzrinne, H., and P. Kyzivat, "Indicating User
+ Agent Capabilities in the Session Initiation Protocol (SIP)",
+ RFC 3840, August 2004.
+
+ [13] 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.
+
+Author's Address
+
+ Aki Niemi (editor)
+ Nokia
+ P.O. Box 407
+ NOKIA GROUP, FIN 00045
+ Finland
+
+ Phone: +358 50 389 1644
+ EMail: aki.niemi@nokia.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi Standards Track [Page 31]
+
+RFC 3903 SIP Event State Publication October 2004
+
+
+Full Copyright Statement
+
+ Copyright (C) The Internet Society (2004).
+
+ This document is subject to the rights, licenses and restrictions
+ contained in BCP 78, and except as set forth therein, the authors
+ retain all their rights.
+
+ This document and the information contained herein are provided on an
+ "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+ OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
+ ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
+ INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+ INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+ WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Intellectual Property
+
+ The IETF takes no position regarding the validity or scope of any
+ Intellectual Property Rights or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; nor does it represent that it has
+ made any independent effort to identify any such rights. Information
+ on the IETF's procedures with respect to rights in IETF Documents can
+ be found in BCP 78 and BCP 79.
+
+ Copies of IPR disclosures made to the IETF Secretariat and any
+ assurances of licenses to be made available, or the result of an
+ attempt made to obtain a general license or permission for the use of
+ such proprietary rights by implementers or users of this
+ specification can be obtained from the IETF on-line IPR repository at
+ http://www.ietf.org/ipr.
+
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights that may cover technology that may be required to implement
+ this standard. Please address the information to the IETF at ietf-
+ ipr@ietf.org.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+Niemi Standards Track [Page 32]
+