diff options
Diffstat (limited to 'doc/rfc/rfc8048.txt')
-rw-r--r-- | doc/rfc/rfc8048.txt | 1907 |
1 files changed, 1907 insertions, 0 deletions
diff --git a/doc/rfc/rfc8048.txt b/doc/rfc/rfc8048.txt new file mode 100644 index 0000000..591aacb --- /dev/null +++ b/doc/rfc/rfc8048.txt @@ -0,0 +1,1907 @@ + + + + + + +Internet Engineering Task Force (IETF) P. Saint-Andre +Request for Comments: 8048 Filament +Obsoletes: 7248 December 2016 +Category: Standards Track +ISSN: 2070-1721 + + + Interworking between the Session Initiation Protocol (SIP) and the + Extensible Messaging and Presence Protocol (XMPP): Presence + +Abstract + + This document defines a bidirectional protocol mapping for the + exchange of presence information between the Session Initiation + Protocol (SIP) and the Extensible Messaging and Presence Protocol + (XMPP). This document obsoletes RFC 7248. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc8048. + +Copyright Notice + + Copyright (c) 2016 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + + + + + + +Saint-Andre Standards Track [Page 1] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Intended Audience . . . . . . . . . . . . . . . . . . . . . . 4 + 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 + 4. Architectural Assumptions . . . . . . . . . . . . . . . . . . 5 + 5. Presence Authorizations . . . . . . . . . . . . . . . . . . . 6 + 5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 6 + 5.2. XMPP to SIP . . . . . . . . . . . . . . . . . . . . . . . 7 + 5.2.1. Requesting a Presence Authorization . . . . . . . . . 7 + 5.2.2. Refreshing a Notification Dialog . . . . . . . . . . 11 + 5.2.3. Cancelling a Presence Authorization . . . . . . . . . 11 + 5.3. SIP to XMPP . . . . . . . . . . . . . . . . . . . . . . . 15 + 5.3.1. Requesting a Presence Authorization . . . . . . . . . 15 + 5.3.2. Refreshing a Notification Dialog . . . . . . . . . . 18 + 5.3.3. Cancelling a Presence Authorization . . . . . . . . . 19 + 6. Notifications of Presence Information . . . . . . . . . . . . 19 + 6.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 19 + 6.2. XMPP to SIP . . . . . . . . . . . . . . . . . . . . . . . 20 + 6.3. SIP to XMPP . . . . . . . . . . . . . . . . . . . . . . . 25 + 7. Polling for Presence Information . . . . . . . . . . . . . . 27 + 7.1. XMPP to SIP . . . . . . . . . . . . . . . . . . . . . . . 27 + 7.2. SIP to XMPP . . . . . . . . . . . . . . . . . . . . . . . 28 + 8. Privacy and Security Considerations . . . . . . . . . . . . . 28 + 8.1. Amplification Attacks . . . . . . . . . . . . . . . . . . 28 + 8.2. Presence Leaks . . . . . . . . . . . . . . . . . . . . . 29 + 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 + 9.1. Normative References . . . . . . . . . . . . . . . . . . 30 + 9.2. Informative References . . . . . . . . . . . . . . . . . 31 + Appendix A. Changes from RFC 7248 . . . . . . . . . . . . . . . 33 + Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 34 + Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 34 + + + + + + + + + + + + + + + + + + + +Saint-Andre Standards Track [Page 2] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +1. Introduction + + Presence is information about the availability of an entity (such as + network availability or availability for communication). Presence + features in both SIP and XMPP involve several aspects: + + o A long-lived authorization for a user to receive notifications + about a contact's presence across presence and notification + sessions; such an authorization is formally requested by the user, + approved (or not) by the contact, and often associated with a + record in an address list or "buddy list". + + o An ephemeral presence session, during which the contact is online + (i.e., available for interaction) and after which the contact is + offline again. + + o An ephemeral notification session, during which the user requests + presence notifications from the contact (these are implicit in + XMPP, but explicit in SIP where they are managed by means of + notification dialogs). + + o Notifications that are sent from the contact to the user for the + life of either the contact's presence session or the user's + notification session. + + Although specifications for both SIP and XMPP use the term + "subscription", they do so in different ways. In SIP, a + "subscription" is the specific mechanism whereby a subscriber (or an + entity acting on the subscriber's behalf, such as a SIP Presence + Server) requests presence notifications from the contact over a + relatively short period of time, renewed as necessary to keep + receiving presence notifications during a presence session. By + contrast, in XMPP a "subscription" is essentially shorthand for a + long-lived presence authorization. To prevent confusion, this + document uses the term "notification dialog" for a SIP subscription + and the term "presence authorization" for an XMPP subscription. + + In order to help ensure interworking between presence systems that + conform to the instant messaging and presence protocol requirements + [RFC2779], it is important to clearly define protocol mappings + between such systems. Within the IETF, work has proceeded on two + presence technologies: + + o Various extensions to the Session Initiation Protocol ([RFC3261]) + for presence, in particular [RFC3856] + + + + + + +Saint-Andre Standards Track [Page 3] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + o The Extensible Messaging and Presence Protocol (XMPP), which + consists of a formalization of the core XML-streaming protocols + developed originally by the Jabber open-source community; the + relevant specifications are [RFC6120] for the XML-streaming layer + and [RFC6121] for basic presence and instant-messaging extensions + + One approach to help ensure interworking between these protocols is + to map each protocol to the abstract semantics described in + [RFC3860]; however, apparently that approach has never been + implemented. The approach taken in this document is to directly map + semantics from one protocol to another (i.e., from SIP/SIMPLE (SIP + for Instant Messaging and Presence Leveraging Extensions) to XMPP and + vice versa), because that is how existing systems solve the + interworking problem. + + The architectural assumptions underlying such direct mappings are + provided in [RFC7247], including mapping of addresses and error + conditions. The mappings specified in this document cover basic + presence functionality. Mapping of more advanced functionality + (e.g., so-called "rich presence") is out of scope for this document. + + This document obsoletes RFC 7248. + +2. Intended Audience + + The documents in this series (which include [RFC7247], [RFC7572], + [RFC7573], and [RFC7702]) are intended for use by software developers + who have an existing system based on one of these technologies (e.g., + SIP) and would like to enable communication from that existing system + to systems based on the other technology (e.g., XMPP). We assume + that readers are familiar with the core specifications for both SIP + [RFC3261] and XMPP [RFC6120], with the base document for this series + [RFC7247], and with the following presence-related specifications: + + o "A Presence Event Package for the Session Initiation Protocol" + [RFC3856] + + o "Presence Information Data Format (PIDF)" [RFC3863] + + o "Extensible Messaging and Presence Protocol (XMPP): Instant + Messaging and Presence" [RFC6121] + + o "SIP-Specific Event Notification" [RFC6665] + + + + + + + + +Saint-Andre Standards Track [Page 4] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +3. Terminology + + A number of terms used here ("user", "contact", "notification", etc.) + are explained in [RFC3261], [RFC3856], [RFC3857], [RFC6120], and + [RFC6121]. This document uses some, but not all, of the presence- + related terms defined in the Model for Presence and Instant Messaging + [RFC2778]. In particular, the term "presence session" is used as + described in [RFC6121] to mean a delimited time period during which + an endpoint is online and available for communications. + + In flow diagrams, SIP traffic is shown using arrows such as "***>", + whereas XMPP traffic is shown using arrows such as "...>". As in + [RFC7247], the terms "SIP to XMPP Gateway" and "XMPP to SIP Gateway" + are abbreviated as "S2X GW" and "X2S GW", respectively. + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + [RFC2119]. + +4. Architectural Assumptions + + The fundamental architectural assumptions underlying SIP-XMPP + interworking are described in [RFC7247]. + + Note that, in SIP, there are two ways that presence services can be + deployed on the server side: + + 1. Under this model, described most fully in [RFC3857], a dedicated + SIP Presence Server handles events related to the presence event + package. Instead of forwarding a SUBSCRIBE message to the SIP + user, the Presence Server would inform the user of subscription + activity using the 'presence.winfo' event package. The SIP User + Agent would then authorize the subscribing contact through some + interaction with the Presence Server (for instance, using XML + Configuration Access Protocol (XCAP) [RFC4825]). Therefore, + presence updates from the SIP User Agent would not be sent as + NOTIFY messages to the XMPP user but as PUBLISH messages to the + Presence Server, which would then generate NOTIFY messages to all + active subscribers. + + 2. Under this model, a SIP Presence Server acts in proxy mode and + merely passes through the SUBSCRIBE and NOTIFY messages to the + SIP User Agent. + + + + + + + +Saint-Andre Standards Track [Page 5] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + Because the behavior of the XMPP-to-SIP gateway is not changed by the + SIP architectural model that is used, the diagrams and protocol flows + in this document cover both options by labeling the end entity a "SIP + User Agent or Presence Server". + +5. Presence Authorizations + +5.1. Overview + + Both XMPP and presence-aware SIP systems enable entities (often, but + not necessarily, human users) to subscribe to the presence of other + entities. XMPP presence is specified in [RFC6121]. Presence using a + SIP event package is specified in [RFC3856]. + + As described in [RFC6121], XMPP presence authorizations are managed + using XMPP <presence/> stanzas of type "subscribe", "subscribed", + "unsubscribe", and "unsubscribed". The main states are: + + o "none" (neither the user nor the contact is subscribed to the + other's presence information) + + o "from" (the contact will receive presence notifications from the + user) + + o "to" (the contact will send presence notifications to the user) + + o "both" (both user and contact will receive each other's presence + notifications) + + As described in [RFC3856], in SIP the subscriber does not explicitly + request the creation or removal of presence authorizations. Rather, + the authorizations are triggered by subscription activity. When a + SIP user receives an initial SIP SUBSCRIBE event from a contact, the + recipient's SIP User Agent or SIP Presence Server asks the user to + make an authorization policy decision. This decision is recorded in + the SIP User Agent or SIP Presence Server, so that in the future any + notification dialogs from the contact are automatically approved. + (Note that addresses for SIP users and contacts are most generally + referenced by a Presence URI of the form <pres:user@domain> but might + be referenced by a SIP or SIPS (Session Initiation Protocol Secure) + URI of the form <sip:user@domain> or <sips:user@domain>; because, in + practice, 'pres' URIs are rarely used, the examples in this document + use 'sip' URIs.) + + In both SIP and XMPP, presence authorizations are long-lived (indeed + permanent if not explicitly cancelled). In SIP, by default a + notification session is typically short-lived unless explicitly + extended (the default time-to-live of a SIP notification dialog is + + + +Saint-Andre Standards Track [Page 6] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + 3600 seconds, as specified in Section 6.4 of [RFC3856], so that a + notification dialog needs to be explicitly refreshed in order for a + user's notification session to last as long as the contact's presence + session). In XMPP, a user's notification session with a contact is + almost always automatically handled by the user's server based on the + user's presence state (see [RFC6121] for details). + +5.2. XMPP to SIP + +5.2.1. Requesting a Presence Authorization + + The following diagram illustrates the protocol flow necessary to + establish an authorization for an XMPP user to a receive presence + notifications from a SIP contact, as further explained in the text + and examples after the diagram. + + XMPP XMPP SIP SIP UA or + Client Server Proxy Presence Server + | + X2S GW | | + | | | | + | (F1) XMPP | | | + | subscribe | | | + |...........>| | | + | | (F2) SIP | | + | | SUBSCRIBE | | + | |***********>| | + | | | (F3) SIP | + | | | SUBSCRIBE | + | | |***********>| + | | | (F4) SIP | + | | | 200 OK | + | | |<***********| + | | (F5) SIP | | + | | 200 OK | | + | |<***********| | + | | | (F6) SIP | + | | | NOTIFY | + | | | (pending) | + | | |<***********| + | | (F7) SIP | | + | | NOTIFY | | + | |<***********| | + | | (F8) SIP | | + | | 200 OK | | + | |***********>| | + | | | (F9) SIP | + | | | 200 OK | + | | |***********>| + + + +Saint-Andre Standards Track [Page 7] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + | | | (F10) SIP | + | | | NOTIFY | + | | | (active) | + | | |<***********| + | | (F11) SIP | | + | | NOTIFY | | + | |<***********| | + | | (F12) SIP | | + | | 200 OK | | + | |***********>| | + | | | (F13) SIP | + | | | 200 OK | + | | |***********>| + | (F14) XMPP | | | + | subscribed | | | + |<...........| | | + | (F15) XMPP | | | + | presence | | | + |<...........| | | + | | | | + + An XMPP user (e.g., juliet@example.com) asks for a presence + authorization by sending a request to a SIP contact (e.g., + romeo@example.net), and the contact either accepts or declines the + request. If the SIP contact accepts the request, the XMPP user will + have a long-lived authorization to receive the SIP contact's presence + information until (1) the XMPP user unsubscribes or (2) the SIP + contact cancels the authorization. The request is encapsulated in a + <presence/> stanza of type "subscribe": + + Example 1: XMPP User Subscribes to SIP Contact (F1) + + | <presence from='juliet@example.com' + | to='romeo@example.net' + | type='subscribe'/> + + Upon receiving such a <presence/> stanza, the XMPP server to which + Juliet has connected needs to determine the identity of the + domainpart in the 'to' address, which it does by following the + procedures explained in Section 5 of [RFC7247]. If the domain is a + SIP domain, the XMPP server will hand off the <presence/> stanza to + an associated XMPP-to-SIP gateway or connection manager that natively + communicates with presence-aware SIP proxies. + + + + + + + + +Saint-Andre Standards Track [Page 8] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + The XMPP-to-SIP gateway is then responsible for translating the XMPP + request into a SIP SUBSCRIBE request addressed from the XMPP user to + the SIP contact: + + Example 2: SIP Transformation of XMPP Presence Authorization Request + (F2) + + | SUBSCRIBE sip:romeo@example.net SIP/2.0 + | Via: SIP/2.0/TCP x2s.example.com;branch=z9hG4bKna998sk + | From: <sip:juliet@example.com>;tag=j89d + | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C + | Event: presence + | Max-Forwards: 70 + | CSeq: 1 SUBSCRIBE + | Contact: <sip:juliet@example.com>;gr=yn0cl4bnw0yr3vym + | Accept: application/pidf+xml + | Expires: 3600 + | Content-Length: 0 + + Once the SIP proxy has delivered the SIP SUBSCRIBE to the SIP User + Agent or Presence Server (F3, no example shown), the SIP User Agent + would then send a response indicating acceptance of the request: + + Example 3: SIP User Accepts Presence Authorization Request (F4) + + | SIP/2.0 200 OK + | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk + | From: <sip:juliet@example.com>;tag=j89d + | To: <sip:romeo@example.net>;tag=ffd2 + | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C + | CSeq: 1 SUBSCRIBE + | Contact: <sip:romeo@example.net>;gr=dr4hcr0st3lup4c + | Expires: 3600 + | Content-Length: 0 + + In accordance with Section 6.7 of [RFC3856], the XMPP-to-SIP gateway + needs to consider the state to be "neutral" until it receives a + NOTIFY message with a Subscription-State header [RFC6665] whose value + is "active". Therefore, the SIP User Agent or Presence Server SHOULD + immediately send such a NOTIFY message (see Section 6 below). If the + XMPP-to-SIP gateway initially receives one or more NOTIFY messages + with a Subscription-State header whose value is "pending" (F6), then + it MUST respond to them on the SIP side but refrain from sending any + presence stanzas from the SIP contact to the XMPP user. + + + + + + + +Saint-Andre Standards Track [Page 9] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + Example 4: SIP User Agent or Presence Server Sends Presence + Notification (F10) + + | NOTIFY sip:juliet@example.com SIP/2.0 + | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk + | From: <sip:juliet@example.com>;tag=j89d + | To: <sip:romeo@example.net>;tag=ffd2 + | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C + | Event: presence + | Subscription-State: active;expires=499 + | Max-Forwards: 70 + | CSeq: 2 NOTIFY + | Content-Type: application/pidf+xml + | Content-Length: 193 + | + | <?xml version='1.0' encoding='UTF-8'?> + | <presence xmlns='urn:ietf:params:xml:ns:pidf' + | entity='pres:romeo@example.net'> + | <tuple id='ID-dr4hcr0st3lup4c'> + | <status> + | <basic>open</basic> + | <show xmlns='jabber:client'>away</show> + | </status> + | </tuple> + | </presence> + + Upon receiving the first NOTIFY with a state of active, the XMPP-to- + SIP gateway returns a 200 OK to the SIP User Agent or Presence Server + (F12, no example shown). + + The XMPP-to-SIP gateway also generates a <presence/> stanza of type + "subscribed": + + Example 5: XMPP User Receives Acknowledgement from SIP Contact (F14) + + | <presence from='romeo@example.net' + | to='juliet@example.com' + | type='subscribed'/> + + + + + + + + + + + + + +Saint-Andre Standards Track [Page 10] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + As described in Section 6, if this first NOTIFY in the notification + session contains a body, then the XMPP-to-SIP gateway also generates + a presence notification addressed to the XMPP user (if the NOTIFY + does not contain a body, then the gateway would interpret it as + unknown or "closed"): + + Example 6: XMPP User Receives Presence Notification from SIP Contact + (F15) + + | <presence from='romeo@example.net/dr4hcr0st3lup4c' + | to='juliet@example.com'/> + +5.2.2. Refreshing a Notification Dialog + + It is the responsibility of the XMPP-to-SIP gateway to set the value + of the Expires header and to periodically renew the notification + dialog on the SIMPLE side of the gateway. For example, the XMPP-to- + SIP gateway SHOULD send a new SUBSCRIBE request to the SIP contact + whenever the XMPP user initiates a presence session with the XMPP + server by sending initial presence to its XMPP server (this is + functionally equivalent to sending an XMPP presence probe). The + XMPP-to-SIP gateway SHOULD also send a new SUBSCRIBE request to the + SIP contact sufficiently in advance of when the SIP notification + dialog is scheduled to expire during the XMPP user's active presence + session. + + The rules regarding SIP SUBSCRIBE requests for the purpose of + establishing and refreshing a notification dialog are provided in + [RFC6665]. Those rules also apply to XMPP-to-SIP gateways. + Furthermore, an XMPP-to-SIP gateway MUST consider the XMPP presence + authorization to be permanently cancelled (and so inform the XMPP + user) if it receives a SIP response of 403, 489, or 603. By + contrast, it is appropriate to consider a SIP response of 423 or 481 + to be a transient error and to honor the long-lived XMPP presence + authorization. [RFC6665] explains more detailed considerations about + the handling of SIP responses in relation to notification dialogs and + refreshes. + + Finally, see the Privacy and Security Considerations section + (Section 8) for important information and requirements regarding the + security implications of notification refreshes. + +5.2.3. Cancelling a Presence Authorization + + The following diagram illustrates the protocol flow by which an XMPP + user cancels her outbound presence authorization with a SIP contact + (i.e., indicates that she no longer wishes to be authorized to see + the SIP contact's presence). As can be seen, SIMPLE itself does not + + + +Saint-Andre Standards Track [Page 11] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + have a construct that enables a user to cancel her outbound presence + authorization (however, in many SIP/SIMPLE implementations she could + use a technology such as XCAP [RFC4825] to remove the contact from + her address list); therefore, this flow instead results in the + cancellation of the user's notification dialog (with the implication + on the XMPP side that the user will not request a subsequent + notification dialog). Additional details are explained in the text + and examples after the diagram. + + XMPP XMPP SIP SIP UA or + Client Server Proxy Presence Server + | + X2S GW | | + | | | | + | (F16) XMPP | | | + |unsubscribe | | | + |...........>| | | + | | (F17) SIP | | + | | SUBSCRIBE | | + | | Expires: 0 | | + | |***********>| | + | | | (F18) SIP | + | | | SUBSCRIBE | + | | | Expires: 0 | + | | |***********>| + | | | (F19) SIP | + | | | 200 OK | + | | |<***********| + | | (F20) SIP | | + | | 200 OK | | + | |<***********| | + | (F21) XMPP | | | + |unsubscribed| | | + |<...........| | | + | | (F22) SIP | | + | | NOTIFY | | + | | terminated | | + | |***********>| | + | | | (F23) SIP | + | | | NOTIFY | + | | | terminated | + | | |***********>| + | | | (F24) SIP | + | | | 200 OK | + | | |<***********| + | | (F25) SIP | | + | | 200 OK | | + | |<***********| | + | | | | + + + +Saint-Andre Standards Track [Page 12] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + At any time after subscribing, the XMPP user can indicate that she no + longer wishes to be authorized to receive presence notifications from + the contact. This is done by sending a <presence/> stanza of type + "unsubscribe": + + Example 7: XMPP User Unsubscribes from SIP Contact (F16) + + | <presence from='juliet@example.com' + | to='romeo@example.net' + | type='unsubscribe'/> + + The XMPP-to-SIP gateway is responsible for translating the XMPP + unsubscribe command into a SIP SUBSCRIBE request with the Expires + header set to a value of zero ("0"): + + Example 8: SIP Transformation of XMPP Unsubscribe (F17) + + | SUBSCRIBE sip:romeo@example.net SIP/2.0 + | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk + | From: <sip:juliet@example.com>;tag=j89d + | To: <sip:romeo@example.com>;tag=ffd2 + | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C + | Event: presence + | Max-Forwards: 70 + | CSeq: 42 SUBSCRIBE + | Contact: <sip:juliet@example.com>;gr=yn0cl4bnw0yr3vym + | Accept: application/pidf+xml + | Expires: 0 + | Content-Length: 0 + + Upon receiving the SIP 200 OK acknowledging the cancellation, the + XMPP-to-SIP gateway SHOULD send a <presence/> stanza of type + "unsubscribed" addressed to the XMPP user: + + Example 9: XMPP User Receives Unsubscribed Notification (F21) + + | <presence from='romeo@example.net' + | to='juliet@example.com' + | type='unsubscribed'/> + + In accordance with Section 4.4.1 of [RFC6665], the XMPP-to-SIP + gateway is then responsible for sending a NOTIFY message with a + Subscription-State header of "terminated" in order to formally end + the XMPP user's outbound presence authorization and the associated + SIP dialog. + + + + + + +Saint-Andre Standards Track [Page 13] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + Example 10: XMPP-to-SIP Gateway Sends Presence Notification to + Terminate Authorization (F25) + + | NOTIFY sip:juliet@example.com SIP/2.0 + | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk + | From: <sip:juliet@example.com>;tag=j89d + | To: <sip:romeo@example.net>;tag=ffd2 + | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C + | Event: presence + | Subscription-State: terminated + | Max-Forwards: 70 + | CSeq: 43 NOTIFY + | Content-Length: 0 + + Note: When the XMPP user cancels her outbound presence authorization + to the SIP user, any inbound authorization that she might have + approved (thus enabling the SIP user to see her presence) remains + unchanged. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Saint-Andre Standards Track [Page 14] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +5.3. SIP to XMPP + +5.3.1. Requesting a Presence Authorization + + The following diagram illustrates the protocol flow for establishing + an authorization for a SIP user to receive presence notifications + from an XMPP contact, as further explained in the text and examples + after the diagram. + + SIP SIP XMPP XMPP + UA Proxy Server Client + | + S2X GW | | + | | | | + | (F26) SIP | | | + | SUBSCRIBE | | | + |**********>| | | + | (F27) SIP | | | + | 200 OK | | | + |<**********| | | + | | (F28) XMPP | | + | | subscribe | | + | |...........>| | + | | | (F29) XMPP| + | | | subscribe | + | | |..........>| + | | | (F30) XMPP| + | | | subscribed| + | | |<..........| + | | (F31) XMPP | | + | | subscribed | | + | |<...........| | + | (F32) SIP | | | + | NOTIFY | | | + | (active) | | | + |<**********| | | + | (F33) SIP | | | + | 200 OK | | | + |**********>| | | + | | | | + + + + + + + + + + + + +Saint-Andre Standards Track [Page 15] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + A SIP User Agent initiates a presence authorization to an XMPP + contact's presence information by sending a SIP SUBSCRIBE request to + the contact. The following is an example of such a request: + + Example 11: SIP User Subscribes to XMPP Contact (F26) + + | SUBSCRIBE sip:juliet@example.com SIP/2.0 + | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk + | From: <sip:romeo@example.net>;tag=xfg9 + | To: <sip:juliet@example.net> + | Call-ID: AA5A8BE5-CBB7-42B9-8181-6230012B1E11 + | Event: presence + | Max-Forwards: 70 + | CSeq: 1 SUBSCRIBE + | Contact: <sip:romeo@example.net>;gr=dr4hcr0st3lup4c + | Accept: application/pidf+xml + | Content-Length: 0 + + Notice that the Expires header was not included in the SUBSCRIBE + request; this means that the default value of 3600 (i.e., 3600 + seconds = 1 hour) applies. + + Upon receiving the SUBSCRIBE, the SIP proxy needs to determine the + identity of the domain portion of the Request-URI, which it does by + following the procedures explained in Section 5 of [RFC7247]. If the + domain is an XMPP domain, the SIP proxy will hand off the SUBSCRIBE + to an associated SIP-to-XMPP gateway or connection manager that + natively communicates with XMPP servers. + + The SIP-to-XMPP gateway is then responsible for translating the + SUBSCRIBE into an XMPP authorization request addressed from the SIP + user to the XMPP contact: + + Example 12: XMPP Transformation of SIP SUBSCRIBE (F28) + + | <presence from='romeo@example.net' + | to='juliet@example.com' + | type='subscribe'/> + + In accordance with [RFC6121], the XMPP user's server delivers the + presence authorization request to the XMPP user (or, if an + authorization already exists in the XMPP user's roster, the XMPP + server SHOULD auto-reply with a <presence/> stanza of type + 'subscribed'). + + + + + + + +Saint-Andre Standards Track [Page 16] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + The "happy path" is for the XMPP user to approve the presence + authorization request by generating a <presence/> stanza of type + "subscribed" (F30). The XMPP server then stamps that presence stanza + with the 'from' address of the XMPP contact and sends it to the SIP + user (F31). Upon receiving the stanza, the SIP-to-XMPP gateway + generates an empty SIP NOTIFY message with a Subscription-State + header [RFC6665] of "active", which serves to inform the SIP user + that the presence authorization request has been approved (F32). + + Example 13: XMPP User Approves Presence Authorization Request (F31) + + | <presence from='juliet@example.com' + | to='romeo@example.net' + | type='subscribed'/> + + Example 14: Presence Authorization Request Approved (F32) + + | NOTIFY sip:romeo@example.net SIP/2.0 + | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk + | From: <sip:romeo@example.net>;tag=xfg9 + | To: <sip:juliet@example.com>;tag=ur93 + | Call-ID: AA5A8BE5-CBB7-42B9-8181-6230012B1E11 + | Event: presence + | Subscription-State: active + | Max-Forwards: 70 + | CSeq: 2 NOTIFY + | Content-Length: 0 + + As an alternative to the "happy path", the XMPP user could decline + the presence authorization request by generating a <presence/> stanza + of type "unsubscribed". The XMPP server would stamp that presence + stanza with the 'from' address of the XMPP contact and would send it + to the SIP user. The SIP-to-XMPP gateway then transforms that stanza + into an empty SIP NOTIFY with a Subscription-State header [RFC6665] + of "terminated" and a reason of "rejected": + + Example 15: XMPP User Rejects Presence Authorization Request + + | <presence from='juliet@example.com' + | to='romeo@example.net' + | type='unsubscribed'/> + + + + + + + + + + +Saint-Andre Standards Track [Page 17] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + Example 16: Presence Authorization Request Rejected + + | NOTIFY sip:romeo@example.net SIP/2.0 + | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk + | From: <sip:romeo@example.net>;tag=xfg9 + | To: <sip:juliet@example.com>;tag=ur93 + | Call-ID: AA5A8BE5-CBB7-42B9-8181-6230012B1E11 + | Event: presence + | Subscription-State: terminated;reason=rejected + | Max-Forwards: 70 + | CSeq: 2 NOTIFY + | Content-Length: 0 + +5.3.2. Refreshing a Notification Dialog + + For as long as a SIP user is online and wishes to maintain a + notification session (i.e., receive presence notifications from the + XMPP contact), the user's SIP User Agent is responsible for + periodically refreshing the notification dialog by sending an updated + SUBSCRIBE request with an appropriate value for the Expires header. + In response, the presence-aware SIP-to-XMPP gateway sends a SIP + NOTIFY message to the SIP User Agent (per [RFC6665]); if the SIP-to- + XMPP gateway has meaningful information about the availability state + of the XMPP user (e.g., obtained from the core presence session in + the XMPP server or learned by sending a presence probe as described + under Section 7), then the NOTIFY communicates that information + (e.g., by including a PIDF body [RFC3863] with the relevant data), + whereas if the SIP-to-XMPP gateway does not have meaningful + information about the availability state of the XMPP user, then the + NOTIFY MUST be empty as allowed by [RFC6665]. + + + + + + + + + + + + + + + + + + + + + +Saint-Andre Standards Track [Page 18] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +5.3.3. Cancelling a Presence Authorization + + SIP does not directly have a construct for cancelling an outbound + presence authorization. Instead, the SIP user would terminate his + outbound notification dialog by sending a SUBSCRIBE message whose + Expires header is set to a value of zero ("0") and then never renew + it: + + Example 17: SIP User Terminates Notification Dialog + + | SUBSCRIBE sip:juliet@example.com SIP/2.0 + | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk + | From: <sip:romeo@example.net>;tag=xfg9 + | To: <sip:juliet@example.com>;tag=ur93 + | Call-ID: AA5A8BE5-CBB7-42B9-8181-6230012B1E11 + | Event: presence + | Max-Forwards: 70 + | CSeq: 66 SUBSCRIBE + | Contact: <sip:romeo@example.net>;gr=dr4hcr0st3lup4c + | Expires: 0 + | Content-Length: 0 + + A presence-aware SIP-to-XMPP gateway is then responsible for: + + 1. Sending a SIP NOTIFY request to the SIP User Agent containing a + PIDF document specifying that the XMPP contact now has a basic + status of "closed", including a Subscription-State header + [RFC6665] of "terminated" with a reason of "timeout". + + 2. Sending an XMPP <presence/> stanza of type "unavailable" to the + XMPP contact. + + Note: When the SIP user cancels his outbound presence authorization + to the XMPP user, any inbound authorization that he might have + approved (enabling the XMPP user to see his presence) remains + unchanged. + +6. Notifications of Presence Information + +6.1. Overview + + Both XMPP and presence-aware SIP systems enable entities (often, but + not necessarily, human users) to send presence notifications to other + entities. At its most basic, the term "presence" refers to + information about an entity's "on/off" availability for communication + on a network. Often, this basic concept is supplemented by + information that further specifies the entity's context or status + while available for communication; these availability states commonly + + + +Saint-Andre Standards Track [Page 19] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + include "away" and "do not disturb". Some systems and protocols + extend the concepts of presence and availability even further and + refer to any relatively ephemeral information about an entity as a + kind of presence; categories of such "extended presence" include + geographical location (e.g., GPS coordinates), user mood (e.g., + grumpy), user activity (e.g., walking), and ambient environment + (e.g., noisy). This document focuses on the "least common + denominator" of network availability only. Future documents might + address broader notions of presence, including availability states + and extended presence or so-called "rich presence" as defined in + specifications such as [RFC4480], [XEP-0107], and [XEP-0108]. + + The XMPP instant messaging and presence specification [RFC6121] + defines how XMPP <presence/> stanzas can indicate availability (via + the absence of a 'type' attribute) or lack of availability (via a + 'type' attribute with a value of "unavailable"). SIP presence using + a SIP event package for presence is specified in [RFC3856]. + + As described in [RFC6121], XMPP presence information about an entity + is communicated by means of an XML <presence/> stanza sent over an + XML stream. This document assumes that such a <presence/> stanza is + sent from an XMPP client to an XMPP server over an XML stream + negotiated between the client and the server, and that the client is + controlled by a human user. In general, XMPP presence is sent by the + user's client to the user's server and then broadcast to all entities + who are subscribed to the user's presence information. + + As described in [RFC3856], presence information about an entity is + communicated by means of a SIP NOTIFY event sent from a SIP User + Agent to an intended recipient who is most generally referenced by a + Presence URI of the form <pres:user@domain> but who might be + referenced by a SIP or SIPS URI of the form <sip:user@domain> or + <sips:user@domain>. + +6.2. XMPP to SIP + + When Juliet interacts with her XMPP client to modify her presence + information (or when her client automatically updates her presence + information, e.g., via an "auto-away" feature), her client generates + an XMPP <presence/> stanza. The syntax of the <presence/> stanza, + including required and optional elements and attributes, is defined + in [RFC6121]. The following is an example of such a stanza: + + Example 18: XMPP User Sends Presence Notification + + | <presence from='juliet@example.com/yn0cl4bnw0yr3vym'/> + + + + + +Saint-Andre Standards Track [Page 20] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + Upon receiving such a stanza, the XMPP server to which Juliet has + connected broadcasts it to all subscribers who are authorized to + receive presence notifications from Juliet and who have indicated a + current interest in receiving notifications (this is similar to the + SIP NOTIFY method). For each subscriber, broadcasting the presence + notification involves adding the 'to' address of the subscriber and + then either delivering the notification to a local recipient (if the + hostname in the subscriber's address matches one of the hostnames + serviced by the XMPP server) or attempting to route it to the foreign + domain that services the hostname in the subscriber's address. If + the notification is bound for an address at a foreign domain, the + XMPP server needs to determine the identity of the domainpart in the + 'to' address, which it does by following the procedures discussed in + [RFC7247]. If the domain is a SIP domain, the XMPP server will hand + off the <presence/> stanza to an associated XMPP-to-SIP gateway or + connection manager that natively communicates with presence-aware SIP + proxy. + + The XMPP-to-SIP gateway is then responsible for translating the XMPP + <presence/> stanza into a SIP NOTIFY request (including the PIDF + document) from the XMPP user to the SIP contact. + + Example 19: SIP Transformation of XMPP Presence Notification + + | NOTIFY sip:juliet@example.com SIP/2.0 + | Via: SIP/2.0/TCP x2s.example.com;branch=z9hG4bKna998sk + | From: <sip:juliet@example.com>;tag=gh19 + | To: <sip:romeo@example.net> + | Contact: <sip:juliet@example.com>;gr=yn0cl4bnw0yr3vym + | Call-ID: 2B44E147-3B53-45E4-9D48-C051F3216D14 + | Event: presence + | Subscription-State: active;expires=599 + | Max-Forwards: 70 + | CSeq: 2 NOTIFY + | Content-Type: application/pidf+xml + | Content-Length: 192 + | + | <?xml version='1.0' encoding='UTF-8'?> + | <presence xmlns='urn:ietf:params:xml:ns:pidf' + | entity='pres:juliet@example.com'> + | <tuple id='ID-yn0cl4bnw0yr3vym'> + | <status> + | <basic>open</basic> + | <show xmlns='jabber:client'>away</show> + | </status> + | </tuple> + | </presence> + + + + +Saint-Andre Standards Track [Page 21] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + The mapping of XMPP syntax elements to SIP syntax elements MUST be as + shown in the following table. (Mappings for elements not mentioned + are undefined and therefore are a matter of implementation.) + + +-----------------------------+---------------------------+ + | XMPP Element or Attribute | SIP Header or PIDF Data | + +-----------------------------+---------------------------+ + | <presence/> stanza | "Event: presence" (1) | + +-----------------------------+---------------------------+ + | XMPP resource identifier | tuple 'id' attribute (2) | + +-----------------------------+---------------------------+ + | from | From | + +-----------------------------+---------------------------+ + | id | no mapping (3) | + +-----------------------------+---------------------------+ + | to | To | + +-----------------------------+---------------------------+ + | type | basic status (4) (5) | + +-----------------------------+---------------------------+ + | xml:lang | Content-Language | + +-----------------------------+---------------------------+ + | <priority/> | priority for tuple (6) | + +-----------------------------+---------------------------+ + | <show/> | no mapping (7) | + +-----------------------------+---------------------------+ + | <status/> | <note/> | + +-----------------------------+---------------------------+ + + Table 1: Presence Syntax Mapping from XMPP to SIP + + Note the following regarding these mappings: + + 1. Only an XMPP <presence/> stanza that lacks a 'type' attribute or + whose 'type' attribute has a value of "unavailable" is mapped by + an XMPP-to-SIP gateway to a SIP NOTIFY request, because those are + the only <presence/> stanzas that represent notifications. + + 2. The PIDF schema defines the tuple 'id' attribute as having a + datatype of "xs:ID"; because this datatype is more restrictive + than the "xs:string" datatype for XMPP resourceparts (in + particular, a number is not allowed as the first character of an + ID), it is RECOMMENDED to prepend the resourcepart with "ID-" or + some other alphabetic string when mapping from XMPP to SIP. + + 3. In practice, XMPP <presence/> stanzas often do not include the + 'id' attribute. + + + + + +Saint-Andre Standards Track [Page 22] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + 4. Because the lack of a 'type' attribute indicates that an XMPP + entity is available for communication, the XMPP-to-SIP gateway + MUST map that information to a PIDF basic status of "open". + Because a 'type' attribute with a value of "unavailable" + indicates that an XMPP entity is not available for communication, + the XMPP-to-SIP gateway MUST map that information to a PIDF + <basic/> status of "closed". + + 5. When the XMPP-to-SIP gateway receives an XMPP presence of type + "unavailable" from the XMPP contact, it sends a SIP NOTIFY + request from the XMPP contact to the SIP User Agent containing a + PIDF document specifying that the XMPP contact now has a basic + status of "closed". + + 6. The value of the XMPP <priority/> element is an integer between + -128 and +127, whereas the value of the PIDF <contact/> element's + 'priority' attribute is a decimal number from zero to one + inclusive, with a maximum of three decimal places. If the value + of the XMPP <priority/> element is negative, an XMPP-to-SIP + gateway MUST NOT map the value. If an XMPP-to-SIP gateway maps + positive values, it SHOULD treat XMPP priority 0 as PIDF priority + 0 and XMPP priority 127 as PIDF priority 1, mapping intermediate + values appropriately so that they are unique (e.g., XMPP priority + 1 to PIDF priority 0.007, XMPP priority 2 to PIDF priority 0.015, + and so on up through mapping XMPP priority 126 to PIDF priority + 0.992; note that this is an example only and that the exact + mapping is up to the implementation). + + 7. Some implementations support custom extensions to encapsulate + detailed information about availability; however, there is no + need to standardize a PIDF extension for this purpose, because + PIDF is already extensible, and thus the XMPP <show/> element + (qualified by the 'jabber:client' namespace) can be included + directly in the PIDF XML. The examples in this document + illustrate this usage, which is RECOMMENDED. The most useful + values are likely "away" and "dnd" (both defined in [RFC6121]), + although note that in XMPP a value of "dnd" (short for "do not + disturb") merely means "busy" and does not imply that a server or + client ought to block incoming traffic while the user is in that + state. Naturally, an XMPP-to-SIP gateway can choose to translate + a custom extension into an established value of the XMPP <show/> + element (as defined in [RFC6121]) or translate a <show/> element + into a custom extension that the XMPP-to-SIP gateway knows is + supported by the SIP User Agent of the intended recipient. + Unfortunately, this behavior does not guarantee that information + will not be lost; to help prevent information loss, an XMPP-to- + SIP gateway ought to include both the <show/> element and the + custom extension if it cannot suitably translate the custom value + + + +Saint-Andre Standards Track [Page 23] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + into a <show/> value. However, there is no guarantee that the + SIP receiver will render a standard XMPP <show/> value or custom + extension. + + In XMPP, a user can connect with multiple clients at the same time + [RFC6120]; for presence notification purposes [RFC6121], each client + is associated with a distinct resourcepart [RFC7622] and a contact's + SIP User Agent will receive a separate presence notification from + each of the XMPP user's clients. Although the interpretation of + multiple presence notifications from a single user is a matter of + implementation by the contact's SIP User Agent, typically the SIP + User Agent will show the "most available" status for the contact + (e.g., if the user is online with three devices, one of which is + "away", one of which is in "do not disturb" mode, and one of which is + "available" with no qualifications, then the status shown will simply + be "available"). In SIP, it is reasonable for a SIP User Agent to + model multiple presence notifications from an XMPP user in the same + way that it would handle multiple tuples from a SIP user. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Saint-Andre Standards Track [Page 24] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +6.3. SIP to XMPP + + When Romeo changes his presence, his SIP User Agent generates a SIP + NOTIFY request for any contacts that have presence authorizations and + notification sessions. The syntax of the NOTIFY request is defined + in [RFC3856]. The following is an example of such a request: + + Example 20: SIP User Sends Presence Notification + + | NOTIFY sip:romeo@example.net SIP/2.0 + | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk + | From: <sip:romeo@example.net>;tag=yt66 + | To: <sip:juliet@example.com>;tag=bi54 + | Contact: <sip:romeo@example.net>;gr=dr4hcr0st3lup4c + | Call-ID: C33C6C9D-0F4A-42F9-B95C-7CE86B526B5B + | Event: presence + | Subscription-State: active;expires=499 + | Max-Forwards: 70 + | CSeq: 8 NOTIFY + | Content-Type: application/pidf+xml + | Content-Length: 193 + | + | <?xml version='1.0' encoding='UTF-8'?> + | <presence xmlns='urn:ietf:params:xml:ns:pidf' + | entity='pres:romeo@example.net'> + | <tuple id='ID-dr4hcr0st3lup4c'> + | <status> + | <basic>closed</basic> + | </status> + | </tuple> + | </presence> + + Upon receiving the NOTIFY, the SIP proxy needs to determine the + identity of the domain portion of the Request-URI, which it does by + following the procedures discussed in [RFC7247]. If the domain is an + XMPP domain, the SIP proxy will hand off the NOTIFY to an associated + SIP-to-XMPP gateway or connection manager that natively communicates + with XMPP servers. + + The SIP-to-XMPP gateway is then responsible for translating the + NOTIFY into an XMPP <presence/> stanza addressed from the SIP user to + the XMPP contact: + + Example 21: XMPP Transformation of SIP Presence Notification + + | <presence from='romeo@example.net' + | to='juliet@example.com/yn0cl4bnw0yr3vym' + | type='unavailable'/> + + + +Saint-Andre Standards Track [Page 25] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + The mapping of SIP syntax elements to XMPP syntax elements MUST be as + shown in the following table. (Mappings for elements not mentioned + are undefined and therefore are a matter of implementation.) + + +---------------------------+-----------------------------+ + | SIP Header or PIDF Data | XMPP Element or Attribute | + +---------------------------+-----------------------------+ + | basic status | type (1) | + +---------------------------+-----------------------------+ + | Content-Language | xml:lang | + +---------------------------+-----------------------------+ + | From | from | + +---------------------------+-----------------------------+ + | priority for tuple | <priority/> (2) | + +---------------------------+-----------------------------+ + | To | to | + +---------------------------+-----------------------------+ + | <note/> | <status/> | + +---------------------------+-----------------------------+ + | <show/> | <show/> (3) | + +---------------------------+-----------------------------+ + + Table 2: Presence Syntax Mapping from SIP to XMPP + + Note the following regarding these mappings: + + 1. A PIDF basic status of "open" MUST be mapped to a <presence/> + stanza with no 'type' attribute, and a PIDF basic status of + "closed" MUST be mapped to a <presence/> stanza whose 'type' + attribute has a value of "unavailable". + + 2. See the notes following Table 1 of this document regarding + mapping of presence priority. + + 3. If a SIP implementation supports the XMPP <show/> element + (qualified by the 'jabber:client' namespace) as a PIDF extension + for availability status as described in the notes following + Table 1 of this document, the SIP-to-XMPP gateway is responsible + for including that element in the XMPP presence notification. + + + + + + + + + + + + +Saint-Andre Standards Track [Page 26] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +7. Polling for Presence Information + + Both SIP and XMPP provide methods for explicitly requesting one-time + information about the current presence status of another entity. + These are "polling" methods as opposed to the publish-subscribe + methods described in the rest of this document. + +7.1. XMPP to SIP + + In XMPP, an explicit request for information about current presence + status is completed by sending a <presence/> stanza of type "probe": + + Example 22: XMPP Server Sends Presence Probe on Behalf of XMPP User + + | <presence from='juliet@example.com/chamber' + | to='romeo@example.net' + | type='probe'/> + + Note: As described in [RFC6121], presence probes are used by XMPP + servers to request presence on behalf of XMPP users; XMPP clients are + discouraged from sending presence probes, because retrieving presence + is a service that XMPP servers provide automatically. + + A SIP-to-XMPP gateway would transform the presence probe into its SIP + equivalent, which is a SUBSCRIBE request with an Expires header value + of zero ("0") in a new dialog: + + Example 23: SIP Transformation of XMPP Presence Probe + + | SUBSCRIBE sip:romeo@example.net SIP/2.0 + | Via: SIP/2.0/TCP x2s.example.com;branch=z9hG4bKna998sk + | From: <sip:juliet@example.com>;tag=j89d + | Call-ID: 2398B737-566F-4CBB-A21A-1F8EEF7AF423 + | Event: presence + | Max-Forwards: 70 + | CSeq: 1 SUBSCRIBE + | Contact: <sip:juliet@example.com>;gr=yn0cl4bnw0yr3vym + | Accept: application/pidf+xml + | Expires: 0 + | Content-Length: 0 + + As described in [RFC3856], this causes a NOTIFY to be sent to the + subscriber, just as a presence probe does (the transformation rules + for presence notifications have been previously described in + Section 6.2 of this document). + + + + + + +Saint-Andre Standards Track [Page 27] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +7.2. SIP to XMPP + + In SIP, an explicit request for information about current presence + status is effectively completed by sending a SUBSCRIBE with an + Expires header value of zero ("0"): + + Example 24: SIP User Sends Presence Request + + | SUBSCRIBE sip:juliet@example.com SIP/2.0 + | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk + | From: <sip:romeo@example.net>;tag=yt66 + | Call-ID: 717B1B84-F080-4F12-9F44-0EC1ADE767B9 + | Event: presence + | Max-Forwards: 70 + | CSeq: 1 SUBSCRIBE + | Contact: <sip:romeo@example.net>;gr=dr4hcr0st3lup4c + | Expires: 0 + | Content-Length: 0 + + A presence-aware SIP-to-XMPP gateway translates such a SIP request + into a <presence/> stanza of type "probe" if it does not already have + presence information about the contact: + + Example 25: XMPP Transformation of SIP Presence Request + + | <presence from='romeo@example.net' + | to='juliet@example.com' + | type='probe'/> + +8. Privacy and Security Considerations + + Detailed privacy and security considerations are given for presence + protocols in [RFC2779], for SIP-based presence in [RFC3856] (see also + [RFC3261]), and for XMPP-based presence in [RFC6121] (see also + [RFC6120]). + +8.1. Amplification Attacks + + There exists the possibility of an amplification attack launched from + the XMPP network against a SIP Presence Server, because each long- + lived XMPP presence authorization would typically result in multiple + notification dialog refreshes on the SIP side of an XMPP-to-SIP + gateway. Therefore, access to an XMPP-to-SIP gateway SHOULD be + restricted in various ways; for example: + + + + + + + +Saint-Andre Standards Track [Page 28] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + o Only an XMPP service that carefully controls account provisioning + and provides effective methods for the administrators to control + the behavior of registered users ought to host an XMPP-to-SIP + gateway (e.g., not a service that offers open account + registration). + + o An XMPP-to-SIP gateway ought to be associated with only a single + domain or trust realm. For example, an XMPP-to-SIP gateway hosted + at simple.example.com ought to allow only users within the + example.com domain to access the XMPP-to-SIP gateway, not users + within example.org, example.net, or any other domain (unless they + are part of the same multi-tenanted environment as example.com). + This helps to prevent the gateway equivalent of open relays that + are shared across XMPP domains from different trust realms. + + If a SIP Presence Server receives communications through an XMPP-to- + SIP gateway from users who are not associated with a domain that is + so related to the hostname of the XMPP-to-SIP gateway, it SHOULD + (based on local service provisioning) refuse to service such users or + refuse to receive traffic from the XMPP-to-SIP gateway. As a further + check, whenever an XMPP-to-SIP gateway seeks to refresh an XMPP + user's long-lived authorization to a SIP user's presence, it first + sends an XMPP <presence/> stanza of type "probe" from the address of + the XMPP-to-SIP gateway to the "bare Jabber Identifier (JID)" + (user@domain.tld) of the XMPP user, to which the user's XMPP server + responds in accordance with [RFC6121]; this puts an equal burden on + the XMPP server and the SIP proxy. + +8.2. Presence Leaks + + Presence notifications can contain sensitive information (e.g., about + network availability). In addition, it is possible in both SIP and + XMPP for an entity to send different presence notifications to + different subscribers. Therefore, a gateway MUST NOT route or + deliver a presence notification to any entity other than the intended + recipient (as represented by the 'to' address for XMPP and by the + Request-URI for SIP), because it does not possess information about + authorization to receive presence notifications for such entities -- + that information resides at the user's home service, not at the + receiving gateway. + + + + + + + + + + + +Saint-Andre Standards Track [Page 29] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +9. References + +9.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <http://www.rfc-editor.org/info/rfc2119>. + + [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, + A., Peterson, J., Sparks, R., Handley, M., and E. + Schooler, "SIP: Session Initiation Protocol", RFC 3261, + DOI 10.17487/RFC3261, June 2002, + <http://www.rfc-editor.org/info/rfc3261>. + + [RFC3856] Rosenberg, J., "A Presence Event Package for the Session + Initiation Protocol (SIP)", RFC 3856, + DOI 10.17487/RFC3856, August 2004, + <http://www.rfc-editor.org/info/rfc3856>. + + [RFC3857] Rosenberg, J., "A Watcher Information Event Template- + Package for the Session Initiation Protocol (SIP)", + RFC 3857, DOI 10.17487/RFC3857, August 2004, + <http://www.rfc-editor.org/info/rfc3857>. + + [RFC3863] Sugano, H., Fujimoto, S., Klyne, G., Bateman, A., Carr, + W., and J. Peterson, "Presence Information Data Format + (PIDF)", RFC 3863, DOI 10.17487/RFC3863, August 2004, + <http://www.rfc-editor.org/info/rfc3863>. + + [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence + Protocol (XMPP): Core", RFC 6120, DOI 10.17487/RFC6120, + March 2011, <http://www.rfc-editor.org/info/rfc6120>. + + [RFC6121] Saint-Andre, P., "Extensible Messaging and Presence + Protocol (XMPP): Instant Messaging and Presence", + RFC 6121, DOI 10.17487/RFC6121, March 2011, + <http://www.rfc-editor.org/info/rfc6121>. + + [RFC6665] Roach, A.B., "SIP-Specific Event Notification", RFC 6665, + DOI 10.17487/RFC6665, July 2012, + <http://www.rfc-editor.org/info/rfc6665>. + + + + + + + + + +Saint-Andre Standards Track [Page 30] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + [RFC7247] Saint-Andre, P., Houri, A., and J. Hildebrand, + "Interworking between the Session Initiation Protocol + (SIP) and the Extensible Messaging and Presence Protocol + (XMPP): Architecture, Addresses, and Error Handling", + RFC 7247, DOI 10.17487/RFC7247, May 2014, + <http://www.rfc-editor.org/info/rfc7247>. + + [RFC7622] Saint-Andre, P., "Extensible Messaging and Presence + Protocol (XMPP): Address Format", RFC 7622, + DOI 10.17487/RFC7622, September 2015, + <http://www.rfc-editor.org/info/rfc7622>. + +9.2. Informative References + + [RFC2778] Day, M., Rosenberg, J., and H. Sugano, "A Model for + Presence and Instant Messaging", RFC 2778, + DOI 10.17487/RFC2778, February 2000, + <http://www.rfc-editor.org/info/rfc2778>. + + [RFC2779] Day, M., Aggarwal, S., Mohr, G., and J. Vincent, "Instant + Messaging / Presence Protocol Requirements", RFC 2779, + DOI 10.17487/RFC2779, February 2000, + <http://www.rfc-editor.org/info/rfc2779>. + + [RFC3860] Peterson, J., "Common Profile for Instant Messaging + (CPIM)", RFC 3860, DOI 10.17487/RFC3860, August 2004, + <http://www.rfc-editor.org/info/rfc3860>. + + [RFC4480] Schulzrinne, H., Gurbani, V., Kyzivat, P., and J. + Rosenberg, "RPID: Rich Presence Extensions to the Presence + Information Data Format (PIDF)", RFC 4480, + DOI 10.17487/RFC4480, July 2006, + <http://www.rfc-editor.org/info/rfc4480>. + + [RFC4825] Rosenberg, J., "The Extensible Markup Language (XML) + Configuration Access Protocol (XCAP)", RFC 4825, + DOI 10.17487/RFC4825, May 2007, + <http://www.rfc-editor.org/info/rfc4825>. + + [RFC7572] Saint-Andre, P., Houri, A., and J. Hildebrand, + "Interworking between the Session Initiation Protocol + (SIP) and the Extensible Messaging and Presence Protocol + (XMPP): Instant Messaging", RFC 7572, + DOI 10.17487/RFC7572, June 2015, + <http://www.rfc-editor.org/info/rfc7572>. + + + + + + +Saint-Andre Standards Track [Page 31] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + + [RFC7573] Saint-Andre, P. and S. Loreto, "Interworking between the + Session Initiation Protocol (SIP) and the Extensible + Messaging and Presence Protocol (XMPP): One-to-One Text + Chat Sessions", RFC 7573, DOI 10.17487/RFC7573, June 2015, + <http://www.rfc-editor.org/info/rfc7573>. + + [RFC7702] Saint-Andre, P., Ibarra, S., and S. Loreto, "Interworking + between the Session Initiation Protocol (SIP) and the + Extensible Messaging and Presence Protocol (XMPP): + Groupchat", RFC 7702, DOI 10.17487/RFC7702, December 2015, + <http://www.rfc-editor.org/info/rfc7702>. + + [XEP-0107] Saint-Andre, P. and R. Meijer, "User Mood", XSF XEP 0107, + October 2008, <http://xmpp.org/extensions/xep-0107.html>. + + [XEP-0108] Meijer, R. and P. Saint-Andre, "User Activity", XSF + XEP 0108, October 2008, + <http://xmpp.org/extensions/xep-0108.html>. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Saint-Andre Standards Track [Page 32] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +Appendix A. Changes from RFC 7248 + + RFC 7248 had already been published when the STOX working group + discovered that a related document (since published as [RFC7702]) + contained problems that also applied to RFC 7248. Specifically, the + diagrams and protocol flows in RFC 7248 contained errors that + reflected an incorrect architecture with gateways on both sides of + the protocol exchange; in theory and in practice, presence traffic + from an XMPP system would be translated by an XMPP-to-SIMPLE gateway + on the XMPP side and received by a normal SIP/SIMPLE system directly + (without a receiving gateway on the SIP/SIMPLE side), and traffic + from a SIP system would be translated by a SIMPLE-to-XMPP gateway on + the SIP side and received by a normal XMPP system (without a + receiving gateway on the XMPP side). + + Therefore, this document makes the following substantive changes from + RFC 7248: + + o Corrects the architectural assumptions, diagrams, and protocol + flows to reflect a single-gateway model in each direction. + + o Adjusts terminology to replace the term "SIP Server" with the term + "SIP Proxy" or "SIP Presence Server" as appropriate, and to use + the term "notification dialog" for a SIP subscription and the term + "presence authorization" for an XMPP subscription instead of the + generic term "subscription" in both contexts. + + o Clarifies that SIP notification dialogs are used to handle + presence authorizations in SIP (e.g., there is no dedicated way to + signal outbound cancellation of an authorization as there is in + XMPP). + + o Clarifies the use of the 'presence.winfo' event package, of the + SIP Subscription-State headers (specifically with values of + "pending", "active", "closed", or "terminated"), and of SIP NOTIFY + messages with no body. + + o Clarifies the durations of notification dialogs and presence + authorizations, and how they are extended in SIP and handled in + XMPP. + + o Removes the mapping of the XMPP 'id' attribute to the SIP "CSeq" + header. + + o Describes the handling of multiple connected resources in XMPP. + + o Provides information about mitigations for leaks of presence + information. + + + +Saint-Andre Standards Track [Page 33] + +RFC 8048 SIP-XMPP Interworking: Presence December 2016 + + +Acknowledgements + + Thanks to the authors, contributors, and other individuals + acknowledged in RFC 7248. + + Thanks to Saul Ibarra Corretge and Markus Isomaki for their reviews + during working group consideration. + + Special thanks to Ben Campbell for identifying the underlying + discrepancy that resulted in the need to obsolete RFC 7248. + + Thanks also to Markus Isomaki and Yana Stamcheva as the working group + chairs and Alissa Cooper as the sponsoring Area Director. + +Author's Address + + Peter Saint-Andre + Filament + + Email: peter@filament.com + URI: https://filament.com/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Saint-Andre Standards Track [Page 34] + |