summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc7702.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc7702.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc7702.txt')
-rw-r--r--doc/rfc/rfc7702.txt2411
1 files changed, 2411 insertions, 0 deletions
diff --git a/doc/rfc/rfc7702.txt b/doc/rfc/rfc7702.txt
new file mode 100644
index 0000000..ea3cbf3
--- /dev/null
+++ b/doc/rfc/rfc7702.txt
@@ -0,0 +1,2411 @@
+
+
+
+
+
+
+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
+
+
+1. Introduction
+
+ 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.
+
+2. Intended Audience
+
+ 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:
+
+ o Multi-party Chat Using MSRP [RFC7701]
+
+ o Multi-User Chat [XEP-0045]
+
+
+
+
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 4]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+3. Terminology
+
+ 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].
+
+4. Architectural Assumptions
+
+ 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
+
+
+ #####################################################################
+ # #
+ # +------------------+ #
+ # &&&&&&&&&&&&&&&&| chat.example.org |<%%%%%%%%%%% #
+ # & &&&&| (MSRP switch) +-----+ % #
+ # & & +---------------| M2X | % #
+ # & & % | GW | % #
+ # & & % +-----+ % #
+ # & & % : % #
+ # & & % ///////////////////////////////////#
+ # & & % / : % #
+ # & & % / : +-----+ #
+ # & & % / : | X2M | #
+ # & & % / : +-------| GW |---+ #
+ # & & % / :.>| +-----+ | #
+ # & & % / | | #
+ # & +------------------+ % / +-----+ | #
+ # & | chat.example.org |<*******/*| X2S | example.com | #
+ # & | (conference | % **/*| GW | (XMPP server) | #
+ # & | focus) +-----+ % * / +-----+ | #
+ # & +------------| S2X | % * / | +-------------------+ #
+ # & * | GW |......*./....>| | rooms.example.com | #
+ # & * +-----+ % * / +-----| (MUC service) | #
+ # & * % * / ^ : +-------------------+ #
+ # & +---------------+ % * / : : #
+ # &&| example.org |<********* / : : #
+ # | (SIP proxy) +-----+ % / : : #
+ # +-------------| S2X | % / : : #
+ # * | GW |......./........ : #
+ # * +-----+ % / : #
+ # * % / : #
+ # romeo@example.org / juliet@example.com #
+ # ;gr=dr4hcr0st3lup4c / /yn0cl4bnw0yr3vym #
+ # / #
+ # --SIP/MSRP DOMAIN-- / --XMPP DOMAIN-- #
+ # / #
+ #####################################################################
+
+ Legend:
+ . = XMPP
+ % = MSRP
+ * = SIP
+ & = unstandardized communication paths
+ / = separation of administrative domains
+
+ Figure 1: Logical Deployment Architecture
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 7]
+
+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).
+
+ XMPP XMPP SIP MSRP
+ User Server Conference Switch
+ | + X2S GW Focus + M2X GW
+ | & X2M GW + S2X GW |
+ | | | |
+ | (F1) XMPP | | |
+ | enter room | | |
+ |................>| | |
+ | | (F2) SIP INVITE | |
+ | |****************>| |
+ | | | (F3) |
+ | | | unstandardized |
+ | | | interaction |
+ | | |<&&&&&&&&&&&&&&&>|
+ | | (F4) SIP 200 OK | |
+ | |<****************| |
+ | | (F5) SIP ACK | |
+ | |****************>| |
+ | | (F6) MSRP SEND (bodiless) |
+ | |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>|
+ | | (F7) MSRP 200 OK |
+ | |<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|
+ | | (F8) MSRP NICKNAME |
+ | |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>|
+ | | (F9) MSRP 200 OK |
+ | |<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 8]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+ | | (F10) SIP | |
+ | | SUBSCRIBE | |
+ | | Event: | |
+ | | conference | |
+ | |****************>| |
+ | | (F11) SIP 200 OK| |
+ | |<****************| |
+ | | (F12) SIP NOTIFY| |
+ | |<****************| |
+ | | (F13) SIP 200 OK| |
+ | |****************>| |
+ | (F14) XMPP | | |
+ | presence | | |
+ |<................| | |
+ | (F15) XMPP | | |
+ | MUC subject | | |
+ |<................| | |
+ . . . .
+ . . . .
+ | (F16) XMPP | | |
+ | groupchat | | |
+ | message | | |
+ |................>| | |
+ | | (F17) MSRP SEND |
+ | |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>|
+ | | (F18) MSRP 200 OK
+ | |<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|
+ | (F19) XMPP | | |
+ | groupchat | | |
+ | message | | |
+ |<................| | |
+ . . . .
+ . . . .
+ | (F20) XMPP | | |
+ | private | | |
+ | message | | |
+ |................>| | |
+ | | (F21) MSRP SEND |
+ | |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>|
+ | | (F22) MSRP 200 OK
+ | |<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|
+ . . . .
+ . . . .
+ | (F23) XMPP | | |
+ | presence: | | |
+ | change nick | | |
+ |................>| | |
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 9]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+ | | (F24) MSRP NICKNAME |
+ | |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>|
+ | | (F25) MSRP 425 Error |
+ | |<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|
+ | (F26) XMPP | | |
+ | presence | | |
+ | error | | |
+ |<................| | |
+ . . . .
+ . . . .
+ | (F27) XMPP | | |
+ | message: | | |
+ | invite | | |
+ |................>| | |
+ | | (F28) SIP | |
+ | | REFER | |
+ | |****************>| |
+ | | (F29) SIP | |
+ | | 200 OK | |
+ | |<****************| |
+ | | (F30) SIP | |
+ | | NOTIFY | |
+ | |<****************| |
+ . . . .
+ . . . .
+ | (F31) XMPP | | |
+ | presence: | | |
+ | exit room | | |
+ |................>| | |
+ | | (F32) SIP BYE | |
+ | |****************>| |
+ | | (F33) SIP | |
+ | | 200 OK | |
+ | |<****************| |
+ | (F34) XMPP | | |
+ | presence | | |
+ | unavailable | | |
+ |<................| | |
+ | | | |
+
+ Detailed protocol flows and mappings are provided in the following
+ sections.
+
+
+
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 10]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+5.1. Enter Room
+
+ 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.
+
+ Example 1: Juliet Enters Room (F1)
+
+ | <presence from='juliet@example.com/yn0cl4bnw0yr3vym'
+ | to='montague@chat.example.org/JuliC'>
+ | <x xmlns='http://jabber.org/protocol/muc'/>
+ | </presence>
+
+ 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
+
+
+ Example 2: SIP Mapping of Room Join (F2)
+
+ | INVITE sip:montague@chat.example.org SIP/2.0
+ | To: <sip:montague@chat.example.org>
+ | From: "Juliet" <sip:juliet@example.com>;tag=786
+ | Contact: <sip:juliet@example.com>;gr=yn0cl4bnw0yr3vym
+ | Call-ID: BC466C1C-E01D-4FD1-B766-9AD174BAF2E7
+ | CSeq: 1 INVITE
+ | Content-Type: application/sdp
+ | Content-Length: ...
+ |
+ | c=IN IP4 x2s.example.org
+ | m=message 7654 TCP/MSRP *
+ | a=accept-types:text/cpim
+ | a=accept-wrapped-types:text/plain text/html
+ | a=path:msrp://x2m.example.com:7654/jshA7weztas;tcp
+ | a=chatroom:nickname private-messages
+
+ 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)
+
+ | SIP/2.0 200 OK
+ | From: "Juliet" <sip:juliet@example.com>;tag=786
+ | To: <sip:montague@chat.example.org>;tag=087js
+ | Call-ID: BC466C1C-E01D-4FD1-B766-9AD174BAF2E7
+ | CSeq: 1 INVITE
+ | Contact: <sip:montague@chat.example.org;transport=tcp>;isfocus
+ | Content-Type: application/sdp
+ | Content-Length: ...
+ |
+ | v=0
+ | c=IN IP4 example.org
+ | s=-
+ | m=message 12763 TCP/MSRP *
+ | a=accept-types:message/cpim
+ | a=accept-wrapped-types:text/plain text/html
+ | a=path:msrp://chat.example.org:12763/kjhd37s2s20w2a;tcp
+ | a=chatroom:nickname private-messages
+
+ Upon receiving such a response, the XMPP-to-SIP gateway sends a SIP
+ ACK to the conference focus on behalf of the joining user.
+
+ Example 4: Gateway Sends ACK to Conference Focus (F5)
+
+ | ACK sip:montague@chat.example.org SIP/2.0
+ | To: <sip:montague@chat.example.org>;tag=087js
+ | From: "Juliet" <sip:juliet@example.com>;tag=786
+ | Call-ID: BC466C1C-E01D-4FD1-B766-9AD174BAF2E7
+ | CSeq: 2 ACK
+
+ 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
+
+
+5.2. Set Nickname
+
+ 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].
+
+ Example 5: Gateway Sets Up Nickname (F8)
+
+ | MSRP a786hjs2 NICKNAME
+ | To-Path: msrp://montague@chat.example.org:12763/kjhd37s2s20w2a;tcp
+ | From-Path: msrp://x2m.example.com:7654/jshA7weztas;tcp
+ | Use-Nickname: "JuliC"
+ | -------a786hjs2
+
+ The MSRP switch analyzes the existing allocation of nicknames,
+ accepts the nickname proposal, and answers with a 200 response.
+
+ Example 6: MSRP Switch Accepts Nickname Proposal (F9)
+
+ | MSRP a786hjs2 200 OK
+ | To-Path: msrp://x2m.example.com:7654/jshA7weztas;tcp
+ | From-Path: msrp://montague@chat.example.org:12763/kjhd37s2s20w2a
+ | ;tcp
+ | -------a786hjs2
+
+ This section assumes that the nickname request is successful. The
+ error flow resulting from a nickname conflict is described under
+ Section 5.6.
+
+5.3. Conference Subscription
+
+ 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)
+
+ | SUBSCRIBE sip:montague@chat.example.org SIP/2.0
+ | To: <sip:montague@chat.example.org>;tag=087js
+ | From: "Juliet" <sip:juliet@example.com>;tag=786
+ | Contact: <sip:juliet@example.com>;gr=yn0cl4bnw0yr3vym
+ | Call-ID: BC466C1C-E01D-4FD1-B766-9AD174BAF2E7
+ | CSeq: 3 SUBSCRIBE
+ | Event: conference
+ | Expires: 600
+ | Accept: application/conference-info+xml
+ | Allow-Events: conference
+ | Content-Length: 0
+
+ The focus will accept or reject the request based on local policy.
+
+ Example 8: Focus Accepts Subscription Request (F11)
+
+ | SIP/2.0 200 OK
+ | To: <sip:montague@chat.example.org>;tag=087js
+ | From: "Juliet" <sip:juliet@example.com>;tag=786
+ | Call-ID: BC466C1C-E01D-4FD1-B766-9AD174BAF2E7
+ | CSeq: 3 SUBSCRIBE
+ | Contact: <sip:montague@chat.example.org;transport=tcp>;isfocus
+ | Expires: 600
+ | Content-Length: 0
+
+ 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.
+
+5.4. Presence Broadcast
+
+ 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)
+
+ | NOTIFY sip:montague@chat.example.org SIP/2.0
+ | To: "Juliet" <sip:juliet@example.com>;tag=786
+ | From: <sip:montague@chat.example.org>;tag=087js
+ | Call-ID: BC466C1C-E01D-4FD1-B766-9AD174BAF2E7
+ | CSeq: 4 NOTIFY
+ | Event: conference
+ | Subscription-State: active;expires=3600
+ | Content-Type: application/conference-info+xml
+ | Content-Length: ...
+ |
+ | <conference-info version="0" state="full"
+ | entity="sip:3402934234@chat.example.org">
+ | <conference-description>
+ | <subject>Today in Verona</subject>
+ | <conf-uris>
+ | <entry>
+ | <uri>tel:+18882934234</uri>
+ | </entry>
+ | </conf-uris>
+ | </conference-description>
+ | <users>
+ | <user entity="sip:montague@chat.example.org;gr=Romeo"
+ | state="full">
+ | <display-text>Romeo</display-text>
+ | <roles>
+ | <entry>participant</entry>
+ | </roles>
+ | <associated-aors>
+ | <entry>
+ | <uri>xmpp:romeo@example.org/dr4hcr0st3lup4c</uri>
+ | </entry>
+ | </associated-aors>
+ | <endpoint entity="sip:montague@chat.example.org;gr=Romeo"
+ | state="full">
+ | <status>connected</status>
+ | <joining-info>
+ | <when>2013-12-12T10:01:03.691128+01:00</when>
+ | </joining-info>
+ | <media id="211835820">
+ | <type>message</type>
+ | </media>
+ | </endpoint>
+ | </user>
+ | <user entity="sip:montague@chat.example.org;gr=Ben"
+ | state="full">
+ | <display-text>Ben</display-text>
+
+
+
+Saint-Andre, et al. Standards Track [Page 16]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+ | <roles>
+ | <entry>participant</entry>
+ | </roles>
+ | <endpoint entity="sip:montague@chat.example.org;gr=Ben"
+ | state="full">
+ | <status>connected</status>
+ | <media id="211835821">
+ | <type>message</type>
+ | </media>
+ | </endpoint>
+ | </user>
+ | <user entity="sip:montague@chat.example.org;gr=JuliC"
+ | state="full">
+ | <display-text>JuliC</display-text>
+ | <roles>
+ | <entry>participant</entry>
+ | </roles>
+ | <endpoint entity="sip:montague@chat.example.org;gr=JuliC"
+ | state="full">
+ | <status>connected</status>
+ | <media id="211835822">
+ | <type>message</type>
+ | </media>
+ | </endpoint>
+ | </user>
+ | </users>
+ | </conference-info>
+
+ 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)
+
+ | <presence from='montague@chat.example.org/Romeo'
+ | to='juliet@example.com/yn0cl4bnw0yr3vym'>
+ | <x xmlns='http://jabber.org/protocol/muc#user'>
+ | <item affiliation='none' role='participant'/>
+ | </x>
+ | </presence>
+
+ | <presence from='montague@chat.example.org/Ben'
+ | to='juliet@example.com/yn0cl4bnw0yr3vym'>
+ | <x xmlns='http://jabber.org/protocol/muc#user'>
+ | <item affiliation='none' role='participant'/>
+ | </x>
+ | </presence>
+
+ | <presence from='montague@chat.example.org/JuliC'
+ | to='juliet@example.com/yn0cl4bnw0yr3vym'>
+ | <x xmlns='http://jabber.org/protocol/muc#user'>
+ | <item affiliation='none' role='participant'/>
+ | <status code='110'/>
+ | </x>
+ | </presence>
+
+ If the NOTIFY request included a subject, the gateway converts that
+ into a separate XMPP message.
+
+ Example 11: XMPP Mapping of Chat Room Subject (F15)
+
+ | <message from='montague@chat.example.org/mayor'
+ | to='juliet@example.com/yn0cl4bnw0yr3vym'
+ | id='mbh2vd68'>
+ | <subject>Today in Verona</subject>
+ | </message>
+
+ 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' |
+ +---------------------------------+-----------------------------+
+
+5.5. Exchange Messages
+
+ 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 |
+ +-----------------------------+-----------------------------+
+
+5.5.1. Send a Message to All Occupants
+
+ 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)
+
+ | <message from='juliet@example.com/yn0cl4bnw0yr3vym'
+ | to='montague@chat.example.org'
+ | type='groupchat'
+ | id='lzfed24s'>
+ | <body>Who knows where Romeo is?</body>
+ | </message>
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 19]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+ Upon receiving such a message, the XMPP-to-MSRP gateway translates it
+ into an MSRP SEND message.
+
+ Example 13: Gateway Maps XMPP Message to MSRP (F17)
+
+ | MSRP a786hjs2 SEND
+ | To-Path: msrp://chat.example.org:12763/kjhd37s2s20w2a;tcp
+ | From-Path: msrp://x2m.example.com:7654/jshA7weztas;tcp
+ | Message-ID: 87652491
+ | Byte-Range: 1-*/*
+ | Content-Type: message/cpim
+ |
+ | To: <sip:montague@chat.example.org>
+ | From: "Juliet" <sip:juliet@example.com>
+ | DateTime: 2008-10-15T15:02:31-03:00
+ | Content-Type: text/plain
+ |
+ | Who knows where Romeo is?
+ | -------a786hjs2$
+
+ 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.
+
+ Example 14: MSRP Switch Returns 200 OK (F18)
+
+ | MSRP d93kswow 200 OK
+ | To-Path: msrp://x2m.example.com:7654/jshA7weztas;tcp
+ | From-Path: msrp://chat.example.org:12763/kjhd37s2s20w2a;tcp
+ | -------d93kswow$
+
+ 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)
+
+ | <message from='montague@chat.example.org/JuliC'
+ | to='juliet@example.com/yn0cl4bnw0yr3vym'
+ | type='groupchat'
+ | id='ix51z73m'>
+ | <body>Who knows where Romeo is?</body>
+ | </message>
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 20]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+5.5.2. Send a Private Message
+
+ 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.
+
+ Example 16: Juliet Sends Private Message (F20)
+
+ | <message from='juliet@example.com/yn0cl4bnw0yr3vym'
+ | to='montague@chat.example.org/Romeo'
+ | type='chat'
+ | id='6sfln45q'>
+ | <body>O Romeo, Romeo! wherefore art thou Romeo?</body>
+ | </message>
+
+ Upon receiving such a message, the XMPP-to-MSRP gateway translates it
+ into an MSRP SEND message.
+
+ Example 17: Gateway Maps Private Message from XMPP to MSRP (F21)
+
+ | MSRP a786hjs2 SEND
+ | To-Path: msrp://chat.example.org:12763/kjhd37s2s20w2a;tcp
+ | From-Path: msrp://x2m.example.com:7654/jshA7weztas;tcp
+ | Message-ID: 87652491
+ | Byte-Range: 1-*/*
+ | Content-Type: message/cpim
+ |
+ | To: <sip:montague@chat.example.org>;gr=Romeo
+ | From: <sip:juliet@example.org>;gr=yn0cl4bnw0yr3vym
+ | DateTime: 2008-10-15T15:02:31-03:00
+ | Content-Type: text/plain
+ |
+ | O Romeo, Romeo! wherefore art thou Romeo?
+ | -------a786hjs2$
+
+ 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
+
+ | MSRP a786hjs2 SEND
+ | To-Path: msrp://chat.example.org:12763/kjhd37s2s20w2a;tcp
+ | From-Path: msrp://x2m.example.com:7654/jshA7weztas;tcp
+ | Message-ID: 87652491
+ | Byte-Range: 1-*/*
+ | Content-Type: message/cpim
+ |
+ | To: <sip:romeo@example.org>
+ | From: <sip:montague@chat.example.org>;gr=JuliC
+ | DateTime: 2008-10-15T15:02:31-03:00
+ | Content-Type: text/plain
+ |
+ | O Romeo, Romeo! wherefore art thou Romeo?
+ | -------a786hjs2$
+
+ 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].
+
+ | a=chatroom:nickname private-messages
+
+5.6. Change Nickname
+
+ The XMPP user might want to change her nickname. She can do so by
+ sending an updated presence stanza to the room, containing a new
+ nickname.
+
+ Example 19: Juliet Changes Her Nickname (F23)
+
+ | <presence from='juliet@example.com/yn0cl4bnw0yr3vym'
+ | to='montague@chat.example.org/CapuletGirl'/>
+
+ 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)
+
+ | MSRP a786hjs2 425 Nickname usage failed
+ | To-Path: msrp://x2m.example.com:7654/jshA7weztas;tcp
+ | From-Path: msrp://chat.example.org:12763/kjhd37s2s20w2a;tcp
+ | -------a786hjs2
+
+ 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).
+
+ Example 21: Conflict Error for Nickname (F26)
+
+ | <presence from='montague@chat.example.org/JuliC'
+ | to='juliet@example.com/yn0cl4bnw0yr3vym'
+ | type='error'>
+ | <x xmlns='http://jabber.org/protocol/muc'/>
+ | <error type='cancel' by='montague@chat.example.org'>
+ | <conflict xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
+ | </error>
+ | </presence>
+
+ 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.
+
+5.7. Invite Another User to a Room
+
+ 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)
+
+ | <message from='juliet@example.com/yn0cl4bnw0yr3vym'
+ | id='nzd143v8'
+ | to='montague@chat.example.org'>
+ | <x xmlns='http://jabber.org/protocol/muc#user'>
+ | <invite to='benvolio@example.com'/>
+ | </x>
+ | </message>
+
+ 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].
+
+ Example 23: SIP Mapping of Invite (F28)
+
+ | REFER sip:montague@chat.example.org SIP/2.0
+ | To: <sip:montague@chat.example.org>
+ | From: "Juliet" <sip:juliet@example.com>;tag=786
+ | Call-ID: BC466C1C-E01D-4FD1-B766-9AD174BAF2E7
+ | CSeq: 5 REFER
+ | Contact: <sip:juliet@example.com>;gr=yn0cl4bnw0yr3vym
+ | Accept: message/sipfrag
+ | Refer-To: <sip:benvolio@example.com>
+ | Supported: replaces
+ | Content-Length: 0
+
+ The conference focus then acknowledges the SIP REFER request with a
+ 200 OK response (step F29, not shown).
+
+ The progress of the invitation will be tracked by the received NOTIFY
+ requests as per [RFC3515].
+
+ Example 24: Progress Notification for Invitation (F30)
+
+ | NOTIFY sip:juliet@example.com SIP/2.0
+ | To: <sip:juliet@example.com>;tag=786
+ | From: <sip:montague@chat.example.org>;tag=087js
+ | Call-ID: BC466C1C-E01D-4FD1-B766-9AD174BAF2E7
+ | CSeq: 6 NOTIFY
+ | Max-Forwards: 70
+ | Event: refer
+ | Subscription-State: active;expires=60
+ | Contact: <sip:montague@chat.example.org;transport=tcp>;isfocus
+ | Content-Type: message/sipfrag;version=2.0
+ | Content-Length: ...
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 24]
+
+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]).
+
+5.8. Exit Room
+
+ 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>).
+
+ Example 25: Juliet Exits Room (F31)
+
+ | <presence from='juliet@example.com/yn0cl4bnw0yr3vym'
+ | to='montague@chat.example.org/JuliC'
+ | type='unavailable'/>
+
+ 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>
+
+6. MSRP Multi-party Messaging Session to XMPP MUC
+
+ 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
+
+
+ SIP SIP MSRP XMPP
+ User Proxy Switch Server
+ | + S2X GW + M2X GW +X2S GW
+ | | | +X2M GW
+ | | | |
+ | (F35) SIP | | |
+ | INVITE | | |
+ |****************>| | |
+ | (F36) SIP | | |
+ | 200 OK | | |
+ |<****************| | |
+ | (F37) SIP ACK | | |
+ |****************>| | |
+ | (F38) SIP | | |
+ | SUBSCRIBE | | |
+ | Event: | | |
+ | conference | | |
+ |****************>| | |
+ | (F39) SIP | | |
+ | 200 OK | | |
+ |<****************| | |
+ | | (F40) XMPP presence: enter room |
+ | |..................................>|
+ | | (F41) XMPP presence |
+ | |<..................................|
+ | (F42) SIP | | |
+ | NOTIFY | | |
+ |<****************| | |
+ | (F43) SIP | | |
+ | 200 OK | | |
+ |****************>| | |
+ . . . .
+ . . . .
+ | (F44) MSRP SEND | |
+ |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>| |
+ | | | (F45) XMPP |
+ | | | groupchat |
+ | | | message |
+ | | |................>|
+ | | | (F46) XMPP |
+ | | | groupchat |
+ | | | message |
+ | | |<................|
+ | (F47) MSRP 200 OK | |
+ |<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| |
+ . . . .
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 26]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+ . . . .
+ | (F48) MSRP SEND | |
+ |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>| |
+ | (F49) MSRP 200 OK | |
+ |<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| |
+ | | | (F50) XMPP |
+ | | | message |
+ | | |................>|
+ . . . .
+ . . . .
+ | (F51) MSRP NICKNAME | |
+ |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>| |
+ | | | (F52) XMPP |
+ | | | presence |
+ | | |................>|
+ | | | (F53) XMPP |
+ | | | presence |
+ | | | error |
+ | | |<................|
+ | (F54) MSRP 425 Error | |
+ |<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| |
+ . . . .
+ . . . .
+ | (F55) SIP REFER | | |
+ |****************>| | |
+ | (F56) SIP | | |
+ | 200 OK | | |
+ |<****************| | |
+ | (F57) SIP | | |
+ | NOTIFY | | |
+ |<****************| | |
+ | | (F58) XMPP message invite |
+ | |..................................>|
+ . . . .
+ . . . .
+ | (F59) SIP BYE | | |
+ |****************>| | |
+ | | (F60) XMPP presence unavailable |
+ | |..................................>|
+ | | (F61) XMPP presence unavailable |
+ | |<..................................|
+ | (F62) SIP | | |
+ | 200 OK | | |
+ |<****************| | |
+ | | | |
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 27]
+
+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.
+
+6.1. Enter Room
+
+ 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.
+
+ Example 27: SIP User Starts Session (F35)
+
+ | INVITE sip:capulet@rooms.example.com SIP/2.0
+ | From: "Romeo" <sip:romeo@example.org>;tag=43524545
+ | To: <sip:capulet@rooms.example.com>
+ | Contact: <sip:romeo@example.org>;gr=dr4hcr0st3lup4c
+ | Call-ID: 08CFDAA4-FAED-4E83-9317-253691908CD2
+ | CSeq: 1 INVITE
+ | Content-Type: application/sdp
+ | Content-Length: ...
+ |
+ | c=IN IP4 s2x.example.org
+ | m=message 7313 TCP/MSRP *
+ | a=accept-types:message/cpim text/plain text/html
+ | a=accept-wrapped-types:text/plain text/html
+ | a=path:msrp://chat.example.org:7313/ansp71weztas;tcp
+ | a=chatroom:nickname private-messages
+
+ 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)
+
+ | SIP/2.0 200 OK
+ | From: "Romeo" <sip:romeo@example.org>;tag=43524545
+ | To: <sip:capulet@rooms.example.com>;tag=a3343df32
+ | Contact: <sip:rooms.example.com;transport=tcp>;isfocus
+ | Call-ID: 08CFDAA4-FAED-4E83-9317-253691908CD2
+ | CSeq: 1 INVITE
+ | Content-Type: application/sdp
+ |
+ | m=message 8763 TCP/MSRP *
+ | a=accept-types:message/cpim text/plain text/html
+ | a=accept-wrapped-types:text/plain text/html
+ | a=path:msrp://chat.example.org:8763/lkjh37s2s20w2a;tcp
+ | a=chatroom:nickname private-messages
+
+ The SIP/MSRP user agent subscribes to a conference event package at
+ the destination groupchat service.
+
+ Example 29: Gateway Subscribes to the Conference (F38)
+
+ | SUBSCRIBE sip:capulet@rooms.example.com SIP/2.0
+ | To: <sip:capulet@rooms.example.com>;tag=a3343df32
+ | From: "Romeo" <sip:romeo@example.org>;tag=43524545
+ | Contact: <sip:romeo@example.org>;gr=dr4hcr0st3lup4c
+ | Call-ID: 08CFDAA4-FAED-4E83-9317-253691908CD2
+ | CSeq: 2 SUBSCRIBE
+ | Event: conference
+ | Expires: 600
+ | Accept: application/conference-info+xml
+ | Allow-Events: conference
+ | Content-Length: 0
+
+ After the conference subscription request is acknowledged, the SIP-
+ to-XMPP gateway sends presence from Romeo to the MUC chat room.
+
+ Example 30: Romeo Enters XMPP Chat Room (F40)
+
+ | <presence from='romeo@example.org/dr4hcr0st3lup4c'
+ | to='montague@chat.example.org/Romeo'>
+ | <x xmlns='http://jabber.org/protocol/muc'/>
+ | </presence>
+
+
+
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 29]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+6.2. Presence Broadcast
+
+ 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)
+
+ | <presence from='capulet@rooms.example.com/Romeo'
+ | to='romeo@example.org/dr4hcr0st3lup4c'>
+ | <x xmlns='http://jabber.org/protocol/muc#user'>
+ | <item affiliation='none' role='participant'/>
+ | <status code='110'/>
+ | </x>
+ | </presence>
+ |
+ | <presence from='capulet@rooms.example.com/Ben'
+ | to='romeo@example.org/dr4hcr0st3lup4c'>
+ | <x xmlns='http://jabber.org/protocol/muc#user'>
+ | <item affiliation='none' role='participant'/>
+ | </x>
+ | </presence>
+ |
+ | <presence from='capulet@rooms.example.com/JuliC'
+ | to='romeo@example.org/dr4hcr0st3lup4c'>
+ | <x xmlns='http://jabber.org/protocol/muc#user'>
+ | <item affiliation='none' role='participant'/>
+ | </x>
+ | </presence>
+
+ 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)
+
+ | NOTIFY sip:romeo@example.org SIP/2.0
+ | To: <sip:romeo@example.org>;tag=43524545
+ | From: <sip:capulet@rooms.example.com>;tag=a3343df32
+ | Call-ID: 08CFDAA4-FAED-4E83-9317-253691908CD2
+ | CSeq: 3 NOTIFY
+ | Event: conference
+ | Subscription-State: active;expires=3600
+ | Content-Type: application/conference-info+xml
+ | Content-Length: ...
+ |
+ | <conference-info version="0" state="full"
+ | entity="sip:capulet@rooms.example.com">
+ | <conference-description>
+ | <subject>Today in Verona</subject>
+ | <conf-uris>
+ | <entry>
+ | <uri>tel:+18882934234</uri>
+ | <uri>sip:capulet@rooms.example.com</uri>
+ | </entry>
+ | </conf-uris>
+ | </conference-description>
+ | <users>
+ | <user entity="sip:capulet@rooms.example.com;gr=JuliC"
+ | state="full">
+ | <display-text>JuliC</display-text>
+ | <roles>
+ | <entry>participant</entry>
+ | </roles>
+ | <endpoint entity="sip:capulet@rooms.example.com;gr=JuliC"
+ | state="full">
+ | <status>connected</status>
+ | <media id="211835821">
+ | <type>message</type>
+ | </media>
+ | </endpoint>
+ | </user>
+ | <user entity="sip:capulet@rooms.example.com;gr=Ben"
+ | state="full">
+ | <display-text>Ben</display-text>
+ | <roles>
+ | <entry>participant</entry>
+ | </roles>
+ | <endpoint entity="sip:capulet@rooms.example.com;gr=Ben"
+ | state="full">
+ | <status>connected</status>
+ | <media id="211835822">
+
+
+
+Saint-Andre, et al. Standards Track [Page 31]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+ | <type>message</type>
+ | </media>
+ | </endpoint>
+ | </user>
+ | </users>
+ | </conference-info>
+
+ 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.
+
+6.3. Exchange Messages
+
+ 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/> |
+ +-----------------------------+-----------------------------+
+
+6.3.1. Send a Message to All Occupants
+
+ 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)
+
+ | MSRP a786hjs2 SEND
+ | To-Path: msrp://room.example.com:7313/ansp71weztas;tcp
+ | From-Path: msrp://chat.example.org:8763/lkjh37s2s20w2a;tcp
+ | Message-ID: 87652492
+ | Byte-Range: 1-*/*
+ | Content-Type: message/cpim
+ |
+ | To: <sip:capulet@rooms.example.com>
+ | From: "Romeo" <sip:romeo@example.org>;gr=dr4hcr0st3lup4c
+ | DateTime: 2008-10-15T15:02:31-03:00
+ | Content-Type: text/plain
+ |
+ | Romeo is here!
+ | -------a786hjs2$
+
+ 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.
+
+ Example 34: XMPP Mapping of Message (F45)
+
+ | <message from='romeo@example.org/dr4hcr0st3lup4c'
+ | to='capulet@rooms.example.com'
+ | type='groupchat'
+ | id='8gbx1g4p'>
+ | <body>Romeo is here!</body>
+ | </message>
+
+ Example 35: MSRP Response to Public Message (F47)
+
+ | MSRP d93kswow 200 OK
+ | To-Path: msrp://rooms.example.com:8763/lkjh37s2s20w2a;tcp
+ | From-Path: msrp://chat.example.org:7313/ansp71weztas;tcp
+ | -------d93kswow$
+
+ 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
+
+
+6.3.2. Send a Private Message
+
+ Romeo can send a "private message" to a selected occupant via the
+ chat room service by sending a message to the occupant's room
+ nickname.
+
+ The following examples show an exchange of a private message.
+
+ Example 36: Romeo Sends a Private Message (F48)
+
+ | MSRP a786hjs2 SEND
+ | To-Path: msrp://rooms.example.com:7313/ansp71weztas;tcp
+ | From-Path: msrp://chat.example.org:8763/lkjh37s2s20w2a;tcp
+ | Message-ID: 87652492
+ | Byte-Range: 1-*/*
+ | Content-Type: message/cpim
+ |
+ | To: <sip:capulet@rooms.example.com>;gr=JuliC
+ | From: "Romeo" <sip:romeo@example.org>;gr=dr4hcr0st3lup4c
+ | DateTime: 2008-10-15T15:02:31-03:00
+ | Content-Type: text/plain
+ |
+ | I am here!!!
+ | -------a786hjs2$
+
+ The MSRP switch is responsible for transforming the 'From' address
+ into an in-room address (not shown).
+
+ Once the MSRP switch sends that message to the gateway, the gateway
+ is responsible for translating it into XMPP syntax.
+
+ Example 37: XMPP Mapping of Private Message (F50)
+
+ | <message from='capulet@rooms.example.com/Romeo'
+ | to='capulet@rooms.example.com/JuliC'
+ | type='chat'
+ | id='rg2ca9k7'>
+ | <body>I am here!!!</body>
+ | </message>
+
+6.4. Change Nickname
+
+ 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
+
+
+ Example 38: MSRP User Changes Nickname (F51)
+
+ | MSRP a786hjs2 NICKNAME
+ | To-Path: msrp://chat.example.org:7313/ansp71weztas;tcp
+ | From-Path: msrp://rooms.example.com:8763/lkjh37s2s20w2a;tcp
+ | Use-Nickname: "montecchi"
+ | -------a786hjs2
+
+ Upon receiving such a message, the MSRP-to-XMPP gateway translates it
+ into an XMPP presence stanza.
+
+ Example 39: XMPP Mapping of Nickname Change (F52)
+
+ | <presence from='romeo@example.org/dr4hcr0st3lup4c'
+ | to='capulet@rooms.example.com/montecchi'/>
+
+ 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)
+
+ | <presence from='capulet@rooms.example.com/Romeo'
+ | to='romeo@example.org/dr4hcr0st3lup4c'
+ | type='error'>
+ | <x xmlns='http://jabber.org/protocol/muc'/>
+ | <error type='cancel' by='capulet@rooms.example.com'>
+ | <conflict xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
+ | </error>
+ | </presence>
+
+ Upon receiving this stanza, the XMPP-to-MSRP gateway will reply to
+ the NICKNAME request with code 425.
+
+ Example 41: Gateway Translates XMPP Nickname Conflict to MSRP Error
+ Code (F54)
+
+ | MSRP a786hjs2 425 Nickname usage failed
+ | To-Path: msrp://chat.example.org:7313/ansp71weztas;tcp
+ | From-Path: msrp://rooms.example.com:8763/lkjh37s2s20w2a;tcp
+ | -------a786hjs2
+
+6.5. Invite Another User to a Room
+
+ 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
+
+
+ Example 42: SIP User Invites Another User (F55)
+
+ | REFER sip:capulet@rooms.example.com SIP/2.0
+ | To: <sip:capulet@rooms.example.com>;tag=a3343df32
+ | From: "Romeo" <sip:romeo@example.org>;tag=5534562
+ | Call-ID: 08CFDAA4-FAED-4E83-9317-253691908CD2
+ | CSeq: 4 REFER
+ | Contact: <sip:romeo@example.org>;gr=dr4hcr0st3lup4c
+ | Accept: message/sipfrag
+ | Refer-To: <sip:benvolio@example.com>
+ | Supported: replaces
+ | Content-Length: 0
+
+ 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)
+
+ | NOTIFY sip:romeo@example.org SIP/2.0
+ | To: <sip:romeo@example.org>;tag=5534562
+ | From: <sip:capulet@rooms.example.com>;tag=a3343df32
+ | Call-ID: 08CFDAA4-FAED-4E83-9317-253691908CD2
+ | CSeq: 5 NOTIFY
+ | Event: refer
+ | Subscription-State: terminated;reason=noresource
+ | Contact: <sip:capulet@rooms.example.com;transport=tcp>;isfocus
+ | Content-Type: message/sipfrag;version=2.0
+ | Content-Length: ...
+ |
+ | SIP/2.0 100 Trying
+
+6.6. Exit Room
+
+ If Romeo decides to exit the chat room, his client sends a SIP BYE to
+ the <montague@chat.example.org> chat room.
+
+
+
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 36]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+ Example 44: Romeo Terminates Session (F59)
+
+ | BYE sip:capulet@rooms.example.com SIP/2.0
+ | Max-Forwards: 70
+ | From: "Romeo" <sip:romeo@example.org>;tag=5534562
+ | To: <sip:capulet@rooms.example.com>;tag=a3343df32
+ | Call-ID: 08CFDAA4-FAED-4E83-9317-253691908CD2
+ | CSeq: 6 BYE
+ | Content-Length: 0
+
+ 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).
+
+ Example 45: Romeo Exits Chat Room (F60)
+
+ | <presence from='romeo@example.org/dr4hcr0st3lup4c'
+ | to='capulet@rooms.example.com/Romeo'
+ | type='unavailable'/>
+
+7. Handling of Nicknames and Display Names
+
+ 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.
+
+8. Message Size
+
+ 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.
+
+9. Security Considerations
+
+ The security considerations of [RFC3261], [RFC4975], [RFC6120],
+ [RFC7247], [RFC7701], and [XEP-0045] apply.
+
+ 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
+
+
+10. References
+
+10.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>.
+
+ [RFC4579] Johnston, A. and O. Levin, "Session Initiation Protocol
+ (SIP) Call Control - Conferencing for User Agents",
+ BCP 119, RFC 4579, DOI 10.17487/RFC4579, August 2006,
+ <http://www.rfc-editor.org/info/rfc4579>.
+
+ [RFC4975] Campbell, B., Ed., Mahy, R., Ed., and C. Jennings, Ed.,
+ "The Message Session Relay Protocol (MSRP)", RFC 4975,
+ DOI 10.17487/RFC4975, September 2007,
+ <http://www.rfc-editor.org/info/rfc4975>.
+
+ [RFC5627] Rosenberg, J., "Obtaining and Using Globally Routable User
+ Agent URIs (GRUUs) in the Session Initiation Protocol
+ (SIP)", RFC 5627, DOI 10.17487/RFC5627, October 2009,
+ <http://www.rfc-editor.org/info/rfc5627>.
+
+ [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>.
+
+ [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>.
+
+ [RFC7700] Saint-Andre, P., "Preparation, Enforcement, and Comparison
+ of Internationalized Strings Representing Nicknames",
+ RFC 7700, DOI 10.17487/RFC7700, December 2015,
+ <http://www.rfc-editor.org/info/rfc7700>.
+
+ [RFC7701] Niemi, A., Garcia-Martin, M., and G. Sandbakken, "Multi-
+ party Chat Using the Message Session Relay Protocol
+ (MSRP)", RFC 7701, DOI 10.17487/RFC7701, December 2015,
+ <http://www.rfc-editor.org/info/rfc7701>.
+
+ [XEP-0045] Saint-Andre, P., "Multi-User Chat", XSF XEP 0045, February
+ 2012, <http://www.xmpp.org/extensions/xep-0045.html>.
+
+10.2. Informative References
+
+ [RFC3515] Sparks, R., "The Session Initiation Protocol (SIP) Refer
+ Method", RFC 3515, DOI 10.17487/RFC3515, April 2003,
+ <http://www.rfc-editor.org/info/rfc3515>.
+
+ [RFC3862] Klyne, G. and D. Atkins, "Common Presence and Instant
+ Messaging (CPIM): Message Format", RFC 3862,
+ DOI 10.17487/RFC3862, August 2004,
+ <http://www.rfc-editor.org/info/rfc3862>.
+
+ [RFC4353] Rosenberg, J., "A Framework for Conferencing with the
+ Session Initiation Protocol (SIP)", RFC 4353,
+ DOI 10.17487/RFC4353, February 2006,
+ <http://www.rfc-editor.org/info/rfc4353>.
+
+ [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
+ Description Protocol", RFC 4566, DOI 10.17487/RFC4566,
+ July 2006, <http://www.rfc-editor.org/info/rfc4566>.
+
+ [RFC4575] Rosenberg, J., Schulzrinne, H., and O. Levin, Ed., "A
+ Session Initiation Protocol (SIP) Event Package for
+ Conference State", RFC 4575, DOI 10.17487/RFC4575, August
+ 2006, <http://www.rfc-editor.org/info/rfc4575>.
+
+
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 40]
+
+RFC 7702 SIP-XMPP Interworking: Groupchat December 2015
+
+
+ [RFC6501] Novo, O., Camarillo, G., Morgan, D., and J. Urpalainen,
+ "Conference Information Data Model for Centralized
+ Conferencing (XCON)", RFC 6501, DOI 10.17487/RFC6501,
+ March 2012, <http://www.rfc-editor.org/info/rfc6501>.
+
+ [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>.
+
+ [RFC7614] Sparks, R., "Explicit Subscriptions for the REFER Method",
+ RFC 7614, DOI 10.17487/RFC7614, August 2015,
+ <http://www.rfc-editor.org/info/rfc7614>.
+
+ [RFC7647] Sparks, R. and A. Roach, "Clarifications for the Use of
+ REFER with RFC 6665", RFC 7647, DOI 10.17487/RFC7647,
+ September 2015, <http://www.rfc-editor.org/info/rfc7647>.
+
+ [XEP-0172] Saint-Andre, P. and V. Mercier, "User Nickname", XSF
+ XEP 0172, March 2012,
+ <http://xmpp.org/extensions/xep-0172.html>.
+
+ [XEP-0249] Saint-Andre, P., "Direct MUC Invitations", XSF XEP 0249,
+ September 2011,
+ <http://xmpp.org/extensions/xep-0249.html>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 41]
+
+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
+
+
+Authors' Addresses
+
+ Peter Saint-Andre
+ &yet
+
+ Email: peter@andyet.com
+ URI: https://andyet.com/
+
+
+ Saul Ibarra Corretge
+ AG Projects
+ Dr. Leijdsstraat 92
+ Haarlem 2021RK
+ The Netherlands
+
+ Email: saul@ag-projects.com
+
+
+ Salvatore Loreto
+ Ericsson
+ Hirsalantie 11
+ Jorvas 02420
+ Finland
+
+ Email: Salvatore.Loreto@ericsson.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Saint-Andre, et al. Standards Track [Page 43]
+