summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc7701.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc7701.txt')
-rw-r--r--doc/rfc/rfc7701.txt2467
1 files changed, 2467 insertions, 0 deletions
diff --git a/doc/rfc/rfc7701.txt b/doc/rfc/rfc7701.txt
new file mode 100644
index 0000000..e08a51b
--- /dev/null
+++ b/doc/rfc/rfc7701.txt
@@ -0,0 +1,2467 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) A. Niemi
+Request for Comments: 7701
+Category: Standards Track M. Garcia-Martin
+ISSN: 2070-1721 Ericsson
+ G. Sandbakken
+ Cisco Systems
+ December 2015
+
+
+ Multi-party Chat Using the Message Session Relay Protocol (MSRP)
+
+Abstract
+
+ The Message Session Relay Protocol (MSRP) defines a mechanism for
+ sending instant messages (IMs) within a peer-to-peer session,
+ negotiated using the Session Initiation Protocol (SIP) and the
+ Session Description Protocol (SDP). This document defines the
+ necessary tools for establishing multi-party chat sessions, or chat
+ rooms, using MSRP.
+
+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/rfc7701.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 1]
+
+RFC 7701 Multi-party Chat MSRP 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.
+
+ This document may contain material from IETF Documents or IETF
+ Contributions published or made publicly available before November
+ 10, 2008. The person(s) controlling the copyright in some of this
+ material may not have granted the IETF Trust the right to allow
+ modifications of such material outside the IETF Standards Process.
+ Without obtaining an adequate license from the person(s) controlling
+ the copyright in such materials, this document may not be modified
+ outside the IETF Standards Process, and derivative works of it may
+ not be created outside the IETF Standards Process, except to format
+ it for publication as an RFC or to translate it into languages other
+ than English.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 2]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+Table of Contents
+
+ 1. Introduction ....................................................4
+ 2. Terminology .....................................................5
+ 3. Motivations and Requirements ....................................6
+ 4. Overview of Operation ...........................................7
+ 4.1. Policy Attributes of the Chat Room ........................10
+ 5. Creating, Joining, and Deleting a Chat Room ....................12
+ 5.1. Creating a Chat Room ......................................12
+ 5.2. Joining a Chat Room .......................................12
+ 5.3. Deleting a Chat Room ......................................14
+ 6. Sending and Receiving Instant Messages .........................14
+ 6.1. Regular Messages ..........................................14
+ 6.2. Private Messages ..........................................17
+ 6.3. MSRP Reports and Responses ................................19
+ 6.4. Congestion Avoidance ......................................20
+ 7. Nicknames ......................................................21
+ 7.1. Using Nicknames within a Chat Room ........................22
+ 7.2. Modifying a Nickname ......................................24
+ 7.3. Removing a Nickname .......................................25
+ 7.4. Nicknames in Conference Event Packages ....................25
+ 8. The SDP 'chatroom' Attribute ...................................25
+ 9. Examples .......................................................28
+ 9.1. Joining a Chat Room .......................................28
+ 9.2. Setting Up a Nickname .....................................30
+ 9.3. Sending a Regular Message to the Chat Room ................31
+ 9.4. Sending a Private Message to a Participant ................33
+ 9.5. Chunked Private Message ...................................35
+ 9.6. Nickname in a Conference Information Document .............35
+ 10. IANA Considerations ...........................................37
+ 10.1. New MSRP Method ..........................................37
+ 10.2. New MSRP Header ..........................................37
+ 10.3. New MSRP Status Codes ....................................37
+ 10.4. New SDP Attribute ........................................38
+ 11. Security Considerations .......................................38
+ 12. References ....................................................40
+ 12.1. Normative References .....................................40
+ 12.2. Informative References ...................................43
+ Acknowledgments ...................................................43
+ Contributors ......................................................43
+ Authors' Addresses ................................................44
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 3]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+1. Introduction
+
+ The Message Session Relay Protocol (MSRP) [RFC4975] defines a
+ mechanism for sending a series of instant messages within a session.
+ The Session Initiation Protocol (SIP) [RFC3261] in combination with
+ the Session Description Protocol (SDP) [RFC4566] allows for two peers
+ to establish and manage such sessions.
+
+ In another application of SIP, a User Agent (UA) can join in a multi-
+ party conversation called a "conference" that is hosted by a
+ specialized UA called a "focus" [RFC4353]. Such a conference can
+ naturally involve MSRP sessions. It is the responsibility of an
+ entity handling the media to relay IMs received from one participant
+ to the rest of the participants in the conference.
+
+ Several such systems already exist in the Internet. Participants in
+ a chat room can be identified with a pseudonym or nickname and can
+ decide whether their real identifier is disclosed to other
+ participants. Participants can also use a rich set of features such
+ as the ability to send private instant messages to other
+ participants.
+
+ Similar conferences supporting chat room functionality are already
+ available today. For example, Internet Relay Chat (IRC) [RFC2810],
+ Extensible Messaging and Presence Protocol (XMPP): Core [RFC6120], as
+ well as many other proprietary systems. Specifying equivalent
+ functionality for MSRP-based systems eases interworking between these
+ systems.
+
+ This document defines requirements, conventions, and extensions for
+ providing private messages and nickname management in centralized
+ chat rooms with MSRP. Participants in a chat room can be identified
+ by a pseudonym and decide if their real identifier should be
+ disclosed to other participants. This memo uses the SIP Conferencing
+ Framework [RFC4353] as a design basis. It also aims to be compatible
+ with "A Framework for Centralized Conferencing" [RFC5239]. Should
+ requirements arise, future mechanisms for providing similar
+ functionality in generic conferences might be developed, for example,
+ where the media is not only restricted to MSRP. The mechanisms
+ described in this document provide a future compatible short-term
+ solution for MSRP centralized chat rooms.
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 4]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+2. Terminology
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in BCP 14 [RFC2119] and
+ indicate requirement levels for compliant implementations.
+
+ This memo deals with "Tightly Coupled SIP Conferences" as defined in
+ the SIP Conferencing Framework [RFC4353] and adopts the terminology
+ from that document. In addition, we introduce some new terms:
+
+ Nickname: a pseudonym or descriptive name associated with a
+ participant. See Section 7 for details.
+
+ Multi-party Chat: an instance of a tightly coupled conference, in
+ which the media exchanged between the participants consist of
+ MSRP-based IMs. Also known as a chat room.
+
+ Chat Room: a synonym for a multi-party chat.
+
+ Chat Room URI: a URI that identifies a particular chat room and
+ that is a synonym of a "Conference URI" as defined in RFC 4353
+ [RFC4353].
+
+ Sender: the chat room participant who originally created an IM and
+ sent it to the chat room server for further delivery.
+
+ Recipient: the destination chat room participant(s). This defaults
+ to the full conference participant list minus the IM Sender.
+
+ MSRP Switch: a media-level entity that is an MSRP endpoint. It is
+ a special MSRP endpoint that receives MSRP messages and delivers
+ them to the other chat room participants. The MSRP switch has a
+ similar role to a conference mixer with the exception that the
+ MSRP switch does not actually "mix" together different input media
+ streams; it merely relays the messages between chat room
+ participants.
+
+ Private IM: an IM sent in a chat room intended for a single
+ participant. Generally speaking, a private IM is seen by the MSRP
+ switch, in addition to the sender and recipient. A private IM is
+ usually rendered distinctly from the rest of the IMs, indicating
+ that the message was a private communication.
+
+ Anonymous URI: a URI concealing the participant's SIP address of
+ record (AOR) from the other participants in the chat room. The
+ allocation of such a URI is out of scope of this specification.
+ An anonymous URI must be valid for the length of the chat room
+
+
+
+Niemi, et al. Standards Track [Page 5]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ session and will be utilized by the MSRP switch to forward
+ messages to and from anonymous participants. Privacy and
+ anonymity are discussed in greater detail in RFC 3323 [RFC3323]
+ and RFC 3325 [RFC3325].
+
+ Conference Event Package: a notification mechanism that allows
+ conference participants to learn conference information including
+ roster and state changes in a conference. This would typically be
+ the mechanisms defined in "A Session Initiation Protocol (SIP)
+ Event Package for Conference State" [RFC4575] or "Conference Event
+ Package Data Format Extension for Centralized Conferencing (XCON)"
+ [RFC6502].
+
+ Identifier: a string used to recognize or establish as being a
+ particular user.
+
+ To log in: to enter identifying data, as a name or password, into a
+ chat room, so as to be able to do work with the chat room.
+
+3. Motivations and Requirements
+
+ Although conference frameworks describing many types of conferencing
+ applications already exist, such as the one in "A Framework for
+ Centralized Conferencing" [RFC5239] and the SIP Conferencing
+ Framework [RFC4353], the exact details of session-based instant
+ messaging conferences (chat rooms) are not well-defined at the
+ moment.
+
+ To allow interoperable chat implementations, for both conference-
+ aware and conference-unaware UAs, certain conventions for MSRP chat
+ rooms need to be defined. It also seems beneficial to provide a set
+ of features that enhance the baseline multi-party MSRP in order to be
+ able to create systems that have functionality on par with existing
+ chat systems as well as to enable the building of interworking
+ gateways to these existing chat systems.
+
+ We define the following requirements:
+
+ REQ-1: A basic requirement is the existence of a chat room, where
+ participants can join and leave the chat room and exchange
+ IMs with the rest of the participants.
+
+ REQ-2: A recipient of an IM in a chat room must be able to determine
+ the identifier of the sender of the message. Note that the
+ actual identifier depends on the one that was used by the
+ sender when joining the chat room.
+
+
+
+
+
+Niemi, et al. Standards Track [Page 6]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ REQ-3: A recipient of an IM in a chat room must be able to determine
+ the identifier of the recipient of received messages. For
+ instance, the recipient of the message might be the entire
+ chat room or a single participant (i.e., a private message).
+ Note that the actual identifier may depend on the one that
+ was used by the recipient when he or she joined the chat
+ room.
+
+ REQ-4: It must be possible to send a message to a single participant
+ within the chat room (i.e., a private IM).
+
+ REQ-5: A chat room participant may have a nickname or pseudonym
+ associated with their real identifier.
+
+ REQ-6: It must be possible for a participant to change their
+ nickname during the progress of the chat room session.
+
+ REQ-7: It must be possible for a participant to be known only by an
+ anonymous identifier and not their real identifier by the
+ rest of the chat room.
+
+ REQ-8: It must be possible for chat room participants to learn the
+ chat room capabilities described in this document.
+
+4. Overview of Operation
+
+ Before a chat room can be entered, it must be created. Users wishing
+ to host a chat room themselves can, of course, do just that; their UA
+ simply morphs from an ordinary UA into a special purpose one called a
+ "Focus UA". Another, commonly used setup is one where a dedicated
+ node in the network functions as a Focus UA.
+
+ Each chat room has an identifier of its own: a SIP URI that
+ participants use to join the chat room, e.g., by sending an INVITE
+ request to it. The conference focus processes the invitations, and
+ as such, maintains SIP dialogs with each participant. In a multi-
+ party chat, or chat room, MSRP is one of the established media
+ streams. Each chat room participant establishes an MSRP session with
+ the MSRP switch, which is a special purpose MSRP application. The
+ MSRP sessions can be relayed by one or more MSRP relays, which are
+ specified in RFC 4976 [RFC4976]. This is illustrated in Figure 1.
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 7]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ MSRP Sessions
+ +--------------------------+
+ | |
+ +---+--+ +---+--+ |
+ | SIP | | SIP | |
+ | MSRP | | MSRP | +-----+-----+
+ |Client| |Client| | MSRP |
+ +---+--+ ++--+--+ | Relay |
+ | | \ +-----+-----+
+ SIP Dialogs | / +----+ |
+ | | \ | MSRP Sessions
+ +----+------+--+ | |
+ | | +-+-----+-----+
+ | Conference | | MSRP |
+ | Focus UA |........| Switch |
+ | | | |
+ +----+-------+-+ +-+-----+-----+
+ | \ | |
+ SIP Dialogs | | +------+ | MSRP Sessions
+ | \ / |
+ +---+--+ +-+--+-+ +-----+-----+
+ | SIP | | SIP | | MSRP |
+ | MSRP | | MSRP | | Relay |
+ |Client| |Client| +-----+-----+
+ +---+--+ +------+ |
+ | |
+ +--------------------------+
+ MSRP Sessions
+
+ Figure 1: Multi-party Chat Overview Shown with MSRP Relays
+ and a Conference Focus UA
+
+ The MSRP switch is similar to a conference mixer in that it both
+ handles media sessions with each of the participants and bridges
+ these streams together. However, unlike a conference mixer, the MSRP
+ switch merely forwards messages between participants: it doesn't
+ actually mix the streams in any way. The system is illustrated in
+ Figure 2.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 8]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ +------+
+ | MSRP |
+ |Client|
+ +------+ +--.---+ +------+
+ | MSRP | | | MSRP |
+ |Client| | _|Client|
+ +------._ | ,' +------+
+ `._ | ,'
+ `.. +----------+ ,'
+ `| |'
+ | MSRP |
+ | Switch |
+ ,| |_
+ _,-'' +----------+ ``-._
+ +------.-' | `--+------+
+ | MSRP | | | MSRP |
+ |Client| | |Client|
+ +------+ | +------+
+ +---'--+
+ | MSRP |
+ |Client|
+ +------+
+
+ Figure 2: Multi-party Chat in a Centralized Chat Room
+
+ Typically, chat room participants also subscribe to a conference
+ event package to gather information about the conference roster in
+ the form of conference state notifications. For example,
+ participants can learn about other participants' identifiers,
+ including their nicknames.
+
+ All messages in the chat room use the Message/CPIM wrapper content
+ type [RFC3862], to distinguish between private and regular messages.
+ When a participant wants to send an instant message to the chat room,
+ it constructs an MSRP SEND request and submits it to the MSRP switch
+ including a regular payload (e.g., a Message/CPIM message that
+ contains text, HTML, an image, etc.). The Message/CPIM To header is
+ set to the chat room URI. The switch then fans out the SEND request
+ to all of the other participants using their existing MSRP sessions.
+
+ A participant can also send a private IM addressed to a participant
+ whose identifier has been learned, e.g., via a conference event
+ package. In this case, the sender creates an MSRP SEND request with
+ a Message/CPIM wrapper whose To header contains not the chat room URI
+ but the recipient's URI. The MSRP switch then forwards the SEND
+ request to that recipient. This specification supports the sending
+ of private messages to one and only one recipient. However, if the
+
+
+
+
+Niemi, et al. Standards Track [Page 9]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ recipient is logged in from different endpoints, the MSRP switch will
+ distribute the private message to each endpoint at which the
+ recipient is logged in.
+
+ We extend the current MSRP negotiation that takes place in SDP
+ [RFC4566] to allow participants to learn whether the chat room
+ supports and is willing to accept (e.g., due to local policy
+ restrictions) certain MSRP functions defined in this memo, such as
+ nicknames or private messaging. This is achieved by a new 'chatroom'
+ attribute in SDP (please refer to Section 8 for a detailed
+ description).
+
+ Naturally, when a participant wishes to leave a chat room, it sends a
+ SIP BYE request to the Focus UA and terminates the SIP dialog with
+ the focus and MSRP sessions with the MSRP switch.
+
+ This document assumes that each chat room is allocated its own SIP
+ URI. A user joining a chat room sends an INVITE request to that SIP
+ URI, and, as a result, a new MSRP session is established between the
+ user and the MSRP switch. It is assumed that an MSRP session is
+ mapped to a chat room. If a user wants to join a second chat room,
+ he creates a different INVITE request, through a different SIP
+ dialog, which leads to the creation of a second MSRP session between
+ the user and the MSRP switch. Notice that these two MSRP sessions
+ can still be multiplexed over the same TCP connection as per regular
+ MSRP procedures. However, each chat room is associated with a unique
+ MSRP session and a unique SIP dialog.
+
+4.1. Policy Attributes of the Chat Room
+
+ The Conference Framework with SIP [RFC4353] introduces the notion of
+ a Conference Policy as "The complete set of rules governing a
+ particular conference." A chat room is a specialized type of
+ conference, and the conference policy is sometimes extended with new
+ chat-specific rules. This section lists all the Conference Policy
+ attributes used by the present document and refers to sections in the
+ document where the usage of these attributes are described in greater
+ detail.
+
+ Nicknames: Whether the chat room accepts users to be recognized with
+ a nickname. See Sections 7, 7.1, and 8 for details. Also, the
+ scope of uniqueness of the nickname: the chat room (conference
+ instance), a realm or domain, a server, etc.
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 10]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ Nickname quarantine: The quarantine to be imposed on a nickname once
+ it is not currently in use (e.g., because the participant holding
+ this nickname abandons the chat room), prior to the wide
+ availability of this nickname to other users. This allows the
+ initial holder of the nickname to join the chat room during the
+ quarantine period and claim the same nickname they were previously
+ using. See Section 11 for details.
+
+ Private messaging: Whether the chat room allows users to send
+ private messages to other users of the chat room through the MSRP
+ switch. See Sections 6.2 and 8 for details.
+
+ Deletion of the chat room: Whether the chat room can be deleted when
+ the creator leaves the chat room or through an out-of-band
+ mechanism. See Section 5.3 for details.
+
+ Simultaneous access: Whether a user can log in from different
+ endpoints using the same identity. See Sections 6.1 and 6.2 for
+ details.
+
+ Force TLS transport: Whether the MSRP switch accepts only Transport
+ Layer Security (TLS) as an MSRP transport, in an effort to
+ guarantee confidentiality and privacy. See Section 11 for
+ details.
+
+ Maximum message size in congested MSRP sessions: The maximum size of
+ messages that can be distributed to a user over a congested MSRP
+ session. See Section 6.4 for details.
+
+ Chunk reception timer: The value of a time that controls the maximum
+ time that the MSRP switch is waiting for the reception of
+ different chunks belonging to the same message. If the timer
+ expires, the MSRP switch will discard the associated message
+ state. See Section 6.1 for details.
+
+ Supported wrapped media types: The list of media types that the MSRP
+ switch accepts in Message/CPIM wrappers sent from participants.
+ This list is included in the 'accept-wrapped-types' attribute of
+ the MSRP message media line in SDP. If the MSRP switch accepts
+ additional media types to those explicitly listed, a "*" is added
+ to the list. A single "*" indicates that the chat room accepts
+ any wrapped media type.
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 11]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+5. Creating, Joining, and Deleting a Chat Room
+
+5.1. Creating a Chat Room
+
+ Since we consider a chat room a particular type of conference having
+ MSRP media, the methods defined by the SIP Conference Framework
+ [RFC4353] for creating conferences are directly applicable to a chat
+ room.
+
+ Once a chat room is created, it is identified by a SIP URI, like any
+ other conference.
+
+5.2. Joining a Chat Room
+
+ Participants usually join the chat room by sending an INVITE request
+ to the chat room URI. The chat room then uses regular SIP mechanisms
+ to authenticate the participant. This may include, e.g., client
+ certificates, SIP Digest authentication [RFC3261], asserted network
+ identity [RFC3325], SIP Identity header field [RFC4474], etc. As
+ long as the user is authenticated, the INVITE request is accepted by
+ the focus and the user is brought into the actual chat room.
+
+ This specification requires all IMs to be wrapped in a Message/CPIM
+ wrapper [RFC3862]. Therefore, the 'accept-types' attribute for the
+ MSRP message media in both the SDP offer and answer need to include
+ at least the value 'Message/CPIM' (notice that RFC 4975 [RFC4975]
+ mandates this 'accept-types' attribute in SDP). If the 'accept-
+ types' attribute does not contain the value 'Message/CPIM', the
+ conference focus will reject the request. The actual instant message
+ payload type is negotiated in the 'accept-wrapped-types' attribute in
+ SDP (see RFC 4975 [RFC4975] for details). There is no default
+ wrapped type. Typical wrapped type values can include text/plain,
+ text/html, image/jpeg, image/png, audio/mp3, etc. It is RECOMMENDED
+ that participant endpoints add an 'accept-wrapped-types' attribute to
+ the MSRP 'message' media line in SDP, where the supported wrapped
+ types are declared, as per RFC 4975 procedures [RFC4975].
+
+ The MSRP switch needs to be aware of the URIs of the participant
+ (SIP, tel, or IM URIs) in order to validate messages sent from this
+ participant prior to their forwarding. This information is known to
+ the focus of the conference. Therefore, an interface between the
+ focus and the MSRP switch is assumed. However, the interface between
+ the focus and the MSRP switch is outside the scope of this document.
+
+ Conference-aware participants will detect that the peer is a focus
+ due to the presence of the "isfocus" feature tag [RFC3840] in the
+ Contact header field of the 200-class response to the INVITE request.
+ Conference-unaware participants will not notice it is a focus, and
+
+
+
+Niemi, et al. Standards Track [Page 12]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ cannot apply the additional mechanisms defined in this document.
+ Participants are also aware that the mixer is an MSRP switch due to
+ the presence of a 'message' media type and either TCP/MSRP or
+ TCP/TLS/MSRP as the protocol field in the media line of SDP
+ [RFC4566].
+
+ The conference focus of a chat room MUST only use a Message/CPIM
+ [RFC3862] top-level wrapper as a payload of MSRP messages, and the
+ focus MUST declare it in the SDP offer or answer as per regular
+ procedures in RFC 4975 [RFC4975]. This implies that if the
+ conference focus receives, from a participant's endpoint, an SDP
+ offer that does not include the value 'Message/CPIM' in the 'accept-
+ types' attribute for the MSRP message media line, the conference
+ focus SHOULD either reject the MSRP message media stream or reject
+ the complete SDP offer by using regular SIP or SDP procedures (e.g.,
+ creating an SDP answer that sets to zero the port of the MSRP message
+ media line, responding the INVITE with a 488 response, etc.).
+
+ If the conference focus accepts the participant's SDP offer, when the
+ conference focus generates the SDP answer, it MUST set the 'accept-
+ types' attribute for the MSRP message media line to a value of
+ 'Message/CPIM'. This specification requires all IMs to be wrapped in
+ a Message/CPIM wrapper, therefore, the 'accept-types' attribute in
+ this SDP body contains a single value of 'Message/CPIM'. The actual
+ IM payload type is negotiated in the 'accept-wrapped-types' attribute
+ in SDP (see RFC 4975 [RFC4975] for details). The conference focus
+ MAY also add an 'accept-wrapped-types' attribute to the MSRP message
+ media line in SDP containing the supported wrapped types, according
+ to the supported wrapped media types policy.
+
+ Note that the Message/CPIM wrapper is used to carry the sender
+ information that, otherwise, it will not be available to the
+ recipient. Additionally, the Message/CPIM wrapper carries the
+ recipient information (e.g., To and Cc headers).
+
+ If the UA supports anonymous participation and the user chooses to
+ use it, the participant's UA SHOULD do at least one of these options:
+
+ (a) provide an anonymous URI in SIP headers that otherwise reveal
+ identifiers. Please refer to RFC 3323 [RFC3323] for a detailed
+ description of which headers are subject to reveal identifiers
+ and how to populate them; or
+
+ (b) trust the conference focus and request privacy of their URI,
+ e.g., by means of the SIP Privacy header field [RFC3323],
+ network asserted identity [RFC3325], or a similar privacy
+ mechanism.
+
+
+
+
+Niemi, et al. Standards Track [Page 13]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ If the participant has requested privacy, the conference focus MUST
+ expose a participant's anonymous URI through the conference event
+ package [RFC4575].
+
+ The conference focus of a chat room learns the supported chat room
+ capabilities in the endpoint by means of the 'chatroom' attribute
+ exchanged in the SDP offer/answer (please refer to Section 8 for a
+ detailed description). The conference focus MUST inform the MSRP
+ switch of the chat room capabilities of each participant that joins
+ the chat room (note that the interface defined between the conference
+ focus and the MSRP switch is outside the scope of this
+ specification). This information allows the MSRP switch, e.g., to
+ avoid the distribution of private messages to participants whose
+ endpoints do not support private messaging.
+
+5.3. Deleting a Chat Room
+
+ As with creating a conference, the methods defined by the SIP
+ Conference Framework [RFC4353] for deleting a conference are directly
+ applicable to a chat room. The MSRP switch will terminate the MSRP
+ sessions with all the participants.
+
+ Deleting a chat room is an action that heavily depends on the policy
+ of the chat room. For example, the policy can determine whether the
+ chat room is deleted when the creator leaves the room or whether an
+ out-of-band mechanism is responsible for the deletion.
+
+6. Sending and Receiving Instant Messages
+
+6.1. Regular Messages
+
+ This section describes the conventions used to send and receive IMs
+ that are addressed to all the participants in the chat room. These
+ are sent over a regular MSRP SEND request that contains a Message/
+ CPIM wrapper [RFC3862] that, in turn, contains the desired payload
+ (e.g., text, image, video clip, etc.).
+
+ When a chat room participant wishes to send an instant message to all
+ the other participants in the chat room, it constructs an MSRP SEND
+ request according to the procedures specified in RFC 4975 [RFC4975].
+ The sender MAY choose the desired MSRP report model (e.g., populate
+ the Success-Report and Failure-Report MSRP header fields).
+
+ On sending a regular message, the sender MUST populate the To header
+ of the Message/CPIM wrapper with the URI of the chat room. The
+ sender MUST also populate the From header of the Message/CPIM wrapper
+ with a proper identifier by which the user is recognized in the chat
+ room. Identifiers that can be used (among others) are:
+
+
+
+Niemi, et al. Standards Track [Page 14]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ o A SIP URI [RFC3261] representing the participant's address-of-
+ record
+
+ o A tel URI [RFC3966] representing the participant's telephone
+ number
+
+ o An IM URI [RFC3860] representing the participant's instant
+ messaging address
+
+ o An anonymous URI representing the participant's anonymous address
+
+ If the participant wants to remain anonymous, the participant's
+ endpoint MUST populate an anonymous URI in the From header of the
+ Message/CPIM wrapper. Other participants of the chat room will use
+ this anonymous URI in the To header of the Message/CPIM wrapper when
+ sending private messages. Notice that in order for the anonymity
+ mechanism to work, the anonymous URI MUST NOT reveal the
+ participant's SIP AOR. The mechanism for acquiring an anonymous URI
+ is outside the scope of this specification.
+
+ An MSRP switch that receives a SEND request from a participant SHOULD
+ first verify that the From header field of the Message/CPIM wrapper
+ is correctly populated with a valid URI of a participant. This
+ imposes a requirement for the focus of the conference to inform the
+ MSRP switch of the URIs by which the participant is known, in order
+ for the MSRP switch to validate messages. Section 6.3 provides
+ further information with the actions to be taken in case this
+ validation fails.
+
+ Then the MSRP switch should inspect the To header field of the
+ Message/CPIM wrapper. If the MSRP switch receives a message
+ containing several To header fields in the Message/CPIM wrapper the
+ MSRP switch MUST reject the MSRP SEND request with a 403 response, as
+ per procedures in RFC 4975 [RFC4975]. Then, if the To header field
+ of the Message/CPIM wrapper contains the chat room URI and there are
+ no other To header fields, the MSRP switch can generate a copy of the
+ SEND request to each of the participants in the chat room except the
+ sender. The MSRP switch MUST NOT modify the content received in the
+ SEND request. However, the MSRP switch MAY re-chunk any of the
+ outbound MSRP SEND requests.
+
+ When generating a copy of the SEND request to each participant in the
+ chat room, the MSRP switch MUST evaluate the wrapped media types that
+ the recipient is able to accept. This was learned through the
+ 'accept-wrapped-types' attribute of the MSRP message media line in
+ SDP. If the MSRP switch is aware that the media type of the wrapped
+ content is not acceptable to the recipient, the MSRP switch SHOULD
+ NOT forward this message to that endpoint. Note that this version of
+
+
+
+Niemi, et al. Standards Track [Page 15]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ the specification does not require the MSRP switch to notify the
+ sender about this failure. Extensions to this specification may
+ improve handling of unknown media types.
+
+ Note that the MSRP switch does not need to wait for the reception of
+ the complete MSRP chunk or MSRP message before it starts the
+ distribution to the rest of the participants. Instead, once the MSRP
+ switch has received the headers of the Message/CPIM wrapper, it
+ SHOULD start the distribution process. But, bear in mind that the
+ MSRP switch SHOULD still implement some sanity checking. Please
+ refer to the security considerations in Section 11 for further
+ details.
+
+ When forwarding chunked messages as soon as they are received, the
+ Message/CPIM wrapper is only present at the beginning of the message,
+ typically within the first chunk. Subsequent chunks will contain the
+ rest of the message, but not the Message/CPIM headers. Therefore, an
+ MSRP switch that receives a subsequent message may face challenges in
+ determining the correct list of recipients of the message. An MSRP
+ switch that uses this fast forwarding procedure MUST temporarily
+ store the Message-ID of the MSRP message to correlate the different
+ chunks; it MUST also temporarily store the list of recipients to
+ which the initial chunks were delivered. The MSRP switch SHOULD
+ forward subsequent chunks only to those recipients who were sent the
+ initial chunks, except if the MSRP switch has knowledge that one of
+ the recipients of the initial chunks has dropped from the chat room.
+ This behavior also avoids new participants who had joined the chat
+ room when the first chunk was distributed from receiving subsequent
+ chunks that would otherwise need to be discarded.
+
+ Once the MSRP switch receives the last chunk of a message, and that
+ chunk is successfully sent to each of the recipients, the MSRP switch
+ discards the temporary storage of MSRP Message-ID and the associated
+ list of recipients.
+
+ In some occasions, a sender might suffer a transport error condition
+ (such as loss of connectivity or depletion of battery) that makes the
+ sending of a message incomplete, e.g., some chunks were received by
+ the MSRP switch, but not all of them. This is a behavior already
+ considered in the core MSRP specification (see RFC 4975 [RFC4975]
+ Section 5.4). The problem in the context of a chat room lies with
+ the use of temporary storage for fast forwarding. In order to
+ prevent attacks related to the exhaustion of temporary storage of
+ chunked messages, on receiving a first chunk of a message, where the
+ MSRP switch is using the fast forward method, the MSRP switch MUST
+ set a chunk reception timer for controlling the reception of the
+ remaining chunks.
+
+
+
+
+Niemi, et al. Standards Track [Page 16]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ This chunk reception timer can be reset every time a new chunk of the
+ same message is received. When this timer expires, the MSRP switch
+ MUST consider that the sending of the message was aborted, and it MAY
+ discard all the message state associated with it, including the
+ Message-ID and the list of recipients. Additionally, if this chunk
+ reception timer expires, the MSRP switch MAY choose to send an abort
+ chunk (i.e., one with the "#" flag set) to each to the recipients.
+ This is just an optimization, since MSRP endpoints need to be able to
+ handle incomplete messages as per regular MSRP.
+
+ The specific value of this chunk reception timer is not standardized;
+ it is subject of local policy. However, it is recommended not to be
+ a short value. For example, a time interval on the order of a normal
+ TCP timeout (i.e., around 540 seconds) would be reasonable. A value
+ on the order of a few seconds would not.
+
+ An MSRP endpoint that receives a SEND request from the MSRP switch
+ containing a Message/CPIM wrapper SHOULD first inspect the To header
+ field of the Message/CPIM wrapper. If the To header field is set to
+ the chat room URI, it should render it as a regular message that has
+ been distributed to all the participants in the chat room. Then, the
+ MSRP endpoint SHOULD inspect the From header field of the Message/
+ CPIM wrapper to identify the sender. The From header field will
+ include a URI that identifies the sender. The endpoint might have
+ also received further identifier information through a subscription
+ to a conference event package.
+
+ It is possible that a participant, identified by a SIP AoR or other
+ valid URI, joins a chat room simultaneously from two or more
+ different SIP UAs. It is recommended that the MSRP switch implements
+ means to map a URI to two or more MSRP sessions. If the policy of
+ the chat room allows simultaneous access, the MSRP switch MUST copy
+ all regular messages intended to the recipient through each MSRP
+ session mapped to the recipient's URI.
+
+6.2. Private Messages
+
+ This section describes the conventions used to send and receive
+ private IMs, i.e., IMs that are addressed to one participant of the
+ chat room rather than to all of them. The chat room has a local
+ policy that determines whether or not private messages are supported.
+ A chat room can signal support for private messages using the
+ 'chatroom' attribute in SDP (please refer to Section 8 for a detailed
+ description).
+
+ When a chat room participant wishes to send a private IM to a
+ participant in the chat room, it follows the same procedures to
+ create a SEND request as for regular messages (Section 6.1). The
+
+
+
+Niemi, et al. Standards Track [Page 17]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ only difference is that the MSRP endpoint MUST populate a single To
+ header of the Message/CPIM wrapper with the identifier of the
+ intended recipient. The identifier can be SIP, tel, and im URIs
+ typically learned from the information received in notifications of a
+ conference event package.
+
+ This version of the specification does not support sending a
+ private message to multiple recipients, i.e., the presence of
+ multiple To headers in the Message/CPIM wrapper of the MSRP SEND
+ request. This is due to added complexity, for example, with the
+ need to determine whether a message was not delivered to some of
+ the intended recipients. Implementations that still want to
+ recreate this function can send a series of single private
+ messages, one private message per intended recipient. The
+ endpoint can correlate this series of messages and create the
+ effect of a private message addressed to multiple recipients.
+
+ As for regular messages, an MSRP switch that receives a SEND request
+ from a participant SHOULD first verify that the From header field of
+ the Message/CPIM wrapper is correctly populated with a valid URI
+ (i.e., the URI is a participant of this chat room). Section 6.3
+ provides further information regarding the actions to be taken in
+ case this validation fails.
+
+ Then, the MSRP switch inspects the To header field of the Message/
+ CPIM wrapper. If the MSRP switch receives a message containing
+ several To header fields in the Message/CPIM wrapper, the MSRP switch
+ MUST reject the MSRP SEND request with a 403 response, as per
+ procedures in RFC 4975 [RFC4975]. Then, the MSRP switch verifies
+ that the To header of the Message/CPIM wrapper matches the URI of a
+ participant of the chat room. If this To header field does not
+ contain the URI of a participant of the chat room or if the To header
+ field cannot be resolved (e.g., caused by a mistyped URI), the MSRP
+ switch MUST reject the request with a 404 response. This new 404
+ status code indicates a failure to resolve the recipient URI in the
+ To header field of the Message/CPIM wrapper.
+
+ Notice the importance of the From and To headers in the Message/
+ CPIM wrapper. If an intermediary modifies these values, the MSRP
+ switch might not be able to identify the source or intended
+ destination of the message, resulting in a rejection of the
+ message.
+
+ Finally, the MSRP switch verifies that the recipient supports private
+ messages. If the recipient does not support private messages, the
+ MSRP switch MUST reject the request with a 428 response. This new
+ 428 response indicates that the recipient does not support private
+ messages. Any potential REPORT request that the MSRP switch sends to
+
+
+
+Niemi, et al. Standards Track [Page 18]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ the sender MUST include a Message/CPIM wrapper containing the
+ original From header field included in the SEND request and the To
+ header field of the original Message/CPIM wrapper. The MSRP switch
+ MUST NOT forward private messages to a recipient that does not
+ support private messaging.
+
+ If successful, the MSRP switch should search its mapping table to
+ find the MSRP sessions established toward the recipient. If a match
+ is found, the MSRP switch MUST create a SEND request and MUST copy
+ the contents of the sender's message to it.
+
+ An MSRP endpoint that receives a SEND request from the MSRP switch
+ does the same validations as for regular messages (Section 6.1). If
+ the To header field is different from the chat room URI, the MSRP
+ endpoints know that this is a private message. The endpoint should
+ render who it is from based on the value of the From header of the
+ Message/CPIM wrapper. The endpoint can also use the sender's
+ nickname, possibly learned via a conference event package, to render
+ the sender of the message, instead of using the sender's actual URI.
+
+ As with regular messages, if the policy of the chat room allows
+ simultaneous access, the MSRP switch MUST copy all private messages
+ intended to the recipient through each MSRP session mapped to the
+ recipient's URI.
+
+6.3. MSRP Reports and Responses
+
+ This section discusses the common procedures for regular and private
+ messages with respect to MSRP reports and responses. Any particular
+ procedure affecting only regular messages or only private messages is
+ discussed in the previous sections (Sections 6.1 or 6.2,
+ respectively).
+
+ MSRP switches MUST follow the success report and failure report
+ handling described in Section 7 of RFC 4975 [RFC4975], complemented
+ with the procedures described in this section. The MSRP switch MUST
+ act as an MSRP endpoint receiver of the request, according to
+ Section 5.3 of RFC 4975 [RFC4975].
+
+ If the MSRP switch receives an MSRP SEND request that does not
+ contain a Message/CPIM wrapper, the MSRP switch MUST reject the
+ request with a 415 response (specified in RFC 4975 [RFC4975]).
+
+ If the MSRP switch receives an MSRP SEND request where the URI
+ included in the From header field of the Message/CPIM wrapper is not
+ valid, (e.g., because it does not "belong" to the sender of the
+ message or is not a valid participant of the chat room), the MSRP
+
+
+
+
+Niemi, et al. Standards Track [Page 19]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ switch MUST reject the request with a 403 response. In cases without
+ error, the MSRP switch MUST construct responses according to
+ Section 7.2 of RFC 4975 [RFC4975].
+
+ When the MSRP switch forwards a SEND request, it MAY use any report
+ model in the copies intended for the recipients. The receiver
+ reports from the recipients MUST NOT be forwarded to the originator
+ of the original SEND request. This could lead to having the sender
+ receiving multiple reports for a single MSRP request.
+
+6.4. Congestion Avoidance
+
+ Congestion can occur when multiple heterogeneous interfaces are used
+ by a number of users who are participating in a chat room, and, in
+ particular, when paths become overloaded by any application. Some of
+ these users might have fast paths capable of high throughputs while
+ other users might be slow paths with constrained throughputs. Some
+ paths might become congested only by the chat application; other
+ paths gets congested by other applications. Therefore, it is
+ possible that a subset of the participants of the chat room are able
+ to send and receive a large number of messages in a short time or
+ with large contents (e.g., pictures), whereas others are not able to
+ keep up the pace.
+
+ Additionally, since MSRP uses a connection-oriented transport
+ protocol such as TCP, it is expected that TCP congestion control
+ mechanisms be activated if congestion occurs. Details on congestion
+ control are specified in RFC 5681 [RFC5681].
+
+ While this document does not mandate a particular MSRP-specific
+ mechanism to avoid congestion in any of the paths, something that is
+ deemed outside the scope of this document, this document provides
+ some recommendations for implementors to consider.
+
+ It is RECOMMENDED that MSRP switches implement one or more MSRP-
+ specific strategies to detect and avoid congestion. Possible
+ strategies (but definitely not a comprehensive list) include:
+
+ o If the MSRP switch is writing data to a send buffer and detects
+ that the send buffer associated with that TCP connection is
+ getting full (e.g., close to 80% of its capacity), the MSRP switch
+ marks the associated MSRP sessions making use of that TCP
+ connection as "congested".
+
+ o Prior to sending a new MSRP message to a user, the MSRP switch
+ verifies the congested flag associated to that MSRP session. If
+ the MSRP session is marked as congested, the MSRP switch can apply
+ a congestion avoidance mechanism, such as:
+
+
+
+Niemi, et al. Standards Track [Page 20]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ * The MSRP switch MAY discard regular MSRP messages sent to that
+ user while the congestion flag is raised for the user's TCP
+ connection. In order to inform the user of the congestion, the
+ MSRP switch MAY send a regular MSRP message to the user whose
+ congestion flag is raised. This message indicates that some
+ other messages are being discarded due to network congestion.
+ However, it should be noted that this message can get stuck at
+ MSRP switch, if the path is fully congested, i.e., it may not
+ be delivered anyhow.
+
+ * The MSRP can implement a temporary policy to disallow the
+ distribution of messages larger than a certain size to MSRP
+ sessions marked as congested. Similarly, the user should be
+ informed of this fact by the MSRP switch sending a regular MSRP
+ message indicating this condition.
+
+ o If the MSRP switch determines that the congestion flag associated
+ with a given TCP connection has been raised for quite some time
+ (on the order of a few minutes), or if the interface is down, this
+ may be considered an indication that the TCP connection has not
+ been able to recover from a congestion state. The MSRP switch MAY
+ close this congested TCP connection as well as the MSRP session
+ and SIP session.
+
+7. Nicknames
+
+ A common characteristic of existing chat room services is that
+ participants have the ability to present themselves with a nickname
+ to the rest of the participants of the chat room. It is used for
+ easy reference of participants in the chat room and can also provide
+ anonymous participants with a meaningful descriptive name.
+
+ A nickname is a useful construct in many use cases, of which MSRP
+ chat is but one example. A nickname is associated with a URI; the
+ focus knows the participant by its association to this URI.
+ Therefore, if a user joins the chat room under the same URI from
+ multiple devices, he or she may request the same nickname across all
+ these devices.
+
+ A nickname is a user-selectable moniker by which the participant
+ wants to be known to the other participants. It is not a 'display-
+ name', but it is used somewhat like a display name. A main
+ difference is that a nickname is unique inside a chat room to allow
+ an unambiguous reference to a participant in the chat. Nicknames may
+ be long lived, or they may be temporary. Users also need to reserve
+ a nickname prior to its utilization.
+
+
+
+
+
+Niemi, et al. Standards Track [Page 21]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ This memo specifies the nickname as a string. The nickname string
+ MUST unambiguously be associated with a single user in the scope of
+ the chat room (conference instance). This scope is similar to having
+ a nickname unique per user inside a chat room from "Extensible
+ Messaging and Presence Protocol (XMPP): Core" [RFC6120]. The chat
+ room may have policies associated with nicknames. It may not accept
+ nickname strings at all, or it may provide a wider unambiguous scope
+ like a domain or server, similar to IRC [RFC2810].
+
+7.1. Using Nicknames within a Chat Room
+
+ This memo provides a mechanism to reserve a nickname for a
+ participant for as long as the participant is logged into the chat
+ room. The mechanism is based on a NICKNAME MSRP method (see below)
+ and a new "Use-Nickname" header. Note that other mechanisms may
+ exist (for example, a web page reservation system), although they are
+ outside the scope of this document.
+
+ A chat room participant who has established an MSRP session with the
+ MSRP switch, where the MSRP switch has indicated the support and
+ availability of nicknames with the 'nicknames' token in the
+ 'chatroom' SDP attribute, MAY send a NICKNAME request to the MSRP
+ switch. The NICKNAME request MUST include a new Use-Nickname header
+ that contains the nickname string that the participant wants to
+ reserve. This nickname string MUST NOT be zero octets in length and
+ MUST NOT be more than 1023 octets in length. Finally, MSRP NICKNAME
+ requests MUST NOT include Success-Report or Failure-Report header
+ fields.
+
+ Bear in mind that nickname strings, like the rest of the MSRP
+ message, use the UTF-8 transformation format [RFC3629].
+ Therefore, a character may be encoded in more than one octet.
+
+ An MSRP switch that receives a NICKNAME request containing a
+ Use-Nickname header field SHOULD first verify whether the policy of
+ the chat room allows the nickname functionality. If not allowed, the
+ MSRP switch MUST reject the request with a 403 response, as per RFC
+ 4975 [RFC4975].
+
+ If the policy of the chat room allows the usage of nicknames, any new
+ nickname requested MUST be prepared and compared with nicknames
+ already in use or reserved following the rules defined in
+ "Preparation, Enforcement, and Comparison of Internationalized
+ Strings Representing Nicknames" [RFC7700].
+
+ This mitigates the problem of nickname duplication, but it does not
+ solve a problem whereby users can choose similar (but different)
+ characters to represent two different nicknames. For example, "BOY"
+
+
+
+Niemi, et al. Standards Track [Page 22]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ and "B0Y" are different nicknames that can mislead users. The former
+ uses the capital letter "O" while the latter uses the number zero
+ "0". In many fonts, the letter "O" and the number zero "0" might be
+ quite similar and difficult to perceive as different characters.
+ Chat rooms MAY provide a mechanism to mitigate confusable nicknames.
+
+ In addition to preparing and comparing following the rules above, the
+ MSRP switch SHOULD only allow the reservation of an already-used
+ nickname if the same user (e.g., identified by the SIP AOR) that is
+ currently using the nickname is making this subsequent request. This
+ may include, e.g., allowing the participant's URI to use the same
+ nickname when the participant has joined the chat room from different
+ devices under the same URI. The participant's authenticated
+ identifier can be derived after a successful SIP Digest
+ Authentication [RFC3261], included in a trusted SIP P-Asserted-
+ Identity header field [RFC3325], included in a valid SIP Identity
+ header field [RFC4474], or derived from any other present or future
+ SIP authentication mechanism. Once the MSRP switch has validated
+ that the participant is entitled to reserve the requested nickname,
+ the MSRP switch verifies if the suggested nickname can be accepted
+ (see below).
+
+ The reservation of a nickname can fail in several cases. If the
+ NICKNAME request contains a malformed value in the Use-Nickname
+ header field, the MSRP switch MUST answer the NICKNAME request with a
+ 424 response code. This can be the case when the value of the
+ Use-Nickname header field does not conform to the syntax.
+
+ The reservation of a nickname can also fail if the value of the
+ Use-Nickname header field of the NICKNAME request is a reserved word
+ (not to be used as a nickname by any user) or that particular value
+ is already in use by another user. In these cases, the MSRP switch
+ MUST answer the NICKNAME request with a 425 response code.
+
+ In both error conditions (receiving a 424 or 425 response code), the
+ nickname usage is considered failed; the nickname is not allocated to
+ this user. The user can select a different nickname and retry
+ another NICKNAME request.
+
+ If the MSRP switch is able to accept the suggested nickname to be
+ used by this user, the MSRP switch MUST answer the NICKNAME request
+ with a 200 response as per regular MSRP procedures.
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 23]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ As indicated earlier, this specification defines a new MSRP header
+ field: Use-Nickname. The Use-Nickname header field carries a
+ nickname string. This specification defines the usage of the
+ Use-Nickname header field in NICKNAME requests. If need arises,
+ usages of the Use-Nickname header field in other MSRP methods should
+ be specified separately.
+
+ According to RFC 4975 [RFC4975], MSRP uses the UTF-8 transformation
+ format [RFC3629]. The syntax of the MSRP NICKNAME method and the
+ Use-Nickname header field is built upon the MSRP formal syntax
+ [RFC4975] using the Augmented Backus-Naur Form (ABNF) [RFC5234].
+
+ other-method =/ NICKNAMEm
+ ; other-method defined in RFC 4975
+ NICKNAMEm = %x4E.49.43.4B.4E.41.4D.45 ; NICKNAME in caps
+ ext-header =/ Use-Nickname
+ ; ext-header defined in RFC 4975
+ Use-Nickname = "Use-Nickname:" SP nickname
+ nickname = DQUOTE 1*1023(qdtext / qd-esc) DQUOTE
+ ; qdtext and qd-esc defined in RFC 4975
+
+ Note that, according to RFC 4975 [RFC4975], "quoted-string" admits a
+ subset of UTF-8 characters [RFC3629]. Please refer to Section 9 of
+ RFC 4975 [RFC4975] for more details.
+
+ Once the MSRP switch has reserved a nickname and has bound it to a
+ URI (e.g., a SIP AoR), the MSRP server MAY allow the usage of the
+ same nickname by the same user (identified by the same URI, such as a
+ SIP AoR) over a second MSRP session. This might be the case if the
+ user joins the same chat room from a different SIP UA. In this case,
+ the user MAY request a nickname that is the same or different than
+ that used in conjunction with the first MSRP session; the MSRP server
+ MAY accept the usage of the same nickname by the same user. The MSRP
+ switch MUST NOT automatically assign the same nickname to more than
+ one MSRP session established from the same URI, because this can
+ create confusion to the user as whether the same nickname is bound to
+ the second MSRP session.
+
+7.2. Modifying a Nickname
+
+ Typically, a participant will reserve a nickname as soon as the
+ participant joins the chat room. But it is also possible for a
+ participant to modify his/her own nickname and replace it with a new
+ one at any time during the duration of the MSRP session.
+ Modification of the nickname is not different from the initial
+ reservation and usage of a nickname; thus, the NICKNAME method is
+ used as described in Section 7.1.
+
+
+
+
+Niemi, et al. Standards Track [Page 24]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ If a NICKNAME request that attempts to modify the current nickname of
+ the user fails for some reason, the current nickname stays in effect.
+ A new nickname comes into effect and the old one is released only
+ after a NICKNAME request is accepted with a 200 response.
+
+7.3. Removing a Nickname
+
+ If the participant no longer wants to be known by a nickname in the
+ chat room, the participant can follow the method described in
+ Section 7.2. The nickname element of the Use-Nickname header MUST be
+ set to an empty quoted string.
+
+7.4. Nicknames in Conference Event Packages
+
+ Typically the conference focus acts as a notifier of the conference
+ event package, RFC 4575 [RFC4575]. It is RECOMMENDED that conference
+ foci and endpoints support RFC 6502 [RFC6502] for providing
+ information regarding the conference and, in particular, supplying
+ information of the roster of the conference. It is also RECOMMENDED
+ that conference foci and endpoints support RFC 6501 [RFC6501], which
+ extends the <user> element originally specified in RFC 4575 [RFC4575]
+ with a new 'nickname' attribute. This allows endpoints to learn the
+ nicknames of participants of the chat room.
+
+8. The SDP 'chatroom' Attribute
+
+ There are a handful of use cases where a participant would like to
+ learn the chat room capabilities supported by the local policy of the
+ MSRP switch and the chat room. For example, a participant would like
+ to learn if the MSRP switch supports private messaging; otherwise,
+ the participant may send what he believes is a private IM addressed
+ to a participant, but since the MSRP switch does not support the
+ functions specified in this memo, the message would eventually be
+ distributed to all the participants of the chat room.
+
+ The reverse case also exists. A participant, say Alice, whose UA
+ does not support the extensions defined by this document joins the
+ chat room. The MSRP switch learns that Alice's application does not
+ support private messaging nor nicknames. If another participant, say
+ Bob, sends a private message to Alice, the MSRP switch does not
+ distribute it to Alice, because Alice is not able to differentiate it
+ from a regular message sent to the whole roster. Furthermore, if
+ Alice replied to this message, she would do it to the whole roster.
+ Because of this, the MSRP switch also keeps track of users who do not
+ support the extensions defined in this document.
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 25]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ In another scenario, the policy of a chat room may indicate that
+ certain functions are not allowed. For example, the policy may
+ indicate that nicknames or private messages are forbidden.
+
+ In order to provide the user with a good chat room experience, we
+ define a new 'chatroom' SDP attribute. The 'chatroom' attribute is a
+ media-level value attribute [RFC4566] that MAY be included in
+ conjunction with an MSRP media stream (i.e., when an "m=" line in SDP
+ indicates "TCP/MSRP" or "TCP/TLS/MSRP"). The 'chatroom' attribute
+ without further modifiers (e.g., chat-tokens) indicates that the
+ endpoint supports the procedures described in this document for
+ transferring MSRP messages to/from a chat room. The 'chatroom'
+ attribute can be complemented with additional modifiers that further
+ indicate the intersection of support and local policy allowance for a
+ number of functions specified in this document. Specifically, we
+ provide the means to indicate support for the use of nicknames and
+ private messaging.
+
+ The 'chatroom' attribute merely indicates the capabilities supported
+ and allowed by the local policy. This attribute is not a negotiation
+ subject to the SDP offer/answer model [RFC3264], but instead a
+ declaration. Therefore, a 'chatroom' attribute included in an SDP
+ answer does not need to be a subset of the values included in the
+ 'chatroom' attribute of its corresponding SDP offer. Consequently,
+ an SDP answer MAY contain a 'chatroom' attribute even if its
+ corresponding SDP offer did not include it.
+
+ In subsequent SDP offer/answer [RFC3264] exchanges pertaining to the
+ same session, the 'chatroom' attribute MAY be modified with respect
+ to an earlier SDP offer/answer exchange. The new value of this
+ attribute indicates the current support and local policy, meaning
+ that some restrictions can apply now or might have been removed. If
+ the 'chatroom' attribute is not included in a subsequent SDP offer/
+ answer, but a corresponding MSRP stream is still in place, it
+ indicates that support for the procedures indicated in this document
+ are disabled.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 26]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ The 'chatroom' SDP attribute has the following ABNF [RFC5234] syntax:
+
+ attribute =/ chatroom-attr
+ ; attribute defined in RFC 4566
+ chatroom-attr = chatroom-label [":" chat-token
+ *(SP chat-token)]
+ chatroom-label = "chatroom"
+ chat-token = (nicknames-token / private-msg-token /
+ ext-token)
+ nicknames-token = "nickname"
+ private-msg-token = "private-messages"
+ ext-token = private-token / standard-token
+ private-token = toplabel "." *(domainlabel ".") token
+ ; toplabel defined in RFC 3261
+ ; domainlabel defined in RFC 3261
+ ; token defined in RFC 3261
+ standard-token = token
+
+ A given 'chat-token' value MUST NOT appear more than once in a
+ 'chatroom' attribute.
+
+ A conference focus that includes the 'nicknames' token in the session
+ description is signaling that the MSRP switch supports and the chat
+ room allows the use of the procedures specified in Section 7. A
+ conference focus that includes the 'private-messages' in the SDP
+ description is signaling that the MSRP switch supports and the chat
+ room allows the use of the procedures specified in Section 6.2.
+
+ An example of the 'chatroom' attribute for an MSRP media stream that
+ indicates the acceptance of nicknames and private messages:
+
+ a=chatroom:nickname private-messages
+
+ An example of a 'chatroom' attribute for an MSRP media stream where
+ the endpoint, e.g., an MSRP switch, does not allow nicknames or
+ private messages.
+
+ a=chatroom
+
+ The 'chatroom' attribute allows extensibility with the addition of
+ new tokens. No IANA registry is provided at this time, since no
+ extensions are expected at the time of this writing. Extensions to
+ the 'chatroom' attribute can be defined in IETF documents or as
+ private-vendor extensions.
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 27]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ Extensions defined in an IETF document MUST follow the 'standard-
+ token' ABNF previously defined. In this type of extension, care must
+ be taken in the selection of the token to avoid a clash with any of
+ the tokens previously defined.
+
+ Private extensions MUST follow the 'private-token' ABNF previously
+ defined. The 'private-token' MUST be included in the DNS name of the
+ vendor. Then, the token is reversed in order to avoid clashes of
+ tokens. The following is an example of an extension named "foo.chat"
+ by a vendor "example.com"
+
+ a=chatroom:nickname private-messages com.example.chat.foo
+
+ Note that feature names created by different organizations are not
+ intended to have the same semantics or even interoperate.
+
+9. Examples
+
+9.1. Joining a Chat Room
+
+ Figure 3 presents a flow diagram where Alice joins a chat room by
+ sending an INVITE request. This INVITE request contains a session
+ description that includes the chat room extensions defined in this
+ document.
+
+ Alice Conference Focus
+ | |
+ |F1: (SIP) INVITE |
+ |----------------------->|
+ |F2: (SIP) 200 OK |
+ |<-----------------------|
+ |F3: (SIP) ACK |
+ |----------------------->|
+ | |
+
+ Figure 3: Flow Diagram of a User Joining a Chat Room
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 28]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ F1: Alice constructs an SDP description that includes an MSRP media
+ stream. She also indicates her support for the chat room extensions
+ defined in this document. She sends the INVITE request to the chat
+ room server.
+
+ INVITE sip:chatroom22@chat.example.com SIP/2.0
+ Via: SIP/2.0/TCP client.atlanta.example.com:5060;branch=z9hG4bK74bf9
+ Max-Forwards: 70
+ From: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl
+ To: Chatroom 22 <sip:chatroom22@chat.example.com>
+ Call-ID: 3848276298220188511@atlanta.example.com
+ CSeq: 1 INVITE
+ Contact: <sip:alice@client.atlanta.example.com;transport=tcp>
+ Content-Type: application/sdp
+ Content-Length: 290
+
+ v=0
+ o=alice 2890844526 2890844526 IN IP4 client.atlanta.example.com
+ s=-
+ c=IN IP4 client.atlanta.example.com
+ m=message 7654 TCP/MSRP *
+ a=accept-types:message/cpim text/plain text/html
+ a=path:msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ a=chatroom:nickname private-messages
+
+ F2: The chat room server accepts the session establishment. It
+ includes the 'isfocus' and other relevant feature tags in the Contact
+ header field of the response. The chat room server also builds an
+ SDP answer that forces the reception of messages wrapped in Message/
+ CPIM wrappers. It also includes the 'chatroom' attribute with the
+ allowed extensions.
+
+ SIP/2.0 200 OK
+ Via: SIP/2.0/TCP client.atlanta.example.com:5060;branch=z9hG4bK74bf9
+ ;received=192.0.2.101
+ From: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl
+ To: Chatroom 22 <sip:chatroom22@chat.example.com>;tag=8321234356
+ Call-ID: 3848276298220188511@atlanta.example.com
+ CSeq: 1 INVITE
+ Contact: <sip:chatroom22@chat.example.com;transport=tcp> \
+ ;methods="INVITE,BYE,OPTIONS,ACK,CANCEL,SUBSCRIBE,NOTIFY" \
+ ;automata;isfocus;message;event="conference"
+ Content-Type: application/sdp
+ Content-Length: 290
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 29]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ v=0
+ o=chat 2890844527 2890844527 IN IP4 chat.example.com
+ s=-
+ c=IN IP4 chat.example.com
+ m=message 12763 TCP/MSRP *
+ a=accept-types:message/cpim
+ a=accept-wrapped-types:text/plain text/html *
+ a=path:msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ a=chatroom:nickname private-messages
+
+ F3: The session established is acknowledged (details not shown).
+
+9.2. Setting Up a Nickname
+
+ Figure 4 shows an example of Alice setting up a nickname using the
+ chat room as provider. Her first proposal is not accepted because
+ that proposed nickname is already in use. Then, she makes a second
+ proposal with a new nickname. This second proposal is accepted.
+
+ Alice MSRP Switch
+ | |
+ |F1: (MSRP) NICKNAME |
+ |----------------------->|
+ |F2: (MSRP) 425 |
+ |<-----------------------|
+ |F3: (MSRP) NICKNAME |
+ |----------------------->|
+ |F4: (MSRP) 200 |
+ |<-----------------------|
+ | |
+
+ Figure 4: Flow Diagram of a User Setting up Her Nickname
+
+ F1: Alice sends an MSRP NICKNAME request that contains her proposed
+ nicknames in the Use-Nickname header field.
+
+ MSRP d93kswow NICKNAME
+ To-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ From-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ Use-Nickname: "Alice the great"
+ -------d93kswow$
+ F2: The MSRP switch analyzes the existing allocation of nicknames and
+ detects that the nickname "Alice the great" is already provided to
+ another participant in the chat room. The MSRP switch answers with a
+ 425 response.
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 30]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ MSRP d93kswow 425 Nickname reserved or already in use
+ To-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ From-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ -------d93kswow$
+
+ F3: Alice receives the response. She proposes a new nickname in a
+ second NICKNAME request.
+
+ MSRP 09swk2d NICKNAME
+ To-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ From-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ Use-Nickname: "Alice in Wonderland"
+ -------09swk2d$
+
+ F4: The MSRP switch accepts the nickname proposal and answers with a
+ 200 response.
+
+ MSRP 09swk2d 200 OK
+ To-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ From-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ -------09swk2d$
+
+9.3. Sending a Regular Message to the Chat Room
+
+ Figure 5 is a flow diagram where Alice is sending a regular message
+ addressed to the chat room. The MSRP switch distributes the message
+ to the rest of the participants.
+
+ Alice MSRP Switch Bob Charlie
+ | | | |
+ | F1: (MSRP) SEND | | |
+ |--------------------->| F3: (MSRP) SEND | |
+ | F2: (MSRP) 200 |----------------------->| |
+ |<---------------------| F4: (MSRP) SEND | |
+ | |------------------------------->|
+ | | F5: (MSRP) 200 OK | |
+ | |<-----------------------| |
+ | | F6: (MSRP) 200 OK | |
+ | |<------------------------------ |
+ | | | |
+ | | | |
+
+ Figure 5: Sending a Regular Message to the Chat Room
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 31]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ F1: Alice builds a text message and wraps it in a Message/CPIM
+ wrapper. She addresses the message to the chat room. She encloses
+ the resulting Message/CPIM wrapper in an MSRP SEND request and sends
+ it to the MSRP switch via the existing TCP connection.
+
+ MSRP 3490visdm SEND
+ To-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ From-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ Message-ID: 99s9s2
+ Byte-Range: 1-*/*
+ Content-Type: message/cpim
+
+ To: <sip:chatroom22@chat.example.com;transport=tcp>
+ From: <sip:alice@atlanta.example.com>
+ DateTime: 2009-03-02T15:02:31-03:00
+ Content-Type: text/plain
+
+ Hello guys, how are you today?
+ -------3490visdm$
+
+ F2: The MSRP switch acknowledges the reception of the SEND request
+ with a 200 (OK) response.
+
+ MSRP 3490visdm 200 OK
+ To-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ From-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ Message-ID: 99s9s2
+ -------3490visdm$
+
+ F3: The MSRP switch creates a new MSRP SEND request that contains the
+ received Message/CPIM wrapper and sends it to Bob.
+
+ MSRP 490ej23 SEND
+ To-Path: msrp://client.biloxi.example.com:4923/49dufdje2;tcp
+ From-Path: msrp://chat.example.com:5678/jofofo3;tcp
+ Message-ID: 304sse2
+ Byte-Range: 1-*/*
+ Content-Type: message/cpim
+
+ To: <sip:chatroom22@chat.example.com;transport=tcp>
+ From: <sip:alice@atlanta.example.com>
+ DateTime: 2009-03-02T15:02:31-03:00
+ Content-Type: text/plain
+
+ Hello guys, how are you today?
+ -------490ej23$
+
+
+
+
+
+Niemi, et al. Standards Track [Page 32]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ Since the received message is addressed to the chat room URI in the
+ From header of the Message/CPIM header, Bob knows that this is a
+ regular message distributed to all participants in the chat room
+ rather than a private message addressed to him.
+
+ The rest of the message flows are analogous to the previous. They
+ are not shown here.
+
+9.4. Sending a Private Message to a Participant
+
+ Figure 6 is a flow diagram where Alice is sending a private message
+ addressed to Bob's SIP AOR. The MSRP switch distributes the message
+ only to Bob.
+
+ Alice MSRP Switch Bob
+ | | |
+ | F1: (MSRP) SEND | |
+ |--------------------->| F3: (MSRP) SEND |
+ | F2: (MSRP) 200 |----------------------->|
+ |<---------------------| F4: (MSRP) 200 |
+ | |<-----------------------|
+ | | |
+
+ Figure 6: Sending a Private Message to Bob
+
+ F1: Alice builds a text message and wraps it in a Message/CPIM
+ wrapper. She addresses the message to Bob's URI, which she learned
+ from a notification in the conference event package. She encloses
+ the resulting Message/CPIM wrapper in an MSRP SEND request and sends
+ it to the MSRP switch via the existing TCP connection.
+
+ MSRP 6959ssdf SEND
+ To-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ From-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ Message-ID: okj3kw
+ Byte-Range: 1-*/*
+ Content-Type: message/cpim
+
+ To: <sip:bob@example.com>
+ From: <sip:alice@example.com>
+ DateTime: 2009-03-02T15:02:31-03:00
+ Content-Type: text/plain
+
+ Hello Bob.
+ -------6959ssdf$
+
+ F2: The MSRP switch acknowledges the reception of the SEND request
+ with a 200 (OK) response.
+
+
+
+Niemi, et al. Standards Track [Page 33]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ MSRP 6959ssdfm 200 OK
+ To-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ From-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ Message-ID: okj3kw
+ -------6959ssdfm$
+
+ F3: The MSRP switch creates a new MSRP SEND request that contains the
+ received Message/CPIM wrapper and sends it only to Bob. Bob can
+ distinguish the sender in the From header of the Message/CPIM
+ wrapper. He also identifies this as a private message due to the
+ presence of his own SIP AOR in the To header field of the Message/
+ CPIM wrapper.
+
+ MSRP 9v9s2 SEND
+ To-Path: msrp://client.biloxi.example.com:4923/49dufdje2;tcp
+ From-Path: msrp://chat.example.com:5678/jofofo3;tcp
+ Message-ID: d9fghe982
+ Byte-Range: 1-*/*
+ Content-Type: message/cpim
+
+ To: <sip:bob@example.com>
+ From: <sip:alice@atlanta.example.com>
+ DateTime: 2009-03-02T15:02:31-03:00
+ Content-Type: text/plain
+
+ Hello Bob.
+ -------9v9s2$
+
+ F4: Bob acknowledges the reception of the SEND request with a 200
+ (OK) response.
+
+ MSRP 9v9s2 200 OK
+ To-Path: msrp://chat.example.com:5678/jofofo3;tcp
+ From-Path: msrp://client.biloxi.example.com:4923/49dufdje2;tcp
+ Message-ID: d9fghe982
+ -------9v9s2$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 34]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+9.5. Chunked Private Message
+
+ The MSRP message below is a depiction of the same private message
+ described in Section 9.4, but now the message is split in two chunks.
+ The MSRP switch must wait for the complete set of Message/CPIM
+ headers before distributing the messages.
+
+ MSRP 7443ruls SEND
+ To-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ From-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ Message-ID: aft4to
+ Byte-Range: 1-*/174
+ Content-Type: message/cpim
+
+ To: <sip:bob@example.com>
+ From: <sip:alice@example.com>
+ -------7443ruls$
+
+ MSRP 7443ruls SEND
+ To-Path: msrp://chat.example.com:12763/kjhd37s2s20w2a;tcp
+ From-Path: msrp://client.atlanta.example.com:7654/jshA7weztas;tcp
+ Message-ID: aft4to
+ Byte-Range: 68-174/174
+ Content-Type: message/cpim
+
+ DateTime: 2009-03-02T15:02:31-03:00
+ Content-Type: text/plain
+
+ Hello Bob
+ -------7443ruls$
+
+9.6. Nickname in a Conference Information Document
+
+ Figure 7 is a depiction of an XML conference information document
+ received in a SIP NOTIFY request as a notification to the XCON
+ Conference Event Package, RFC 6502 [RFC6502]. The conference
+ information document follows the XCON Data Model specified in RFC
+ 6501 [RFC6501].
+
+ The conference information document of Figure 7 presents information
+ of two users who are participating in the conference (see each of the
+ <user> elements). Each participant is bound to a nickname, shown in
+ the 'nickname' attribute of the <user> element.
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 35]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ NOTE: The purpose of Figure 7 is to show the user-to-nickname
+ relationship. It is believed that the example is correct,
+ according to RFC 6501 [RFC6501]. In case of contradictions
+ between this specification and RFC 6501 [RFC6501], the latter has
+ precedence.
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <conference-info
+ xmlns="urn:ietf:params:xml:ns:conference-info"
+ xmlns:xcon="urn:ietf:params:xml:ns:xcon-conference-info"
+ entity="sip:chatroom22@chat.example.com"
+ state="full" version="1">
+ <!--
+ CONFERENCE INFO
+ -->
+ <conference-description>
+ <subject>MSRP nickname example</subject>
+ </conference-description>
+ <!--
+ CONFERENCE STATE
+ -->
+ <conference-state>
+ <user-count>2</user-count>
+ </conference-state>
+ <!--
+ USERS
+ -->
+ <users>
+ <user entity="sip:bob@example.com"
+ state="full"
+ xcon:nickname="Dopey Donkey">
+ <display-text>Bob Hoskins</display-text>
+ </user>
+ <!--
+ USER
+ -->
+ <user entity="sip:alice@atlanta.example.com"
+ state="full"
+ xcon:nickname="Alice the great">
+ <display-text>Alice Kay</display-text>
+ </user>
+ </users>
+
+ </conference-info>
+
+ Figure 7: Nickname in a Conference Information Document
+
+
+
+
+
+Niemi, et al. Standards Track [Page 36]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+10. IANA Considerations
+
+10.1. New MSRP Method
+
+ This specification defines a new MSRP method that has been added to
+ the "Methods" subregistry of the "Message Session Relay Protocol
+ (MSRP) Parameters" registry:
+
+ NICKNAME
+
+ See Section 7 for details.
+
+10.2. New MSRP Header
+
+ This specification defines a new MSRP header that has been added to
+ the "Header Fields" subregistry of the "Message Session Relay
+ Protocol (MSRP) Parameters" registry:
+
+ Use-Nickname
+
+ See Section 7 for details.
+
+10.3. New MSRP Status Codes
+
+ This specification defines four new MSRP status codes that have been
+ added to the "Status Codes" subregistry of the "Message Session Relay
+ Protocol (MSRP) parameters" registry.
+
+ The 404 status code indicates the failure to resolve the recipient's
+ URI in the To header field of the Message/CPIM wrapper in the SEND
+ request, e.g., due to an unknown recipient. See Section 6.2 for
+ details.
+
+ The 424 status code indicates a failure in allocating the requested
+ nickname due to a malformed syntax in the Use-Nickname header field.
+ See Section 7 for details.
+
+ The 425 status code indicates a failure in allocating the requested
+ nickname because the requested nickname in the Use-Nickname header
+ field is reserved or is already in use by another user. See
+ Section 7 for details.
+
+ The 428 status code indicates that the recipient of a SEND request
+ does not support private messages. See Section 6.2 for details.
+
+ Table 1 summarizes the IANA registration data with respect to new
+ MSRP status codes:
+
+
+
+
+Niemi, et al. Standards Track [Page 37]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ +-------+-------------------------------------+-----------+
+ | Value | Description | Reference |
+ +-------+-------------------------------------+-----------+
+ | 404 | Failure to resolve recipient's URI | RFC 7701 |
+ | 424 | Malformed nickname | RFC 7701 |
+ | 425 | Nickname reserved or already in use | RFC 7701 |
+ | 428 | Private messages not supported | RFC 7701 |
+ +-------+-------------------------------------+-----------+
+
+ Table 1: New Status Codes
+
+10.4. New SDP Attribute
+
+ This specification defines a new media-level attribute in the
+ "Session Description Protocol (SDP) Parameters" registry. The
+ registration data is as follows:
+
+ Contact: Miguel Garcia <miguel.a.garcia@ericsson.com>
+
+ Phone: +34 91 339 1000
+
+ Attribute name: chatroom
+
+ Long-form attribute name: Chat Room
+
+ Type of attribute: media level only
+
+ This attribute is not subject to the charset attribute
+
+ Description: This attribute identifies support and local policy
+ allowance for a number of chat room related functions
+
+ Specification: RFC 7701 (this document)
+
+ See Section 8 for details.
+
+11. Security Considerations
+
+ This document proposes extensions to the Message Session Relay
+ Protocol [RFC4975]. Therefore, the security considerations of that
+ document apply to this document as well.
+
+ A chat room is, by its nature, a potential Denial-of-Service (DoS)
+ accelerator as it takes a message from one entity and sends it to
+ many. Implementers of both UAs and switches need to carefully
+ consider the set of anti-DoS measures that are appropriate for this
+ application, and switch implementations, in particular, ought to
+
+
+
+
+Niemi, et al. Standards Track [Page 38]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ include appropriate anti-DoS features. The details of what is
+ appropriate will vary over time and will also depend on the specific
+ needs of the implementation; thus, they cannot be specified here.
+
+ If the participant's SIP UA does not understand the "isfocus" feature
+ tag [RFC3840], it will not know that it is connected to a conference
+ instance. The participant might not be notified that its MSRP client
+ will try to send messages having potential multiple recipients to the
+ MSRP switch. If the participant's MSRP client does not support the
+ extensions of this specification, it is unlikely that it will try to
+ send a message using the Message/CPIM wrapper content type [RFC3862],
+ and the MSRP switch will reject the request with a 415 response
+ [RFC4975]. Still, if a participant's MSRP client does create a
+ message with a valid Message/CPIM wrapper content type [RFC3862]
+ having the To header set to the URI of the chat room and the From
+ header set to the URI of which the participant that is known to the
+ chat room, the participant might be unaware that the message can be
+ forwarded to multiple recipients. Equally, if the To header is set
+ to a valid URI of a recipient known to the chat room, the message can
+ be forwarded as a private message without the participant knowing.
+
+ To mitigate these problems, when the chat room detects that a UA does
+ not support the procedures of this document (i.e., when the SIP UA is
+ not chat room aware), the MSRP switch SHOULD send a regular MSRP
+ message indicating that the SIP UA is actually part of a chat room
+ and that all the messages that the user sends correctly formatted
+ will be distributed to a number of participants. Additionally, the
+ MSRP switch SHOULD also send a regular MSRP text message including
+ the list of participants in the chat room so that the user becomes
+ aware of the roster.
+
+ If a participant wants to avoid security concerns on the path between
+ himself and the MSRP switch (e.g., eavesdropping, faked packet
+ injection, or packet corruption), the participant's UA can force the
+ usage of MSRP over a TLS [RFC5246] transport connection. This is
+ negotiated in the SDP offer/answer exchange as per the regular
+ procedures of RFC 4975 [RFC4975]. This negotiation will result in
+ both endpoints establishing a TLS [RFC5246] transport connection that
+ is used to exchange MSRP messages. The MSRP switch may also have
+ local policy that forces the usage of TLS transport for all MSRP
+ sessions, something that is also negotiated in SDP as per the regular
+ procedures of RFC 4975 [RFC4975].
+
+ Nicknames are used to show the appearance of the participants of the
+ chat room. A successful takeover of a nickname from a participant
+ might lead to private messages being sent to the wrong destination.
+ The recipient's URI will be different from the URI associated with
+ the original owner of the nickname, but the sender might not notice
+
+
+
+Niemi, et al. Standards Track [Page 39]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ this. To avoid takeovers, the MSRP switch MUST make sure that a
+ nickname is unique inside a chat room. Also, the security
+ consideration for any authenticated identity mechanisms used to
+ validate the SIP AOR will apply to this document as well. The chat
+ room has a policy that determines the time that a nickname is still
+ reserved for its holder, once it is no longer being used. This
+ allows, e.g., a user that accidentally loses its connectivity, to
+ reconnect to the chat room and keep on using the same nickname. It
+ depends on the policy of the chat room if a nickname that has been
+ previously used by another participant of the chat room can be
+ reserved or not.
+
+ Section 7.1 discusses the problem of similar but different nicknames
+ (e.g., thanks to the use of similar characters), and chat rooms MAY
+ provide a mechanism to mitigate confusable nicknames.
+
+ Recipients of IMs should be cautious with the rendering of content,
+ which can be malicious in nature. This includes, but is not limited
+ to, the reception of HTML and JavaScript scripts, executable code,
+ phishing attempts, etc. Endpoints SHOULD always request permission
+ from the user before executing one of these actions.
+
+ It must be noted that endpoints using a TLS client side certificate
+ with real names in the certificates will not be anonymous to the MSRP
+ switch to which they connect. While the name in the certificate
+ might not be used by MSRP, the server will have a certificate with
+ the actual name in it.
+
+12. References
+
+12.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>.
+
+ [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model
+ with Session Description Protocol (SDP)", RFC 3264,
+ DOI 10.17487/RFC3264, June 2002,
+ <http://www.rfc-editor.org/info/rfc3264>.
+
+
+
+
+Niemi, et al. Standards Track [Page 40]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ [RFC3323] Peterson, J., "A Privacy Mechanism for the Session
+ Initiation Protocol (SIP)", RFC 3323,
+ DOI 10.17487/RFC3323, November 2002,
+ <http://www.rfc-editor.org/info/rfc3323>.
+
+ [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
+ 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
+ 2003, <http://www.rfc-editor.org/info/rfc3629>.
+
+ [RFC3840] Rosenberg, J., Schulzrinne, H., and P. Kyzivat,
+ "Indicating User Agent Capabilities in the Session
+ Initiation Protocol (SIP)", RFC 3840,
+ DOI 10.17487/RFC3840, August 2004,
+ <http://www.rfc-editor.org/info/rfc3840>.
+
+ [RFC3860] Peterson, J., "Common Profile for Instant Messaging
+ (CPIM)", RFC 3860, DOI 10.17487/RFC3860, August 2004,
+ <http://www.rfc-editor.org/info/rfc3860>.
+
+ [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>.
+
+ [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>.
+
+ [RFC4976] Jennings, C., Mahy, R., and A. Roach, "Relay Extensions
+ for the Message Sessions Relay Protocol (MSRP)", RFC 4976,
+ DOI 10.17487/RFC4976, September 2007,
+ <http://www.rfc-editor.org/info/rfc4976>.
+
+
+
+
+Niemi, et al. Standards Track [Page 41]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+ [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", STD 68, RFC 5234,
+ DOI 10.17487/RFC5234, January 2008,
+ <http://www.rfc-editor.org/info/rfc5234>.
+
+ [RFC5239] Barnes, M., Boulton, C., and O. Levin, "A Framework for
+ Centralized Conferencing", RFC 5239, DOI 10.17487/RFC5239,
+ June 2008, <http://www.rfc-editor.org/info/rfc5239>.
+
+ [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
+ (TLS) Protocol Version 1.2", RFC 5246,
+ DOI 10.17487/RFC5246, August 2008,
+ <http://www.rfc-editor.org/info/rfc5246>.
+
+ [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion
+ Control", RFC 5681, DOI 10.17487/RFC5681, September 2009,
+ <http://www.rfc-editor.org/info/rfc5681>.
+
+ [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>.
+
+ [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>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 42]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+12.2. Informative References
+
+ [RFC2810] Kalt, C., "Internet Relay Chat: Architecture", RFC 2810,
+ DOI 10.17487/RFC2810, April 2000,
+ <http://www.rfc-editor.org/info/rfc2810>.
+
+ [RFC3325] Jennings, C., Peterson, J., and M. Watson, "Private
+ Extensions to the Session Initiation Protocol (SIP) for
+ Asserted Identity within Trusted Networks", RFC 3325,
+ DOI 10.17487/RFC3325, November 2002,
+ <http://www.rfc-editor.org/info/rfc3325>.
+
+ [RFC3966] Schulzrinne, H., "The tel URI for Telephone Numbers",
+ RFC 3966, DOI 10.17487/RFC3966, December 2004,
+ <http://www.rfc-editor.org/info/rfc3966>.
+
+ [RFC4474] Peterson, J. and C. Jennings, "Enhancements for
+ Authenticated Identity Management in the Session
+ Initiation Protocol (SIP)", RFC 4474,
+ DOI 10.17487/RFC4474, August 2006,
+ <http://www.rfc-editor.org/info/rfc4474>.
+
+ [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>.
+
+Acknowledgments
+
+ The authors want to thank Eva Leppanen, Adamu Haruna, Adam Roach,
+ Matt Lepinski, Mary Barnes, Ben Campbell, Paul Kyzivat, Adrian
+ Georgescu, Nancy Greene, Cullen Jennings, Flemming Andreasen, Suresh
+ Krishnan, Christer Holmberg, Saul Ibarra, Enrico Marocco, Alexey
+ Melnikov, Peter Saint-Andre, Stephen Farrell, and Martin Stiemerling
+ for providing comments.
+
+Contributors
+
+ This work would have never been possible without the fruitful
+ discussions on the SIMPLE WG mailing list, especially with Brian
+ Rosen (Neustar) and Paul Kyzivat (Huawei), who provided extensive
+ review and improvements throughout the document.
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 43]
+
+RFC 7701 Multi-party Chat MSRP December 2015
+
+
+Authors' Addresses
+
+ Aki Niemi
+
+ Email: aki.niemi@iki.fi
+
+
+ Miguel A. Garcia-Martin
+ Ericsson
+ Calle Via de los Poblados 13
+ Madrid, ES 28033
+ Spain
+
+ Email: miguel.a.garcia@ericsson.com
+
+
+ Geir A. Sandbakken
+ Cisco Systems
+ Philip Pedersensvei 1
+ 1366 Lysaker
+ Norway
+
+ Email: geirsand@cisco.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Niemi, et al. Standards Track [Page 44]
+