Internet Engineering Task Force (IETF) P. Saint-Andre Request for Comments: 7702 &yet Category: Standards Track S. Ibarra ISSN: 2070-1721 AG Projects S. Loreto Ericsson December 2015
Interworking between the Session Initiation Protocol (SIP) and the Extensible Messaging and Presence Protocol (XMPP): Groupchat
Abstract
This document defines a bidirectional protocol mapping for the exchange of instant messages in the context of a multi-party chat session among users of the Session Initiation Protocol (SIP) and users of the Extensible Messaging and Presence Protocol (XMPP). Specifically, this document defines a mapping between the SIP-based Message Session Relay Protocol (MSRP) and the XMPP Multi-User Chat (MUC) extension.
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 5741.
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/rfc7702.
Saint-Andre, et al. Standards Track [Page 1]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Copyright Notice
Copyright (c) 2015 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, et al. Standards Track [Page 2]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Table of Contents
1. Introduction ....................................................4 2. Intended Audience ...............................................4 3. Terminology .....................................................5 4. Architectural Assumptions .......................................5 5. Multi-party Messaging Session from XMPP MUC to MSRP .............8 5.1. Enter Room ................................................11 5.2. Set Nickname ..............................................14 5.3. Conference Subscription ...................................14 5.4. Presence Broadcast ........................................15 5.5. Exchange Messages .........................................19 5.5.1. Send a Message to All Occupants ....................19 5.5.2. Send a Private Message .............................21 5.6. Change Nickname ...........................................22 5.7. Invite Another User to a Room .............................23 5.8. Exit Room .................................................25 6. MSRP Multi-party Messaging Session to XMPP MUC .................25 6.1. Enter Room ................................................28 6.2. Presence Broadcast ........................................30 6.3. Exchange Messages .........................................32 6.3.1. Send a Message to All Occupants ....................32 6.3.2. Send a Private Message .............................34 6.4. Change Nickname ...........................................34 6.5. Invite Another User to a Room .............................35 6.6. Exit Room .................................................36 7. Handling of Nicknames and Display Names ........................37 8. Message Size ...................................................38 9. Security Considerations ........................................38 10. References ....................................................39 10.1. Normative References .....................................39 10.2. Informative References ...................................40 Acknowledgements ..................................................42 Authors' Addresses ................................................43
Saint-Andre, et al. Standards Track [Page 3]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Both the Session Initiation Protocol (SIP) [RFC3261] and the Extensible Messaging and Presence Protocol (XMPP) [RFC6120] can be used for the purpose of multi-party text chat over the Internet. To ensure interworking between these technologies, it is important to define bidirectional protocol mappings.
The architectural assumptions underlying such protocol mappings are provided in [RFC7247], including the mapping of addresses and error conditions. This document specifies mappings for multi-party text chat sessions (often called "groupchat"); specifically, this document defines a mapping between the XMPP Multi-User Chat (MUC) extension [XEP-0045] and SIP-based multi-party chat using Message Session Relay Protocol (MSRP) [RFC4975] as specified in [RFC7701].
Both MUC and MSRP contain a large set of features, such as the ability to administer rooms, kick out and ban users, reserve a nickname within a room, change room subject, enable room moderation, and destroy the room. This document covers only a basic subset of groupchat features: joining a room, establishing or changing (but not permanently registering) a room nickname, modifying presence information within the room, sending a message to all participants, sending a private message to a single participant, inviting another user to the room, and leaving the room. Future documents might define mappings for additional features beyond this set.
The documents in this series are intended for use by software developers who have an existing system based on one of these technologies (e.g., SIP), and who 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 groupchat-related specifications:
A number of technical terms used here are defined in [RFC3261], [RFC4975], [RFC6120], and [XEP-0045].
In flow diagrams, MSRP traffic is shown using arrows such as "%%%>", SIP traffic is shown using arrows such as "***>", XMPP traffic is shown using arrows such as "...>".
In protocol flows and examples, provisional SIP responses have been elided for the sake of brevity.
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].
XMPP and MSRP differ in their assumptions regarding groupchat traffic. In XMPP, a message of type "groupchat" is just another stanza and is handled directly by an XMPP server or routed to an associated server component for multi-user chat. By contrast, sessions (including groupchat sessions) in MSRP are considered to be a type of media (similar to audio/video sessions): signaling to set up, manage, and tear down the session is handled by a "conference focus" [RFC4353] (here we assume via SIP), but the session data itself is handled by a separate entity called an MSRP switch. How the conference focus and MSRP switch communicate is a matter of implementation and deployment.
An architectural diagram for a possible gateway deployment is shown below, where the entities have the following significance:
o romeo@example.org -- a SIP user.
o romeo@example.org;gr=dr4hcr0st3lup4c -- a particular endpoint associated with the SIP user.
o example.org -- a SIP proxy with an associated SIP-to-XMPP gateway ("S2X GW") to XMPP.
o chat.example.org -- a SIP-based conference focus and MSRP switch with an associated MSRP-to-SIP gateway ("M2X GW") to XMPP.
o montague@chat.example.org -- a conference at an MSRP switch; not shown in diagram.
Saint-Andre, et al. Standards Track [Page 5]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
o juliet@example.com -- an XMPP user.
o juliet@example.com/yn0cl4bnw0yr3vym -- a particular endpoint associated with the XMPP user.
o example.com -- an XMPP server with an associated XMPP-to-SIP gateway ("X2S GW") to SIP and an XMPP-to-MSRP gateway ("X2M GW") to MSRP.
o rooms.example.com -- an XMPP MUC service associated with example.com.
o capulet@rooms.example.com -- a chat room at an XMPP MUC service; not shown in diagram.
These are logical entities, and several of them might be co-located in the same physical entity. For example, the SIP conference focus and MSRP switch and associated gateways, or the XMPP server and MUC service and associated gateways, might be part of the same deployed code. In addition, it is likely that an XMPP service would not have separate gateways for XMPP-to-SIP translation and XMPP-to-MSRP translation, but would instead have a single gateway.
Saint-Andre, et al. Standards Track [Page 6]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
In SIP, there is no necessity for a SIP user such as romeo@example.org to make use of his SIP proxy in order to join a chat room on the XMPP network; for example, he could try to directly find a SIP service at example.com or independently locate a SIP-to- XMPP gateway. Although, as a simplifying assumption, this document shows the more expected path of using one's "home" SIP proxy and shows gateways as associated with the sending domain, nothing in this document ought to be construed as discouraging other deployment architectures or communication paths (e.g., services hosting their own inbound gateways).
5. Multi-party Messaging Session from XMPP MUC to MSRP
This section describes how to map an XMPP MUC session to an MSRP Multi-party Messaging session. The following diagram outlines the overall protocol flow of a sample session, which includes some optional exchanges (such as sending messages, changing a nickname, and inviting another user).
As defined in the XMPP Multi-User Chat (MUC) specification [XEP-0045], when an XMPP user (say, "juliet@example.com") wants to join a groupchat room (say, "montague@chat.example.org"), she sends a directed <presence/> stanza [RFC6121] to that chat room. In her request she also specifies the nickname she wants to use within the room (say, "JuliC"); in XMPP this room nickname is the resourcepart of an occupant JID (thus "montague@chat.example.org/JuliC"). The joining client signals its ability to speak the multi-user chat protocol by including in the initial presence stanza an empty <x/> element qualified by the 'http://jabber.org/protocol/muc' namespace.
Upon receiving such a presence stanza, 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]. Here we assume that the XMPP server has determined the domain is serviced by a SIP server, that it contains or has available to it an XMPP-to-SIP gateway or connection manager (which enables it to speak natively to SIP servers), and that it hands off the presence stanza to the XMPP-to-SIP gateway.
Because a multi-user chat service accepts the presence stanza shown above as a request to enter a room, the XMPP-to-SIP gateway transforms it into a SIP INVITE request.
Saint-Andre, et al. Standards Track [Page 11]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Here the Session Description Protocol (SDP) offer specifies the XMPP- to-MSRP gateway on the XMPP side (in the SDP 'path' attribute specified in [RFC4975]) as well as other particulars of the session.
There is no direct mapping for the MSRP URIs. In fact, an MSRP URI identifies a session of instant messages at a particular device; it is ephemeral and has no meaning outside the scope of that session. The authority component of the MSRP URI here MUST contain the XMPP-to-MSRP gateway hostname or numeric IP address (as well as, in accordance with [RFC4975], an explicit port number).
The mapping of XMPP syntax elements to SIP and [RFC4566] syntax elements MUST be as shown in the following table.
Table 1: Message Syntax Mapping from XMPP to SIP/SDP
+-----------------------------+-----------------------------+ | XMPP Element or Attribute | SIP Header or SDP Contents | +-----------------------------+-----------------------------+ | from | From | | to (without the /nick) | To | +-----------------------------+-----------------------------+
As shown in the foregoing example and described in [RFC7247], the XMPP-to-SIP gateway MUST map the bare JID ("localpart@domainpart") of the XMPP sender to the SIP From header and include the resourcepart of the full JID as the Globally Routable User Agent URI (GRUU)
Saint-Andre, et al. Standards Track [Page 12]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
portion [RFC5627] of the SIP URI. However, note that a SIP response uses the same From and To as in the SIP request, whereas an XMPP response swaps the from and to attributes.
Here we assume that the SIP conference focus accepts the session establishment. The Contact header field of the SIP 200 OK response includes the 'isfocus' feature tag specified in [RFC4353] along with other relevant feature tags. The conference focus also includes an answer session description that acknowledges the choice of media, specifies the MSRP URI of the switch (in the 'path' attribute specified in [RFC4975]), and contains the extensions specified in [RFC7701].
Example 3: Chat Room Accepts Session Establishment (F4)
In accordance with [RFC4975], the gateway sends a bodiless MSRP message (F6) to the switch immediately upon establishing the connection, and the switch acknowledges that message (F7).
Saint-Andre, et al. Standards Track [Page 13]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
If the chat room server accepted the session, the XMPP-to-MSRP gateway sets up the nickname as received in the presence stanza (i.e., the resourcepart of the 'to' address, such as "JuliC" in "montague@chat.example.org/JuliC"). This is done using the extension specified in [RFC7701].
As mentioned in [RFC7701], the joining user will typically also subscribe to a conference event package (see [RFC4575] and [RFC6502]) at the focus. Although such a subscription is not required by [RFC7701] in practice the temporary and context-dependent presence subscriptions and room rosters involved in joining an XMPP MUC room are best mapped to the conference event package.
Saint-Andre, et al. Standards Track [Page 14]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Example 7: Gateway Subscribes to the Conference (F10)
If the conference focus accepts the request to enter a room, the XMPP user expects to receive back presence information from all the existing occupants of the room. To make this happen, the XMPP-to-SIP gateway subscribes to the conference event package [RFC4575] at the focus.
When the conference event package subscription is completed, the focus sends to the XMPP-to-SIP gateway a NOTIFY request containing the presence information of all the existing occupants, represented using the format defined in [RFC4575].
Saint-Andre, et al. Standards Track [Page 15]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Example 9: Conference Focus Sends Presence Information (F12)
The syntax mapping from the RFC 4575 payload to the XMPP participant list MUST be as shown in the following table. (Mappings for elements not mentioned are undefined.)
Table 2: Participant list mapping
+--------------------------------+-----------------------------+ | RFC 4575 Element or Attribute | XMPP Element or Attribute | +--------------------------------+-----------------------------+ | <conference-info/> 'entity' | room JID | | <subject/> | room subject | | <user/> 'entity' | occupant JID | | <display-text/> | participant nickname | | <endpoint/> 'entity' | occupant JID | | <user/> 'associated-aors' | user full JID (if avail.) | +--------------------------------+-----------------------------+
Saint-Andre, et al. Standards Track [Page 17]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Upon receiving such a response, the XMPP-to-SIP gateway sends a SIP 200 OK response to the conference focus (example not shown) and translates the participant list into a series of XMPP presence stanzas.
Example 10: XMPP Mapping of Chat Room Presence (F14)
The mapping of SIP and [RFC4575] payload syntax elements to XMPP syntax elements MUST be as shown in the following table. (Mappings for elements not mentioned are undefined.)
Saint-Andre, et al. Standards Track [Page 18]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Table 3: Message Syntax Mapping from SIP to XMPP
+---------------------------------+-----------------------------+ | SIP Header or RFC 4575 Contents | XMPP Element or Attribute | +---------------------------------+-----------------------------+ | <user/> 'entity' | from | | To with <display-text> | occupant JID | | <role>participant</role> | role='participant' | | [N/A] | affiliation='none' | +---------------------------------+-----------------------------+
Once the user has joined the chat room, the user can exchange an unbounded number of messages, both public and private.
The mapping of XMPP syntax elements to MSRP syntax elements MUST be as shown in the following table. (Mappings for elements not mentioned are undefined.)
Table 4: Message Syntax Mapping from XMPP Message to MSRP
+-----------------------------+-----------------------------+ | XMPP Element or Attribute | CPIM Header | +-----------------------------+-----------------------------+ | to | To | | from | From | | <body/> | body of the SEND request | +-----------------------------+-----------------------------+
When Juliet wants to sends a message to all other occupants in the room, she sends a message of type "groupchat" to the <room@service> itself (in our example, <montague@chat.example.org>).
The following examples show an exchange of a public message.
Example 12: Juliet Sends Message to All Occupants (F16)
Upon receiving the SEND request, if the request either contains a Failure-Report header field value of "yes" or does not contain a Failure-Report header at all, the MSRP switch immediately generates and sends a response.
Since an XMPP MUC room could be moderated and an XMPP user cannot be sure whether her message has been accepted without receiving it back from the server, [XEP-0045] states that the sender needs to receive a reflected copy of the message it sent. So, in this scenario, the XMPP-to-MSRP gateway has to reflect the message back to the sender. This procedure only applies to XMPP endpoints.
Example 15: Gateway Reflects Message to XMPP User (F19)
Since each occupant has a unique JID, Juliet can send a "private message" to a selected occupant through the service by sending a message to the user's occupant JID. The XMPP message type ought to be "chat" (and is not allowed to be "groupchat").
The following examples show an exchange of a private message.
After acknowledging the message by sending an MSRP 200 OK message (step F22, not shown), the MSRP switch is responsible for sending the message to the intended recipient. When doing so, it modifies the From header to the sender's address within the chat room.
Saint-Andre, et al. Standards Track [Page 21]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Example 18: Switch Sends Private Message to SIP User
Note: If an XMPP-to-MSRP gateway has support for private messaging, it MUST advertise that fact by adding a "private-messages" value to the a=chatroom SDP attribute it sends to the conference focus, as specified in [RFC7701].
So far we have assumed that the requested nickname did not conflict with any existing nicknames. The following text describes the handling of a nickname conflict.
The MSRP switch analyzes the existing allocation of nicknames, and detects that the nickname proposal is already provided to another participant. In this case, the MSRP switch answers with a 425 response.
Saint-Andre, et al. Standards Track [Page 22]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Example 20: MSRP Switch Does Not Accept Nickname Proposal (F25)
Upon receiving such a response, the XMPP-to-MSRP gateway translates it into an XMPP presence stanza of type "error", specifying a <conflict/> error condition (which implies that the XMPP client will then need to choose another nickname and repeat the process of joining).
Alternatively, the gateway might generate a new nickname request on behalf of the XMPP user, thus shielding the XMPP client from handling the conflict error.
In XMPP, there are two methods for inviting another user to a room: direct invitations [XEP-0249] (sent directly from the user's real JID outside the room to the invitee's real JID) and mediated invitations (sent through the room from the user's occupant JID to the invitee's JID). In this document, we cover mediated invitations only.
For example, if Juliet decides to invite Benvolio to the room, she sends a message stanza with an invite and Benvolio's JID (which could be his real JID or an occupant JID in another room).
Saint-Andre, et al. Standards Track [Page 23]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Example 22: Juliet Invites Benvolio to the Room (F27)
The XMPP-to-SIP gateway then sends a SIP REFER request to the conference focus indicating who needs to be invited in the Refer-To header, as per Section 5.5 of [RFC4579].
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Note: Implementers might want to be aware that several recently published specifications modify the way in which REFER requests handle SIP notifications (see [RFC7647] and [RFC7614]).
If Juliet decides to exit the chat room, her client sends a directed presence stanza of type "unavailable" to the occupant JID she is currently using in the room (here <montague@chat.example.org/JuliC>).
Upon receiving such a stanza, the XMPP-to-SIP gateway terminates the SIP session by sending a SIP BYE to the conference focus and the conference focus responds with a SIP 200 OK (steps F32 and F33, not shown).
Juliet can include a custom exit message in the presence stanza of type "unavailable", in which case it is broadcast to other participants using the methods described above.
Example 26: Juliet Exits the Chat Room (F31)
| <presence from='juliet@example.com/yn0cl4bnw0yr3vym' | to='montague@chat.example.org/JuliC' | type='unavailable'> | <status>O, look! methinks I see my cousin's ghost</status> | </presence>
This section describes how to map a Multi-party Instant Message (IM) MSRP session to an XMPP MUC session. As before, the following diagram outlines the overall protocol flow of a sample session, which includes some optional exchanges (such as sending messages, changing nickname, and inviting another user).
Saint-Andre, et al. Standards Track [Page 25]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
If the XMPP presence stanza is received before the SIP SUBSCRIBE dialog is established for the conference event, then the server SHOULD cache the participant list until the subscription is established and delivered in a SIP NOTIFY request.
When the SIP user ("Romeo") wants to join a groupchat room ("capulet"), he first has to start the SIP session by sending out a SIP INVITE request containing an offered session description that includes an MSRP media line accompanied by mandatory 'path' and 'chatroom' attributes. Here we assume that Romeo's user agent has been configured to be aware of an MSRP switch (chat.example.org) it can use. The MSRP media line is also accompanied by an 'accept- types' attribute specifying support for a Message/CPIM [RFC3862] top- level wrapper for the MSRP message.
Upon receiving the INVITE, the SIP proxy needs to determine the identity of the domain portion of the Request-URI or To header, which it does by following the procedures discussed in [RFC7247]. Here we assume that the SIP proxy has determined that the domain is serviced by an XMPP server, that it contains or has available to it a SIP-to- XMPP gateway or connection manager (which enables it to speak natively to XMPP servers), and that it hands off the message to the gateway.
Implementations MAY wait until the nickname is set with an MSRP NICKNAME chunk before joining the XMPP MUC or MAY choose a temporary nickname (such as the SIP From header display name) and use it to join the room. Here we assume the latter.
Saint-Andre, et al. Standards Track [Page 28]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Example 28: SIP-to-XMPP Gateway ACKs Session (F36)
If the MUC service is able to add the SIP/MSRP user to the room, it sends presence from all the existing occupants' room JIDs to the new occupant's full JID, including extended presence information about roles in an <x/> element.
Example 31: XMPP Service Sends Presence from Existing Occupants to New Occupant (F41)
Upon receiving these presence stanzas, if the conference focus has already completed the subscription to the conference event package [RFC4575], the XMPP-to-SIP gateway translates them into a SIP NOTIFY request containing the participant list (represented in the conference-info format specified in [RFC4575]).
Saint-Andre, et al. Standards Track [Page 30]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Example 32: SIP Mapping of XMPP Participant Presence Stanzas (F42)
Because the "room roster" is communicated in XMPP by means of multiple presence stanzas (one for each participant) whereas the participant list is communicated in SIP by means of a single conference information document, the SIP-to-XMPP gateway will need to keep track of the user's SIP URI and the mapping of that URI into an XMPP address; then, based on that mapping, it will need to determine when it has received a complete room roster from the MUC room, i.e., when it has received the in-room presence of the SIP user (which according to [XEP-0045] is the last presence stanza received in the initial batch sent after joining). Once that happens, the SIP-to- XMPP gateway can construct the conference information document containing the complete participant list and send that to the SIP user.
Once the user has joined the chat room, the user can exchange an unbounded number of messages, both public and private.
The mapping of MSRP syntax elements to XMPP syntax elements MUST be as shown in the following table. (Mappings for elements not mentioned are undefined.)
Table 5: Message Syntax Mapping from MSRP Message to XMPP
+-----------------------------+-----------------------------+ | CPIM Header |XMPP Element or Attribute | +-----------------------------+-----------------------------+ | To | to | | From | from | | body of the SEND request | <body/> | +-----------------------------+-----------------------------+
When Romeo wants to send a message to all other occupants in the room, he sends an MSRP SEND request to <room@service> (<capulet@rooms.example.com> in our example).
Saint-Andre, et al. Standards Track [Page 32]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
The following examples show an exchange of a public message.
Example 33: Romeo Sends a Message to the Chat Room (F44)
Upon receiving the SEND request, if the request either contains a Failure-Report header field value of "yes" or does not contain a Failure-Report header at all, the SIP-to-XMPP gateway immediately translates it into an XMPP message stanza and then generates and sends an MSRP response.
Note well that the XMPP MUC room will reflect the sender's message back to all users, including the sender. The MSRP-to-XMPP gateway SHOULD wait until receiving this reflected message before sending an MSRP 200 OK reply to the original sender.
Saint-Andre, et al. Standards Track [Page 33]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
If Romeo decides to change his nickname within the room, he sends a new MSRP NICKNAME request. In fact, modification of the nickname in MSRP is not different from the initial reservation and usage of a nickname.
Saint-Andre, et al. Standards Track [Page 34]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
The XMPP server will analyze the nickname allocation and determine if the requested nickname is available. In case the nickname is not available or not usable, the server will generate a presence stanza of type "error" specifying a <conflict/> error condition.
Example 40: XMPP Conflict Error for Nickname (F53)
If a SIP user wants to invite another user to join the conference he will send a REFER request indicating who needs to be invited in the Refer-To header, as per Section 5.5 of [RFC4579].
Saint-Andre, et al. Standards Track [Page 35]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
The SIP-to-XMPP gateway then acknowledges the SIP REFER request with a 200 OK response (step F56).
The gateway will then send a NOTIFY request as per [RFC3515] indicating that the invitation is in progress. Since there is no way to know the progress of the invitation until the user has joined, implementations are advised to terminate the REFER dialog subscription upon receiving the first NOTIFY request, with a status code of 100 Trying.
Example 43: Progress Notification for Invitation (F56)
Upon receiving the SIP BYE, the SIP-to-XMPP gateway translates it into a presence stanza of type "unavailable" (F60) and sends it to the XMPP MUC room service. Then, the SIP-to-XMPP gateway responds with a 200 OK to the MSRP user (F62).
Fundamental rules for mapping addresses between XMPP and SIP are provided in [RFC7247]. However, chat rooms include a more specialized, unique identifier for each participant in a room, called a "nickname". Implementations SHOULD apply the rules for preparation and comparison of nicknames specified in [RFC7700].
In addition to nicknames, some groupchat implementations also include display names (which might or might not be different from users' nicknames). A display name need not be unique within the context of a room but instead simply provides a user-friendly name for a participant.
In the SIP conference event package, the nickname is the value of the Centralized Conferencing (XCON) 'nickname' attribute of the <user/> element [RFC6501] and the display name is the XML character data of the conference-info <display-text/> element [RFC4575]. In XMPP, the nickname is the value of the resourcepart of the occupant JID [XEP-0045] and the display name is the XML character data of the <nick/> element [XEP-0172].
In practice, the <display-text/> element is treated as canonical in SIP implementations, and the <nick/> element is rarely used in XMPP implementations. Therefore, for display purposes, SIP implementations ought to use the <display-text/> element if the XCON
Saint-Andre, et al. Standards Track [Page 37]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
'nickname' attribute is not present, and XMPP implementations ought to use the resourcepart of the occupant JID if the <nick/> element is not present.
If there is a conflict between the SIP nickname and the XMPP nickname, the SIP-to-XMPP or XMPP-to-SIP gateway is responsible for adjusting the nickname to avoid the conflict and for informing the SIP or XMPP client of the unique nickname used to join the chat room.
It is possible for MSRP messages to exceed the size allowed by an XMPP service on the far end of an MSRP-to-XMPP gateway; see [RFC7573] for a discussion of this issue.
This document specifies methods for exchanging groupchat messages through a gateway that translates between SIP and XMPP. Such a gateway MUST be compliant with the minimum security requirements of the protocols for which it translates (i.e., MSRP/SIP and XMPP). The addition of gateways to the security models of MSRP, SIP, and XMPP introduces some new risks. In particular, end-to-end security properties (especially confidentiality and integrity) between user agents that interface through an MSRP-to-XMPP gateway can be provided only if common formats are supported; unfortunately, although [RFC3862] specifies such a format for one-to-one instant messages, the problem of end-to-end security for multi-party messaging has not been solved in a standardized way.
Some of the features that are not addressed by the minimal interoperability baseline defined in this document are relevant to security, such as the ability to administer rooms, kick out and ban users, and enable room moderation. Users needing to take advantage of such features cannot do so through a gateway in a standardized manner and therefore will need to use native clients for the relevant protocol (MSRP or XMPP).
As mentioned in [RFC7572], there are several possible methods for end-to-end encryption of one-to-one instant messages. Unfortunately, because there is no widely deployed method for end-to-end encryption of multi-party instant messages, this document cannot provide a recommendation in this regard.
Saint-Andre, et al. Standards Track [Page 38]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
[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>.
[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>.
Saint-Andre, et al. Standards Track [Page 39]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
[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>.
[RFC6502] Camarillo, G., Srinivasan, S., Even, R., and J. Urpalainen, "Conference Event Package Data Format Extension for Centralized Conferencing (XCON)", RFC 6502, DOI 10.17487/RFC6502, March 2012, <http://www.rfc-editor.org/info/rfc6502>.
[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>.
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
Acknowledgements
Special thanks to Fabio Forno for coauthoring an early draft version of this document and to Ben Campbell for his detailed and insightful reviews.
Thanks also to Dave Crocker, Philipp Hancke, Olle Johansson, Paul Kyzivat, and Matt Ryan for their feedback.
Leif Johansson reviewed the document on behalf of the Security Directorate.
Stephen Farrell, Barry Leiba, Pete Resnick, and Martin Stiemerling provided helpful input during IESG review.
The authors gratefully acknowledge the assistance of Markus Isomaki and Yana Stamcheva as the working group Chairs and Gonzalo Camarillo and Alissa Cooper as the sponsoring Area Directors.
Peter Saint-Andre wishes to acknowledge Cisco Systems, Inc., for employing him during his work on earlier draft versions of this document.
Saint-Andre, et al. Standards Track [Page 42]
RFC 7702 SIP-XMPP Interworking: Groupchat December 2015