view Side-By-Side changes
Internet-DraftdynamicsoftExpires:November 15, 2004 May 17,January 16, 2005 R. Mahy C. Jennings Cisco Systems, Inc. July 18, 2004 The Message Session Relay Protocoldraft-ietf-simple-message-sessions-06draft-ietf-simple-message-sessions-07.txt Status of this MemoThis document is an Internet-DraftBy submitting this Internet-Draft, I certify that any applicable patent or other IPR claims of which I am aware have been disclosed, andisany of which I become aware will be disclosed, infull conformanceaccordance withall provisions of Section 10 of RFC2026.RFC 3668. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire onNovember 15, 2004.January 16, 2005. Copyright Notice Copyright (C) The Internet Society (2004). All Rights Reserved. Abstract This document describes the Message Session Relay Protocol (MSRP), amechanismprotocol for transmitting a series ofInstant Messages withinrelated instant messages in the context of a session.MSRPMessage sessions aremanaged using the Session Description Protocol (SDP) offer/answer model carried bytreated like any other media stream when setup via asignalingrendezvous or session setup protocol such as the Session Initiation Protocol (SIP).Campbell (Ed.)Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page 1] Internet-Draft MSRPMayJuly 2004 Table of Contents 1.IntroductionConventions . . . . . . . . . . . . . . . . . . . . . . . . 4 2.Motivation for Session-mode Messaging .Introduction and Background . . . . . . . . . .4 3. Scope of this Document. . . . . . 4 3. Protocol Overview . . . . . . . . . . . . .5 4. Protocol Overview. . . . . . . . 5 4. Key Concepts . . . . . . . . . . . . .6 5. SDP Offer-Answer Exchanges for MSRP Sessions. . . . . . . .7 5.1 Use of the SDP M-line. . . 8 4.1 MSRP Framing and Message Chunking . . . . . . . . . . . . 8 4.2 MSRP Addressing . . .7 5.2 The Accept Types Attribute. . . . . . . . . . . . . . . .7 5.3 MIME Wrappers. . 11 4.3 MSRP Transaction and Report Model . . . . . . . . . . . . 11 4.4 MSRP Connection Model . . . . . . . .8 5.4 URL Negotiations. . . . . . . . . . 12 5. MSRP URLs . . . . . . . . . . .9 5.5 Path Attributes with Multiple URLs. . . . . . . . . . . .10 5.6 Updated SDP Offers. . 14 5.1 MSRP URL Comparison . . . . . . . . . . . . . . . . . .11 5.7 Example SDP Exchange. 15 5.2 Resolving MSRP Host Device . . . . . . . . . . . . . . . . 16 6. Method-Specific Behavior . .11 5.8 Connection Negotiation. . . . . . . . . . . . . . . . 16 6.1 Constructing Requests . .12 6. The Message Session Relay Protocol. . . . . . . . . . . . .12 6.1 MSRP URLs. . . 16 6.1.1 Delivering SEND requests . . . . . . . . . . . . . . . 17 6.1.2 Sending REPORT requests . . . . . .12 6.1.1 MSRP URL Comparison. . . . . . . . . 19 6.1.3 Failure REPORT Generation . . . . . . . .13 6.1.2 Resolving MSRP Host Device. . . . . . 19 6.2 Constructing Responses . . . . . . . .14 6.2 Connection Direction. . . . . . . . . . 20 6.3 Receiving Requests . . . . . . . . .14 6.3 MSRP Messages. . . . . . . . . . . 21 6.3.1 Receiving SEND requests . . . . . . . . . . .15 6.3.1 Message Framing. . . . 21 6.3.2 Receiving REPORT requests . . . . . . . . . . . . . . 22 7. Using MSRP with SIP .17 6.3.2 Message Examples. . . . . . . . . . . . . . . . . . .18 6.422 7.1 SDP Offer-Answer Exchanges for MSRPTransactions . . . . . .Sessions . . . . . . . 22 7.1.1 URL Negotiations . . . . . . .19 6.5 MSRP Sessions. . . . . . . . . . . . 25 7.1.2 Path Attributes with Multiple URLs . . . . . . . . . .19 6.5.1 Initiating an MSRP session26 7.1.3 Updated SDP Offers . . . . . . . . . . . . . .19 6.5.2 Handling the initial request. . . . 27 7.1.4 Example SDP Exchange . . . . . . . . .21 6.5.3 Sending Instant Messages on a Session. . . . . . . .21 6.5.4 Ending a Session27 7.1.5 Connection Negotiation . . . . . . . . . . . . . . . . 28 7.2 MSRP User Experience with SIP . . .23 6.5.5 Managing Session State and Connections. . . . . . . .23 6.6 Delivery Status Notification. . . 28 8. DSN payloads in MSRP REPORT Requests . . . . . . . . . . . .24 6.6.1 Endpoint28 8.1 Per-Message DSNRequest . .header usage . . . . . . . . . . . . . . .24 6.6.228 8.2 Per-Recipient DSNgeneration . . . . . . . . . . . . .header usage . . . . . . .25 6.6.3 Receiving positive DSN. . . . . . . 29 8.3 original-envelope-id usage . . . . . . . . .26 6.6.4 Receiving negative DSN. . . . . . . 29 8.4 reporting-mta . . . . . . . . .26 6.6.5 DSN headers in MSRP. . . . . . . . . . . . . 29 8.5 final-recipient . . . .26 6.7 Message Fragmentation. . . . . . . . . . . . . . . . . 29 8.6 action .28 6.7.1 MSRP Usage of message/byteranges. . . . . . . . . . .28 6.8 Method Descriptions. . . . . . . . . . . . . . 30 8.7 status . . . . .29 6.8.1 SEND. . . . . . . . . . . . . . . . . . . . . 30 9. Formal Syntax . . . .29 6.8.2 VISIT. . . . . . . . . . . . . . . . . . . 30 10. Response Code Descriptions . . . . .29 6.8.3 REPORT. . . . . . . . . . . . 32 10.1 200 . . . . . . . . . . . .30 6.9 Response Code Descriptions. . . . . . . . . . . . . . 33 10.2 400 . .30 6.9.1 200. . . . . . . . . . . . . . . . . . . . . . . . 33 10.3 403 .30 6.9.2 400. . . . . . . . . . . . . . . . . . . . . . . . .30 6.9.333 10.4 415 . . . . . . . . . . . . . . . . . . . . . . . . .30 6.9.4. 33 10.5 426 . . . . . . . . . . . . . . . . . . . . . . . . .30 6.9.5. 33 10.6 481 . . . . . . . . . . . . . . . . . . . . . . . . .30 Campbell (Ed.) Expires November 15, 2004 [Page 2] Internet-Draft MSRP May 2004 6.9.6. 33 10.7 506 . . . . . . . . . . . . . . . . . . . . . . . . .30 6.10 Header Field Descriptions. 33 11. Examples . . . . . . . . . . . . . . .30 6.10.1 TR-ID. . . . . . . . . . . 33 Campbell, et al. Expires January 16, 2005 [Page 2] Internet-Draft MSRP July 2004 11.1 Basic IM session . . . . . . . . . . . .31 6.10.2 Message-ID. . . . . . . . 33 11.2 Chunked Message . . . . . . . . . . . . .31 6.10.3 To-Path. . . . . . . 36 11.3 System Message . . . . . . . . . . . . . . .31 6.10.4 From-Path. . . . . . 36 11.4 Positive Report . . . . . . . . . . . . . . .31 6.10.5 Boundary. . . . . 37 11.5 Forked IM . . . . . . . . . . . . . . . . .31 6.10.6 Closing. . . . . . 37 12. Extensibility . . . . . . . . . . . . . . . .31 6.10.7 Content-Type. . . . . . . 40 13. CPIM compatibility . . . . . . . . . . . . .32 7. Example. . . . . . . . 40 14. Security Considerations . . . . . . . . . . . . . . . . . .32 8.40 15. IANA Considerations . . . . . . . . . . . . . . . . . . . .34 8.142 15.1 MSRP Port . . . . . . . . . . . . . . . . . . . . . . .. 34 8.242 15.2 MSRP URLSchema .Schemes . . . . . . . . . . . . . . . . . . . .34 8.2.1 Syntax42 15.3 SDP Parameters . . . . . . . . . . . . . . . . . . . . . 43 15.3.1 Accept Types . . .34 8.2.2 Character Encoding. . . . . . . . . . . . . . . . . 43 15.3.2 Wrapped Types .34 8.2.3 Intended Usage. . . . . . . . . . . . . . . . . . 43 15.3.3 Path . .35 8.2.4 Protocols. . . . . . . . . . . . . . . . . . . . . .35 8.2.5 Security Considerations43 15.4 IANA registration forms for DSN types . . . . . . . . . 43 15.4.1 IANA registration form for address-type . . . . . .35 8.2.6 Relevant Publications . . . . . . . . . . . . . . . . 35 8.3 SDP Parameters . . . . . . . . . . . . . . . . . . . . . . 35 8.3.1 Accept Types . . . . . . . . . . . . . . . . . . . . . 35 8.3.2 Wrapped Types . . . . . . . . . . . . . . . . . . . . 35 8.3.3 Path . . . . . . . . . . . . . . . . . . . . . . . . . 35 8.4 IANA registration forms for DSN types . . . . . . . . . . 36 8.4.1 IANA registration form for address-type . . . . . . . 36 8.4.243 15.4.2 IANA registration form for MTA-name-type . . . . . . 44 16. Change History .36 9. Security Considerations . . . . . . . . . . . . . . . . . . 36 9.1 TLS and the MSRPS Scheme . . . . . . . . . . . . . . . . . 36 9.1.1 Sensitivity of Session URLs. . . . . . . . . . . . .37 9.1.2 End to End Protection of IMs. . . . . . . . . 44 16.1 draft-ietf-simple-message-sessions-07 . . . .38 9.1.3 CPIM compatibility. . . . . 44 16.2 draft-ietf-simple-message-sessions-06 . . . . . . . . . 44 16.3 draft-ietf-simple-message-sessions-05 . . . .38 9.1.4 PKI Considerations. . . . . 45 16.4 draft-ietf-simple-message-sessions-04 . . . . . . . . . 45 16.5 draft-ietf-simple-message-sessions-03 . . . .38 10. Changes from Previous Draft Versions. . . . . 45 16.6 draft-ietf-simple-message-sessions-02 . . . . . . .39 10.1 draft-ietf-simple-message-sessions-06. . 46 16.7 draft-ietf-simple-message-sessions-01 . . . . . . .39 10.2 draft-ietf-simple-message-sessions-05. . 46 16.8 draft-ietf-simple-message-sessions-00 . . . . . . .39 10.3 draft-ietf-simple-message-sessions-04. . 47 16.9 draft-campbell-simple-im-sessions-01 . . . . . . .40 10.4 draft-ietf-simple-message-sessions-03. . . 47 17. Contributors and Acknowledgments . . . . . .40 10.5 draft-ietf-simple-message-sessions-02. . . . . . . . 47 18. References .40 10.6 draft-ietf-simple-message-sessions-01. . . . . . . . .41 10.7 draft-ietf-simple-message-sessions-00. . . . . . . . .41 10.8 draft-campbell-simple-im-sessions-01. . . . . . 48 18.1 Normative References . . . .42 11. Contributors. . . . . . . . . . . . . . . 48 18.2 Informational References . . . . . . . . .42 12. Acknowledgments. . . . . . . . 49 Authors' Addresses . . . . . . . . . . . . . .42 13. References. . . . . . . 50 Intellectual Property and Copyright Statements . . . . . . .. . . . . . . . . . . 42 13.1 Normative References . . . . . . . . . . . . . . . . . . . 42 13.2 Informational References . . . . . . . . . . . . . . . . . 43 Author's Address . . . . . . . . . . . . . . . . . . . . . . 44 Intellectual Property and Copyright Statements . . . . . . . 45 Campbell (Ed.)52 Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page 3] Internet-Draft MSRPMayJuly 2004 1.IntroductionConventions TheMESSAGE [12] extension to SIP [2] allows SIPkey words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to beused to transmit instant messages. Instant messages sent using the MESSAGE method are normally independent of each other.interpreted as described in RFC-2119 [5]. Thisapproach is often called page-mode messaging, since it follows a model similardocument consistently refers tothat used by many two-way pager devices. Page-mode messaging makes sense for instant message exchanges whereasmall number of messages occur. Endpoints may treat page-mode messages"message" asif they took place in an imaginative session, but there is no formal relationship between onea complete unit of MIME or text content. In some cases a message is split andanother. There are also applicationsdelivered inwhich itmore than one MSRP request. Each of these portions of the complete message isuseful for instantcalled a "chunk". 2. Introduction and Background A series of related textual messagestobetween two or more parties can beformally associated in a session. For example,viewed as part of auser may wish to joinsession with atext conference, participate in the conference for some period of time, then leave the conference.definite start and end. Thisusageisanalogousin contrast toregular media sessions that are typically initiated, managed, and terminated using SIP. We commonly refer to this modelindividual messages each sent completely independently. The SIMPLE Working Group describes messaging schemes that only track individual messages assession-mode messaging. One of the primary purposes"page-mode" messages, whereas messaging that is part ofSIPa "session" with a definite start andSDP (Section 5)end is called session-mode messaging. Page-mode messaging is enabled in SIMPLE via themanagement of media sessions.SIP [4]MESSAGE method [19]. Session-mode messagingcan be thoughthas a number of benefits [20] over page-mode messaging however, such asaexplicit rendezvous, tighter integration with other mediasession like any other.types, direct client-to-client operation, and brokered privacy and security. This documentdescribes the motivations for session-mode messaging, the Message Session Relay Protocol, and the use of the SDP offer/answer mechanism for managing MSRP session. 2. Motivation for Session-mode Messaging Message sessions offer several advantages over page-mode messages. For message exchanges that include more thandefines asmall number of message transactions,session-oriented instant message transport protocol (MSRP), whose sessions can be included in an offer or answer [3] of away to remove messaging load from intervening SIP proxies. Forsession description (for example, SDP [2]). The exchange is carried by some signaling protocol, such as SIP [4]. This allows aminimalcommunication user agent to offer a messaging sessionsetup and tear-down requires one INVITE/ACK transaction, andas oneBYE transaction, for a totalof5 SIP messages. Normal SIP request routing allows for all buttheinitial INVITE transactionpossible media types in a session. For instance, Alice may want tobypass any intervening proxies that do not specifically requestcommunicate with Bob. Alice doesn't know at the moment whether Bob has his phone or his IM client handy, but she's willing to use either. She sends an invitation to a session tobe inthepathaddress of record she has forfuture requests. Session-mode messages never cross theBob, sip:bob@example.com. Her invitation offers both voice and an IM session. The SIPproxies themselves. Each page-mode message involves a complete SIP transaction, that is, a requestservices at example.com forward the invitation to Bob at his currently registered clients. Bob accepts the invitation at his IM client and they begin aresponse. Any page-mode message exchange that involves more than 2 MESSAGE requests will generate more SIP requests than a minimalthreaded chat conversation. This sessioninitiation sequence. Since MESSAGE is normally used outside of a SIP dialog, these requests will typically traverse the entire proxy network between the endpoints. Duemodel allows message sessions tonetwork congestion concerns,be integrated into advanced communications applications with little to no additional protocol development. For example, during theMESSAGE method has Campbell (Ed.)above chat session, Bob decides Alice really needs to be talking to Carol. Bob can transfer [18] Alice to Carol, introducing them into their own messaging session. Messaging sessions can then be easily integrated Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page 4] Internet-Draft MSRPMayJuly 2004significant limitations in message size,into call-center and dispatch environments utilizing third-party call control [17] and conferencing [16] applications. 3. Protocol Overview MSRP is aprohibition against overlapping requests, etc. Much of this has been required because of perceived limitations in the congestion-avoidance features of SIP itself. Worktext-based, connection-oriented protocol for exchanging arbitrary (binary) MIME content, especially instant messages. This section isin progress to mitigate these concerns. However, session-mode messages are always sent over reliable, congestion-safe transports. Therefore, there are no restrictions on message sizes. Therea non-normative overview of how MSRP works and how it isno requirement to wait for acknowledgement before sending another message, so that message transactions can be overlapped. Messageused with SIP. MSRP sessionsallow greater efficiency for secure message exchanges. Theare typically arranged using SIPMESSAGE request inheritstheS/MIME features of SIP, allowing a message to be signed and/or encrypted. However, this approach requires public key operations for each message. With session-mode messaging,same way a sessionkey can be established at the timeofsession initiation. This key can be used to protect each message thataudio or video media ispart ofsetup. One SIP user agent (Alice) sends thesession. This requires only symmetric key operations for each subsequent IM, and no additional certificate exchanges are required after the initial exchange. The establishment of the session key can be done using standard techniques that apply to voice and video, in addition to instant messaging. Finally, SIP devices can treat message sessions like anyothermedia sessions. Any(Bob) a SIPfeature that can be applied to other sortsinvitation containing an offer session-description which includes a session ofmedia sessions can equally apply to message sessions. For example, conferencing [14], third party call control [15], call transfer [16], QoS integration [17], and privacy [18] can all be applied to message sessions. Messaging sessionsMSRP. The receiving SIP user agent canalso reduceaccept theoverhead in each individual message. In page-mode, each message needs toinvitation and includeall ofan answer session-description which acknowledges theSIP headers that are mandated by RFC 3261 [2]. However, manychoice ofthese headers are not needed once a context is established for exchanging messages. As a result, messagingmedia. Alice's sessionmechanisms can be designed with significantly less overhead. 3. Scope of this Document This document describes the use of MSRP between endpoints. It does not specify the use of intermediaries, nor does it prohibit such use. We expectdescription contains anextension to this specification to defineMSRPintermediaries and their use. This documentURL that describesthe use of MSRP over TCP.where she is willing to receive MSRPmay be used over other congestion-controlled protocols such as SCTP. However,requests from Bob, and vice-versa. (Note: Some lines in thespecific bindings for other such protocolsexamples areoutside the scope of this document. Campbell (Ed.)removed for clarity and brevity.) Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page 5] Internet-Draft MSRPMayJuly 20044. Protocol Overview The Message Session Relay Protocol (MSRP) provides a mechanism for transporting session-mode messages between endpoints. MSRP uses connection oriented, reliable network transport protocols only. It can operate in the presence of many NAT and firewall environments, as it allows participantsAlice sends topositively associate message sessions with specific connections, and does not depend upon connection source address, which may be obscured by NATs. MSRP uses the following primitives: SEND: UsedBob: INVITE sip:alice@atlanta.example.com SIP/2.0 To: <sip:bob@biloxi.example.com> From: <sip:alice@atlanta.example.com>;tag=786 Call-ID: 3413an89KU Content-Type: application/sdp c=IN IP4 10.1.1.1 m=message 9 msrp * a=accept-types:text/plain a=path:msrp://atlanta.example.com:7654/jshA7we;tcp Bob sends tosend message content from one endpointAlice: SIP/2.0 200 OK To: <sip:bob@biloxi.example.com>;tag=087js From: <sip:alice@atlanta.example.com>;tag=786 Call-ID: 3413an89KU Content-Type: application/sdp c=IN IP4 10.2.2.2 m=message 9 msrp * a=accept-types:text/plain a=path:msrp://biloxi.example.com:12763/kjhd37s2s2;tcp Alice sends toanother. VISIT: Used by an endpointBob: ACK sip:alice@atlanta.example.com SIP/2.0 To: <sip:bob@biloxi.example.com>;tag=087js From: <sip:alice@atlanta.example.com>;tag=786 Call-ID: 3413an89KU MSRP defines two request types, or methods. SEND requests are used toestablishdeliver asession association to the host endpoint.complete message or a chunk (a portion of a complete message), while REPORTUsedrequests report on the status of an earlier SEND request. When Alice receives Bob's answer, she checks tocarry MSRP message report/receipt information. Assume A issee if she has anendpoint that wishesexisting connection toestablishBob. If not, she opens amessage session, and B is the endpoint invited by A. A invites Bnew connection toparticipate in a message session by sending a URL. This URL is temporary, and must not duplicate anyBob using the URLthat A has offered for other active sessions. Bhe provided in the SDP. Alice thenrespondsdelivers a SEND request tothe invitationBob witha URL of its own. This informs Aher initial message, and Bob replies indicating thatB has acceptedAlice's request was received successfully. Campbell, et al. Expires January 16, 2005 [Page 6] Internet-Draft MSRP July 2004 MSRP a786hjs2 SEND To-Path: msrp://biloxi.example.com:12763/kjhd37s2s2;tcp From-Path: msrp://atlanta.example.com:7654/jshA7we;tcp Message-ID: 87652 Content-Type: text/plain Hey Bob, are you there? -------a786hjs2$ MSRP a786hjs2 200 OK To-Path: msrp://atlanta.example.com:7654/jshA7we;tcp From-Path: msrp://biloxi.example.com:12763/kjhd37s2s2;tcp Message-ID: 87652 -------a786hjs2$ Alice's request begins with thesession, and will accept messages atMSRP start line, which contains a transaction identifier thatURL. A connects to B, and sendsis also used as arequestfinal boundary marker. Next she includes the path of URLs toestablishthesession. Adestination in the To-Path header, andB may now exchange messages using SEND requests onher own URL in theconnection. Each party targets such requestsFrom-Path header. In this typical case there is just one "hop", so there is only one URL in each path header field. She also includes a message ID which she can use to correlate responses and status reports with thepeer's URL. When either party wishes tooriginal message. Next she puts the actual content. Finally she closes the request with an end line: seven hyphens, thesession, it informs its peer usingtransaction identifier / boundary marker and a "$" to indicate this request contains theappropriate mechanismend of a complete message. If Alice wants to deliver a very large message, she can split thechosen signaling protocol, such asmessage into chunks and deliver each chunk in aSIP BYEseparate SEND request. Theendmessage ID corresponds toend case looks something likethefollowing. (Note thatwhole message, so theexample shows a logical flow only; syntax will come later in this document.) A->B (SDP): offer (msrp://A/123) B->A (SDP): answer(msrp://B/456) A->B (TCP) connect A->B (MSRP): SEND (msrp://B/456) B->A (MSRP): 200 OK B->A (MSRP): SEND (msrp://A/123) A->B (MSRP): 200 OK Campbell (Ed.) Expires November 15, 2004 [Page 6] Internet-Draft MSRP May 2004 5. SDP Offer-Answer Exchanges for MSRP Sessions MSRP sessions will typically be initiated usingreceiver can also use it to reassemble theSession Description Protocol (SDP) [1] offer-answer mechanism, carriedmessage and tell which chunks belong with which message. Chunking is described inthe Session Initiation Protocol (SIP) [2] or any other protocol supporting it. 5.1 Use of the SDP M-line The SDP "m"-line takes the following form: m=<media> <port> <protocol> <format list> For non-RTP media sessions, The media field specifies the top level MIME mediamore detail in Section 4.1. Alice can also specify what typefor the session. For MSRP sessions, the media field MUST have the valueof"message". The port field is normally not used, and MAY be setreporting she would like in response toany value chosen byher request. If Alice requests positive acknowledgements, Bob sends a REPORT request to Alice confirming theendpoint. A port field valuedelivery ofzero has the standard SDP meaning. Non-zero values MUST not be repeatedher complete message. This is especially useful if Alice sent a series of SEND request containing chunks of a single message. More on requesting types of reports and errors is described inotherSection 4.3. Alice and Bob generally choose their MSRPm-linesURLs inthe same SDP document. The protocol fieldsuch a way that isused onlydifficult todesignate MSRP. The underlying transport protocol is determined in the MSRP URL, as described below. Therefore, the protocol field MUST takeguess thevalue of "msrp". The format list list is ignored for MSRP. This is because MSRP formats are specified as MIME content types, whichexact URL. Alice and Bob can reject requests to URLs they are notconvenientexpecting toencode in the SDP format list syntax. Instead, the allowed formats are negotiated using "a"-line attributes. For MSRP sessions, the format list SHOULD contain a "*" character,service, andnothing else. The port field incan correlate theM-line is not used to determinespecific URL with theport to whichprobable sender. Alice and Bob can also use TLS [1] toconnect. Rather,provide channel security over this hop. To receive MSRP Campbell, et al. Expires January 16, 2005 [Page 7] Internet-Draft MSRP July 2004 requests over a TLS protected connection, Alice or Bob could advertise URLs with theactual port"msrps" scheme instead of "msrp." This document specifies MSRP behavior only peer-to-peer session, that is, for a single hop. But isdetermined by thedesigned with the expectation that MSRPURL (Section 6.1) incan carry URLs for nodes on thepath attribute. However,far side of gateways or relays. For this reason, aport valueURL with the "msrps" scheme makes no assertion about the security properties ofzero hasother hops, just thenormal SDP meaning. The followingnext hop. MSRP URLs are discussed in more detail in Section 5. An adjacent pair of busy MSRP nodes (for exampleillustrates an m-linetwo gateways) can easily have several sessions, and exchange traffic for several simultaneous users. The nodes can use existing connections to carry new traffic with the same destination host, port, transport protocol, and scheme. MSRP nodes can keep track of how many sessions are using amessage session,particular connection and close these connections when no sessions have used them for some period of time. Connection management is discussed in more detail in Section 4.4. 4. Key Concepts 4.1 MSRP Framing and Message Chunking Messages sent using MSRP can be very large and can be delivered in several SEND requests, where each SEND request contains one chunk of theendpointoverall message. To support this, MSRP uses a boundary based framing mechanism. The header of an MSRP request contains a unique boundary string that iswillingused toaccept root payloadsindicate the end ofmessage/ cpim, plain text or HTML. The second two types could either be presented astheroot body,request. Following the boundary string at the end of the body data, there is a flag that indicates whether this is the last chunk of data for this message orcouldwhether the message will becontained within message/cpim bodies. m=message 9999 msrp * 5.2 The Accept Types Attribute MSRP can carry any MIME encoded payload. Endpoints specify MIME content types that they are willing to receivecontinued in a subsequent chunk. There is also a Byte-Range header in theaccept types "a"-line attribute. This attribute hasrequest that indicates the overall position of this chunk inside the complete message. For example, the followingsyntax: Campbell (Ed.)snippet of two SEND requests demonstrates a message that contains the text "abcdEFGH" being sent as two chunks. Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page7]8] Internet-Draft MSRPMayJuly 2004accept-types = accept-types-label ":" format-list accept-types-label = "accept-types" format-list = format-entry *( SP format-entry) format-entry = (type "/" subtype) / ("*") type = token subtype = token SDP offers forMSRPsessions MUST include an accept-types attribute. SDP answers MUST also includedkei38sd SEND Message-ID: 456 Byte-Range: 1-4/8 Content-Type: "text/plain" abcd -------dkei38sd+ MSRP dkei38ia SEND Message-ID: 456 Byte-Range: 5-8/8 Content-Type: "text/plain" EFGH -------dkei38ia$ The receiver uses theattribute,value of the Message-ID header to determine which of multiple chunks belong to the same message. The Message-ID header MUSTcontain eitherhave the samelist asvalue for each chunk in theoffer orsame message, and asubset of that list. A "*" entry in the accept-types attribute indicates that thesendermay attempt to send messages with media typesMUST ensure thathave not been explicitly listed. Ifthereceivermessage ID isable to processunique for each of themedia type, it does so. If not,messages itwill respond withsends within a415. Noteparticular session. The boundary marker thatall explicit entries SHOULD be considered preferred over any non-listed types. This feature is needed as, otherwise,terminates thelist of formats for rich IM devices maybody MUST beprohibitively large. The accept-types attribute may include container types, that is, mime formatspreceded by a CRLF thatcontain other types internally. If compound types are used,is not part of thetypes listed inbody and then seven "-" (minus sign) characters. After theaccept-types attribute may be used both asboundary marker, there MUST be a flag character that is either a "$" (for theroot payload,last chunk of the message) ormay"+" (for chunks other than the last). If the chunk represents the data that forms the end of the message, the flag MUST bewrapped inalisted container type. (Note that"$", otherwise thecontainer typeflag MUSTalsobelisted ina "+". The Byte-Range header value contains a starting value followed by a "-", an ending value followed by a "/", and finally theaccept-types attribute.) 5.3 MIME Wrapperstotal length. TheMIME content-typesstarting value indicates the index into the message where the first byte in theaccept-types attribute will often include container types; that is, types that contain other types. For example, "message/cpim" or "multipart/mixed." Occasionally an endpoint will need to specify a MIME body type that can only be used if wrapped inside a listed container type. Endpoints MAY specify MIME types that are only allowed to be wrapped inside compound types usingcurrent chunk belongs. The index of the"accept-wrapped-types" attributefirst octet inan SDP a-line. This attribute hasthefollowing syntax: accept-wrapped-types = wrapped-types-label ":" format-list wrapped-types-label = "accept-wrapped-types" `complete message is ONE, not zero. Theformat-list element hasending value indicates theidentical syntax as defined forlocation where theaccept-types attribute.last octet belongs. Thesemantics for this attribute are identical to thosebody MAY contain less data than is indicated by the end but it MUST NOT contain more octets than indicated. The length indicates the number of octets in theaccept-types attribute, withcomplete message. Both theexception thatending value and length MAY have thespecified types may only be used when wrapped inside containers. Only types listedvalue of "*" inaccept-types may be used as the "root" type forsome or all of theentire body. Since any type listed in accept-types maychunks, to indicate that they are not specified. If no Byte-Range header is present, the SEND request MUST beused bothtreated as if there was aroot body, and wrapped in other Campbell (Ed.) Expires November 15, 2004 [Page 8] Internet-Draft MSRP May 2004 bodies, format entries from the m-line SHOULD NOT be repeated in this attribute. This approach does not allow for specifying distinct lists of acceptable wrapped types for different types of containers. If an endpoint understandsByte-Range header present with aMIME type in the contextvalue ofone wrapper, it is assumed"1-*/*". This chunking mechanism allows a sender tounderstandinterrupt a chunk part way through sending itinby writing out thecontext of any other acceptable wrappers, subjectboundary termination and the "+" flag toany constraints defined byindicate that thewrapper types themselves. The approachend ofspecifying types that are only allowed insidethis chunk is not the end ofcontainers separately fromtheprimary payload typescomplete message. The ability to interrupt messages allowsan endpointmultiple Campbell, et al. Expires January 16, 2005 [Page 9] Internet-Draft MSRP July 2004 sessions toforce the use of certain wrappers. For example,share aCPIM gateway device may require allTCP connection, and for large messages to bewrapped inside message/cpim bodies, but may allow several content types inside the wrapper. If the gateway were to specify the wrapped types insent efficiently while not blocking other messages that share theaccept-types attribute, its peer could choosesame connection. To insure fairness over a connection, senders MUST NOT send chunks with a body larger than 2048 octets unless they are prepared to interrupt them. A sender can usethose types without the wrapper. 5.4 URL Negotiations Each endpoint in an MSRP session is identified by a URL. These URLs are negotiated in the SDP exchange. Each SDP offer or answer MUST contain one or more MSRP URL in a path attribute. This attribute hasone of the followingsyntax: a=path ":" MSRP_URL *(SP MSRP_URL) where MSRP_URLtwo strategies to satisfy this requirement. The sender isan MSRP or MSRPS URL as defined in Section 6.1. MSRP URLs included in an SDP offer or answer MUST include an explicit port number. A device uses the URLSTRONGLY RECOMMENDED todetermine a host address and portsend messages larger than 2048 octets using as few chunks as possible, interrupting chunks (at least 2048 octets long) whenconnecting, andother traffic is waiting toidentifyuse thetarget when sending messages. For MSRP sessions,same connection. Alternatively, theaddress fieldsender MAY simply send chunks in 2048 octet increments until theC-line is not relevant, and MUST be ignored. The port fieldfinal chunk. Note that the former strategy results in markedly more efficient use of theM-lineconnection. All MSRP nodes MUST beignored if non-zero. Zero values haveable to receive chunks of any size from 0 octets to theusual meaningmaximum number of octets they can receive forSDP. A devicea complete message. Senders SHOULD NOT break messages into chunks smaller than 2048 octets, except for the final chunk of a complete message. Receivers MUST not assume the chunks willfurther usebe delivered in order or that they will receive all theURL to determinechunks with "+" flags before they receive thetransport protocol, and whether to use TLS. Thischunk with the "$" flag. In certain cases of connection failure, it is possible for information to be duplicated. If chunks data isencoded inreceived that overlaps already received data for theURL scheme. Both offerer and answerer storesame message, thepath valueslast chunk receivedfromtakes precedence (even though this may not have been thepeer.last chunk transmitted). Fora given endpoint, the local URLexample, if bytes 1 to 100 was received and a chunk arrives that contains bytes 50 to 150, this second chunk will overwrite bytes 50 to 100 of the data that had already been received. Although other schemes work, this is theURLeasiest for the receiver and results in consistent behavior between clients. The seven "-" before the boundary are used so that theendpoint put intoreceiver can search for the value "----", 32 bits at aSDP path attributetime torepresent itself. The peer URL isfind theURL sent byprobable location of thepeerboundary. This allows most processors torepresent itself. Iflocate thepath attribute received fromboundaries and copy thepeer contains more than one URL, thenmemory at thepeer URLsame rate that a normal memory copy could be done. This approach results in a system that is as fast as framing based on specifying therightmost, whilebody length in theleftmost entry representsheaders of theCampbell (Ed.)request, but also allows for the interruption of messages. The ability to interrupt messages is needed so that TCP connections can be shared. Connection sharing is necessary for "fair" allocation of bandwidth in congestion situations and for allowing MSRP network elements that have a very large number of concurrent connections to different users. Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page9]10] Internet-Draft MSRPMayJuly 2004adjacent hop. If only one entry is present, then it is both the peer and adjacent URL.4.2 MSRP Addressing MSRP entities are addressed using URLs. Theremote path isMSRP URL schemes are defined in Section 5. The syntax of theentire path attribute value received fromTo-Path and From-Path headers allow for a list of URLs. This was done to allow thepeer. The following example shows an SDP offerprotocol to work with gateways or relays defined in the future, to provide asession URL of "msrp://a.example.com:7394/2s93i" v=0 o=someuser 2890844526 2890844527 IN IP4 alice.example.com s= c=IN IP4 alice.example.com m=message 9999 msrp * a=accept-types:text/plain a=path:msrp://a.example.com:7394/2s93i The rightmost URI in thecomplete pathattribute MUST identify the endpoint that generated the SDP document, or some other location where that endpoint wishestoreceive messages associated withthesession. It MUST MUST be a temporaryend recipient. When two MSRP nodes communicate directly they need only one URLassigned just for this particular session,in the To-Path list andMUST NOT duplicate anyone URL inuse for any other session in whichtheendpoint is currently participating. Further, it SHOULD be hard to guess,From-Path list. 4.3 MSRP Transaction andprotected from eavesdroppers. This will be discussed in more detail in Section 9. 5.5 Path Attributes with Multiple URLs As mentioned previously, this document describesReport Model A sender sends MSRPfor peer-to-peer scenarios, that is, when no relays are used. However, we expect a separate documentrequests todescribea receiver. The receiver MUST quickly accept or reject theuse of relays inrequest. If thenear future. In orderreceiver initially accepted the request, it still may then do things that take significant time toallowsucceed or fail. For example, if the receiver is an MSRPdevice that only implements the core specificationtointeroperate with devicesXMPP [29] gateway, it may forward the message over XMPP. The XMPP side may later indicate thatuse relays, this document must include a few assumptions about how relaysthe request did not work.An endpoint that uses one or more relays willAt this point, the MSRP receiver may need to indicate that the request did not succeed. There are two important concepts here: first, the hop byputting a URL for each device inhop delivery of therelay chain intorequest may succeed or fail; second, theSDP path attribute. The final entry would point toend result of theendpoint itself. The other entries would indicate each proposed relay, in order.request may be successfully processed or not. The firstentry would pointtype of status is referred tothe first relayas "transaction status" and may be returned inthe chain; that is, the relayresponse towhich the peer device, orarelay operation on its behalf, should connect. Endpoints that do not wishrequest. The second type of status is referred toinsert a relay, including those that do not support relays at all, will put exactly one URL into the path attribute. This URL represents both the endpoint for the session,as "request status" andthe connection point. While endpoints that implement only this specification will never introducemay be returned in arelay,REPORT transaction. The original sender of a request can indicate if theywill need to be ablewish tointeroperate with Campbell (Ed.) Expires November 15, 2004 [Page 10] Internet-Draft MSRP May 2004 other endpointsreceive reports for requests thatdo use relays. Therefore,fail, and can independently indicate if theyMUST be preparedwish to receivemore than one URL inreports for requests that succeed. A receiver only sends a success REPORT if it knows that theSDP path attribute. When an endpoint receives more than one URL inrequest succeeded, and the sender requested apath header,success report. A receiver only sends a failure REPORT if thefirst entry is relevant for purposes of resolving the address and port,request failed andestablishingthenetwork connection, as itsender requested failure reports. This document describes thefirst adjacent hop. If an endpoint puts more than one URL in a path attribute, the final URL in the path (the peer URL) attribute MUST exhibit the uniqueness properties described above. Uniqueness requirements for other entries in the attribute are outbehavior ofscope for this document. 5.6 Updated SDP Offers To do: Revisit this section based on new connection management rulesMSRPendpoints may sometimes needendpoints. MSRP relays or gateways are likely tosendhave additionalSDP exchanges for an existing session. They may need to send periodic exchanges with no changeconditions that indicate a failure REPORT should be sent, such as the failure torefresh state inreceive a positive response from thenetwork, for example, SIP timers. They may neednext hop. Two header fields control the sender's desire tochange some other stream inreceive reports. The header "Report-Success" can have asession without affectingvalue of "yes" or "no" and theMSRP stream,"Report-Failure" header can have a value of "yes", "no", orthey may need to change an MSRP stream without affecting some other stream."partial". Ifeither party wishthe value of "Report-Failure" is set tosend an SDP document that changes nothing at all,"yes", thenitthe sender of the request runs a timer. If a 200 response to the transaction is not received within 30 seconds from the time the last byte of the Campbell, et al. Expires January 16, 2005 [Page 11] Internet-Draft MSRP July 2004 transaction is sent, the element MUSThaveinform thesame o-line version as inuser that theprevious exchange. 5.7 Example SDP Exchange Endpoint A wishesrequest probably failed. If the value is set toinvite Endpoint B"partial", then the element sending the transaction does not have to run aMSRP session. A offerstimer, but MUST inform thefollowing session description: v=0 o=usera 2890844526 2890844527 IN IP4 alice.example.com s= c=IN IP4 alice.example.com t=0 0 m=message 9999 msrp * a=accept-types: message/cpim text/plain text/html a=path:msrp://alice.example.com:7394/2s93i9 B responds with its own URL: v=0 o=userb 2890844530 2890844532 IN IP4 bob.example.com s= c=IN IP4 dontlookhere t=0 0 m=message 9999 msrp * Campbell (Ed.) Expires November 15, 2004 [Page 11] Internet-Draft MSRP May 2004 a=accept-types:message/cpim text/plain a=path:msrp://bob.example.com:8493/si438ds A immediately sends some MSRP traffic: Eitheruser if receives aVISIT request (if it has no immediate contentnon-recoverable error response tosend) orthe transaction. Similarly if the value of the Report-Success header is "yes", then the receiving node MUST send aSEND"success" REPORT after the request is complete to indicate that the request(ifsucceeded. Likewise if the value is "no", itdoes have immediate content.) Afterwards,MUST NOT send a success REPORT. Aand B may now exchange IMs by executing SEND transactions. 5.8 Connection Negotiation Previous versionsconsequence of thisdocument includedis that if an MSRP element receives amechanism to negotiate the direction for any required TCP connection. The mechanism was loosely based on COMEDIA [20]work being done inrequest that has theMMUSIC working group. The primary motivation wasReport-Failure header set toallow MSRP sessionsa value of "no", it SHOULD NOT send any responses tosucceed in situations wherethis request, because theofferer couldelement sending the request would notaccept connections butdo anything with theanswerer could. For example,resulting response. If theofferer might be behindvalue is "partial", it SHOULD NOT send aNAT, while200 response to theanswerer might haverequest, but SHOULD send aglobally routable address. The SIMPLE working group chose to remove that mechanism from MSRP, asnon-200 class response if appropriate. If no Report-Success header is present in a SEND request, itaddedMUST be treated the same as agreat dealReport-Success header with value ofcomplexity to connection management. Instead, MSRP now specifies default connection directions. 6. The Message Session Relay Protocol The Message Session Relay Protocol (MSRP)"no". If no Report-Failure header isa text based, message oriented protocol forpresent, it MUST be treated thetransfersame as a Report-Failure header with value ofinstant messages in"yes". REPORT requests MUST have thecontext of a session. MSRP usessame Message-ID header value as theUTF8 character set. MSRP messages MUST be sent over a reliable, congestion-controlled, connection-oriented transport protocol. This document specifiesrequest they are reporting on. They MAY also have theuseByte-Range of the chunk they are reporting on. If an MSRPover TCP. Other documents may specify bindingselement receives a REPORT forother such protocols. 6.1 MSRP URLs An MSRP URL followsasubset ofMessage-ID it does not recognize, it SHOULD silently ignore theURL syntax in Appendix A of RFC2396 [4], with a scheme of "msrp": msrp_url = msrp-scheme "://" [userinfo "@"] hostport ["/" resource] msrp-scheme = "msrp" / "msrps" / "smsrp" / "smsrps" resource = 1*unreserved The constructions for "userinfo", "hostport",REPORT. Report-Success and"unreserved" are detailedReport-Failure MUST NOT be present inRFC2396 [4]. An MSRP URL server part identifiesaparticipantREPORT request. MSRP nodes MUST NOT send REPORT requests inanresponse to report requests. MSRPsession. If the server part contains a numeric IP address, itNodes MUSTalso Campbell (Ed.) Expires November 15, 2004 [Page 12] Internet-DraftNOT send MSRPMay 2004 contain a port. The resource part identifies a particular session the participant.responses to REPORT requests. Theabsencecombinations ofthe resource part indicates a reference to an MSRP host device,reporting may seem overly complex butdoes not specifically referthey are needed toa particular session resource. The underlying transport protocol and the protection level (that is, whether TLS is used) is determined bymeet theURL scheme: msrp MSRP over TCP without TLS. msrps MSRP over TCP with TLS. smsrp MSRP over SCTP without TLS. smsrps MSRP over SCTP with TLS. This document only describes the binding for MSRP over TCP. The schema for SCTP are reserved herein, but binding MSRPvarious scenarios of currently deployed IM systems. Report-Success might be "no" in many public systems toSCTPreduce load but isout of scope for this document. MSRP has an IANA registered recommended port definedused inSection 8.1. Thissome current enterprise systems, such as systems used for securities trading. A Report-Failure value of "no" isnot a default,useful for sending system messages such asthe URL process described herein will always explicitly resolve"the system is going down in 5 minutes" without causing aport number. However, the URLs SHOULD be configured so thatresponse explosion to therecommended portsender. A Report-Failure of "yes" is usedwhenever appropriate. This makes life easier for network administrators who needby many systems that wish tomanage firewall policy for MSRP. The server part will typically not contain a userinfo component,notify the user if the message failed butMAY do sosome other systems choose toindicateuse auser account for which the session is valid. Note that this is notvalue of "partial" to reduce thesame thing as identifyingload on thesession itself. If a userinfo component exists, MUST be constructed only from "unreserved" characters,servers caused by 200 OK responses, but still allow error responses toavoid a need for escape processing. Escaping MUST NOTbeusedsent inanmany cases. 4.4 MSRPURL. Furthermore,Connection Model When MSRP wishes to send auserinfo part MUST NOT contain password information. The following is an example ofrequest to atypical MSRP URL: msrp://host.example.com:8493/asfd34 6.1.1peer identified by an MSRPURL ComparisonCampbell, et al. Expires January 16, 2005 [Page 12] Internet-Draft MSRPURL comparisons MUST be performed according to the following rules: 1. The schema must match exactly. 2. The host part is compared as case insensitive. 3. If the port exists explicitly in eitherJuly 2004 URL,thenitmust match exactly. An URLfirst needs a connection, withan explicit port is never equivalentthe appropriate security properties, toanother with no port specified. Campbell (Ed.) Expires November 15, 2004 [Page 13] 4. The resource part is compared as case insensitive. A URL withoutthe host specified in the URL. If the sender already has such aresource part is never equivalent toconnection, that is, one associated with the same host, port, and URL scheme, then it SHOULD reuse thatincludesconnection. When aresource part. 5. Userinfo parts are not considered for URL comparison. Path normalization is not relevant fornew MSRPURLs. Escape normalizationsession isnot required, sincecreated, therelevant parts are limited to unreserved characters. 6.1.2 Resolving MSRP Host Device An MSRP host deviceconvention isidentified bythat theserver part of an MSRP URL. Ifelement that sent theserver part contains a numeric IP address and port, theySDP offer MUSTbe used as listed. If the server part contains a host name andimmediately issue aport,SEND request to theconnecting device MUST determineanswerer. This request MAY have ahost address by doing an Aempty body, orAAAA DNS query, and use the port as listed. IfMAY carry content. When a new connectionattempt fails,needs to be formed, thedevice SHOULD attemptelement looks at the URL toconnectdecide on the type of connection (TLS, TCP, etc.) then connects to theaddresses returned in any additional A or AAAA records, inhost indicated by theorderURL, following therecords were presented. This process assumes thatURL resolution rules in Section 5.2. For connections using theconnectionmsrps: scheme, the SubjectAltName in the received certificate MUST match the hostname portis always known prior to resolution. This is always true forof theMSRPURLuses described in this document,and the certificate MUST be valid, including having a date thatis, URLs always createdis valid andconsumed by automata, rather thanbeing signed byhumans. The introduction of relays may create situations wherean acceptable certificate authority. At thisis notpoint thecase. For example,device that initiated theMSRP URLconnection can assume thata user enters into athis connection is with the correct host. If the connection used mutual TLS authentication, and the TLS clientto configure it to usepresented arelay may be intended to be easily remembered and communicated by humans, and therefore is likely to omitvalid certificate, then theport. Therefore,element accepting therelay specification may describe additional steps to resolveconnection can know theport number. 6.2 Connection Directionidentity of the connecting host. WhenSIPmutual TLS authentication isused as the signaling protocol,not used, the listening devicesending the initialMUST wait until it receives a request on the connection tocommunicate is responsible for openingdetermine theconnection. In most cases,identity of thedevice sends an offer in an INVITE or UPDATE request, and getsconnecting device. When the first request arrives, it's To-Path header field should contain aresponseURL that the listening element handed out ina 2xx or 18x response. In this case,theinviter opensSDP for a session. The element that accepted the connectionafter receivinglooks up theresponse. This can be doneURL inparallel to sending an ACK request. Another, less common scenario is whentheinviter sends an INVITE request with no offer,received request, and determines which session it matches. If a match exists, theinvitee sends an offer in the response. In this case,node MUST assume that theinviter openshost that formed the connectionafter it receivesis theoffer. It waits for successful connection prior to sendinghost that this URL was given to. If no match exists, theanswer innode MUST reject theSIP ACK request. Campbell (Ed.) Expires November 15, 2004 [Page 14] Internet-Draft MSRP May 2004 Open Issue:request with a 481 response. Thedelayed offer is not likelynode MUST also check towork in SIP, asmake sure theinviteesession isalmost certainly to propose RTP rather than MSRP. We either need to do more work to specify how an endpoint that supports both handles a delayed offer, or remove any reference to this. Other signaling protocols maynot already in useother approaches. Unless specific behavior is specified for a particular signaling protocol, the offerer is always responsible for opening theon another connection.Open Issue: Should we put inIf so, it MUST reject the request with ahook to allow SDP extensions to be used to determine connection direction? For example, if COMEDIA evolves506 response. If it were legal to have multiple connections associated with the same session, apoint where itsecurity problem would exist. If the initial SEND request isworkable for MSRP, whynotallow using it? In all cases, the connecting endpoint connects to the device and port indicated byprotected, an eavesdropper might learn theconnectionURL,using the protocolandprotection level specified byuse it to insert messages into theURL scheme.session via a different connection. Ifit determines that it already hasa connection fails for any reason, then an MSRP endpoint MUST consider failed any sessions associated witha URL that has a matching scheme, host part, and port, it SHOULD reuse thatthe connectionrather than openingas well. When an endpoint notices such a failure, it SHOULD attempt to re-create any such sessions using a newone. OnceSDP exchange. If aconnection has succeeded, or the decisionCampbell, et al. Expires January 16, 2005 [Page 13] Internet-Draft MSRP July 2004 replacement session is successfully created, endpoints MAY attempt toreuse a connection has been made,resend any content for which delivery on theconnecting deviceoriginal session could not be confirmed. If it does this, the Message-ID values for the resent messages MUSTimmediately send an MSRP requestmatch those used in thecontext ofinitial attempts. If thenew session. Thisreceiving endpoint receives more than one messageallowswith thedevice acceptingsame Message-ID. It SHOULD assume that theconnectionmessages are duplicates. It MAY take any action based on that knowledge, but SHOULD NOT present the duplicate messages toassociatetheMSRPuser without warning of the duplicates. In this situation, the endpoint MUST choose Message-ID values so that they are unique in the context of both the original sessionwithand theconnection. Thisreplacement session. When endpoints create a new session in this fashion, the chunks for a given logical message MAY be split across the sessions. However, endpoints SHOULD NOT split chunks between sessions under normal circumstances. If aSEND request, ifconnection fails, thedevice has contentsender SHOULD attempt tosend immediately, or a VISIT request. Open Issue: We are still discussing whetherre-setup theoffererURL path using a new offer, for example, in a SIP re-invite or update [13]. It MUST not assume that theanswerer shouldnew URLs in the SDP will beresponsible for connecting. Either endpoint MAY tear down athe same as the old ones. A connectionwhen it no longer has any active or proposedSHOULD not be closed while there are sessionsassociated with thethat are using this connection.6.3 MSRP Messages5. MSRPmessages are either requests or responses. Requests and responses are distinguished from one another by the first line. The first line ofURLs An MSRP URL follows aRequest takes the formsubset of therequest-start entry below. Likewise, the first lineURL syntax in Appendix A of RFC2396 [11], with aresponse takes the formscheme ofresponse-start. The syntax for an MSRP message is as follows: msrp-message"msrp" or "msrps": MSRP_urls =request-start/response-start *(header CRLF) [CRLF body] Closing request-startmsrp-scheme "://" [userinfo "@"] hostport ["/" resource] ";" transport msrp-scheme ="MSRP" SP Method CRLF response-start"msrp" / "msrps" resource ="MSRP" SP Status-Code SP Reason CRLF Method1*unreserved transport =SEND"tcp" /VISIT / other-method other-method = 1*(ALPHA) Campbell (Ed.)token The constructions for "userinfo", "hostport", and "unreserved" are detailed in RFC2396 [11]. URLs designating MSRP over TCP MUST include the "tcp" parameter. If some other transport is used, the "tcp" parameter MUST NOT be present. Since this document only specifies MSRP over TCP, all MSRP URLs herein use the "tcp" parameter. Documents that provide bindings on other transports should define respective parameters for those transports. A MSRP URL with multiple, contradictory transports is invalid, unless some other document specifies meaning for the particular combination of transport parameters. An MSRP URL server part identifies a participant in an MSRP session. Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page15]14] Internet-Draft MSRPMayJuly 2004header = Tran-ID / Message-ID/ Session-URL / Content-Types / From-Path / To-Path / Message-Receipt / Receipt-ID / Byte-Range / Boundary Status-Code = 200 ;Success / 400 ;Bad Request / 403 ;Forbidden / 415 ;Unsupported Content Type / 426 ;Upgrade Required / 481 ;NoIf the server part contains a numeric IP address, it MUST also contain a port. The resource part identifies a particular session/ 506 ;duplicatethe participant. The absence of the resource part indicates a reference to an MSRP host device, but does not specifically refer to a particular session/ other-status ; extension codes other-status = 3(NUM) Reason = token ; Human readable text describing status Tran-ID = "Tr-ID" ":" token Message-ID = "Message-ID" ":" token Boundary = "Boundary" ":" 0*65(bchars) bcharsnospace bcharsnospace= DIGIT / ALPHA / "'" / "(" / ")" / "+" / "_" / "," / "-" / "." / "/" / ":" / "=" / "?" bchars = bcharsnospace / " " Closing = "-------" Boundary Continue-Flag CRLF ; Boundary must match Boundary header field value Continue-Flag = "+" / "$" Content-Type = "Content-Type" ":" media-type media-type = type "/" subtype *( ";" parameter ) type = token subtype = token parameter = attribute "=" value attribute = tokenresource. A scheme of "msrps" indicates the underlying connection MUST be protected with TLS. MSRP has an IANA registered recommended port defined in Section 15.1. This value= token | quoted-string To-Path = "To-Path" ":" msrp_url *(SP msrp_url) From-Path = "From-Path" ":" msrp_url *(SP msrp_url) Message-Receipt = "Message-Receipt" ":" message-receipt-spec ( SEMI receipt-type ) message-receipt-spec = "negative" / "none" / "all" receipt-type = "receipt-type" "=" media-type; <media-type>isdetailed in [RFC3261] Byte-Range = "Byte-Range" ":" byte-range-spec byte-range-spec = first-byte "-" last-byte first-byte = 1*DIGIT last-byte = 1*DIGIT Campbell (Ed.) Expires November 15, 2004 [Page 16] Internet-Draft MSRP May 2004 Receipt-ID = "Receipt-ID" ":" token All requests and responses MUST contain at leastnot aTR-ID header field. All requests must also contain the To-Path and From-Path, Message-ID, and Boundary header fields, as welldefault, as theClosing field. Messages MAY contain other fields, depending onURL negotiation process described herein will always include explicit port numbers. However, themethod or response code. 6.3.1 Message Framing MSRP messages are framed usingURLs SHOULD be configured so that theBoundary header field value. The Boundary header field contains a boundary string.recommended port is used whenever appropriate. This makes life easier for network administrators who need to manage firewall policy for MSRP. TheClosing field contains the same boundary string with a prefix of "-------" (seven hyphens) and single character suffix representingserver part will typically not contain acontinuation flag. The closing field is constructed to allow for simple high speed parsing. The use of seven hyphens forces for of themuserinfo component, but MAY do so tobe aligned onindicate a32 bit boundary. A parser can quickly scanuser account for which theclosing by looking for a 32 bit value equivalent to "----". Once this wordsession isfound, the scanner can carefully check and see ifvalid. Note that this is not theboundary it is looking for or just some random data. The boundary string SHOULD have at least 16 bits of randomness in it. For example, a valid boundary would be "Boundary:6ea7" where the 6ea7 was a randomly chosen four digit hexadecimal number. This reduces the chance of the boundary string colliding with content data. The boundary string MUST NOT occur insidesame thing as identifying thebodysession itself.The sender MUST ensure thatIf acollision does not occur. Since the message fragmentation section (Section 6.7) of this document says that large content should be sent in parcels,userinfo component exists, itshould alwaysMUST bepossible to check for boundary collisions priorconstructed only from "unreserved" characters, tosendingavoid aparcel. Even in the case of streaming content, where the sender does not have all of the content prior to sending the first message, the chunk size should be small enough so that it is practical to check each chunkneed forcollisions prior to sending. The MSRP boundary strings are distinct and independent from any MIME boundaries that may exist in the message body. For example, if the body is of a multipart type, the MIME headers will include a multipart boundary. This multipart boundaryescape processing. Escaping MUST NOT bethe same stringused inthean MSRPBoundary header field.URL. Furthermore, a userinfo part MUST NOT contain password information. TheClosing field contains both the message boundary string andfollowing is an example of a typical MSRP URL: msrp://host.example.com:8493/asfd34;tcp 5.1 MSRP URL Comparison MSRP URL comparisons MUST be performed according to theContinuation-Flag.following rules: 1. TheContinuation-Flag indicates whether the entire content has been sent or not. Normally, the flag takesscheme must match exactly. 2. The host part is compared as case insensitive. 3. If theCampbell (Ed.)port exists explicitly in either URL, then it must match exactly. An URL with an explicit port is never equivalent to another with no port specified. 4. The resource part is compared as case sensitive. A URL without a resource part is never equivalent to one that includes a resource part. 5. URLs with different "transport" parameters never match. Two URLs that are identical except for transport are not equivalent. Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page17]15] Internet-Draft MSRPMayJuly 2004value of "$" (dollar sign) to indicate that all content has been sent, or "+" to indicate that there6. Userinfo parts are not considered for URL comparison. Path normalization isadditional content that hasnotyet been sent. The term "content" in this context means a complete logical instant message, fromrelevant for MSRP URLs. Escape normalization is not required, since the relevant parts are limited to unreserved characters. 5.2 Resolving MSRP Host Device An MSRP host device is identified by theperspectiveserver part of an MSRP URL. If theuser. The content could beserver part contains ashort text message,numeric IP address and port, they MUST be used as listed. If the server part contains along file transfer, etc. The logical instant message does not necessarily correspond one-to-one withhost name and aphysical MSRP message. For example,port, the connecting device MUST determine avideo message may be one logical instant message fromhost address by doing an A or AAAA DNS query, and use theusers' perspective, but it will generally be sentport as listed. If aseries of parcels. Each parcel would be sent as the payload in one physical MSRP SEND request. Allconnection attempt fails, therequests exceptdevice SHOULD attempt to connect to thefinal one would contain "+"addresses returned in any additional A or AAAA records, in thecontinuation-flag to indicateorder the records were presented. This process assumes that thecontentconnection port isnot complete. The final message would contain "$"always known prior toindicateresolution. This is always true for the MSRP URL uses described in this document, thatcomplete content has been sent.is, URLs always created and consumed by automata, rather than by humans. Thesender MUST NOT include a completion-flagintroduction of"+" if the payload MIME type does not support content fragmentation. 6.3.2 Message Examples The followingrelays may create situations where this isan examplenot the case. For example, the MSRPmessage sendingURL that atext payload: MSRP SEND Boundary: dkei38sd To-Path:msrp://alice.atlanta.com:7777/iau39 From-Path:msrp://bob.atlanta.com:8888/9di4ea TR-ID: 456 Message-ID: 456 Content-Type: "text/plain" Hi, Alice! I'm Bob! -------dkei38sd$ The following is an example of an MSRP message containinguser enters into aMIME type that uses an internal boundary (notclient to configure it to use a relay may be intended to beconfused witheasily remembered and communicated by humans, and therefore is likely to omit the port. Therefore, the relay specification [21] may describe additional steps to resolve the port number. MSRPboundary): MSRP SEND Boundary:a38sdo To-Path:msrp://bob.atlanta.com:8888/9di4ea From-Path:msrp:alice.atlanta.com:7777/iau39 TR-ID: 456 Message-ID: 456 Content-Type: multipart/byteranges;boundary=abcde --abcde Content-Type: image/jpeg Campbell (Ed.) Expires November 15, 2004 [Page 18] Internet-Draft MSRP May 2004 Content-range: bytes 0-*/50270 [large jpg file] --abcde-- -------a38sdo$ 6.4 MSRP Transactions Andevices MAY use other methods for discovering other such devices, when appropriate. For example, MSRPtransaction consistsendpoints may use other mechanisms to discover relays, which are beyond the scope ofexactly one request and one response. A response matchesthis document. 6. Method-Specific Behavior 6.1 Constructing Requests To form atransaction ifnew request, thefollowing are true: It sharessender creates a unique transaction identifier and uses this and thesame TR-ID value. It is received onmethod name to create an MSRP request start line. Next, thesame connection on whichsender places therequest was sent. The To-Path hastarget path in asingle entry, which matches the response recipient's local URI forTo-Path header, and thesession. Endpoints MUST select TR-ID header field valuessender's URL inrequests so that theya From-Path header. If multiple URLs arenot repeated by the same endpointpresent inscope ofthegiven session. TR-ID values SHOULD be globally unique. The TR-ID space of each endpointTo-Path, the leftmost isindependent of that of its peer. Endpoints MUST NOT infer any semantics fromtheTR-ID header field beyond whatfirst URL visited; the rightmost URL isstated above. In particular, TR-ID valuesthe last URL visited. The processing then becomes method specific. Additional method-specific Campbell, et al. Expires January 16, 2005 [Page 16] Internet-Draft MSRP July 2004 headers arenot required to followadded as described in the following sections. After anysequence. MSRP Transactions complete whenmethod-specific headers are added, processing continues to handle aresponse is received, or afterbody, if present. A body in atimeout interval expires with no response. EndpointsNon-SEND request MUSTtreat such timeouts in exactlyNOT be longer than 2048 octets. If thesame way they would treatrequest has a500 response.body, it must contain a Content-Type header field. It may contain other MIME specific headers. Thetimeout interval SHOULDContent-Type header MUST be30 seconds, but other values maythe last header line. The body MUST beestablished as a matter of local policy. 6.5 MSRP Sessions AN MSRP session is a context in which a series of instant messages are exchanged, using SEND requests. A session has two endpoints, identified by MSRP URLs. 6.5.1 Initiating an MSRP session When an endpoint wishes to engage a peer in a message session, it invitesseparated from thepeer to communicate usingheaders with anSDP offer, carried over SIP or some other protocol supporting the SDP offer/answer model. For the purpose of this document, we will refer to the endpoint choosing to initiate communication as the offerer, and the peer being invited as the answerer. Under normal circumstances,extra CRLF. If theanswerer MUST be prepared to acceptrequest contains aconnection frombody, theofferer. Campbell (Ed.) Expires November 15, 2004 [Page 19] Internet-Draft MSRP May 2004 The offerersender MUSTperformcheck thefollowing steps: 1. Construct a MSRP URLbody toserve asinsure that thelocal URL. 2. Construct an SDP offer as described in Section 5, includingclosing sequence (a CRLF, seven hyphens, and thelist of allowed IM payload formatstransaction identifier) is not present in theaccept-types attribute. The offerer puts its local URL intobody. If thepath attribute, as describedclosing sequence is present inSection 5.4. This URL becomes the offerer's local path. 3. Send the SDP offer using the normal processing forthesignaling protocol. Ifbody, theanswerer chooses to participate, itsender MUSTperform the following steps: 1. Store the contents of the offered sdp path attribute as the remote path for he session. 2. Constructchoose aMSRP URLnew transaction identifier thatresolves to itself. Save this asis not present in thelocal URL forbody, and add thesession. 3. Listen for a connection onclosing sequence, including thetransport, address,"$" or "+" character, andport described by the local URL. 4. SendaSDP answer via the signaling protocol, according tofinal CRLF. Finally, requests which have no body MUST NOT contain a Content-Type header or any other MIME specific header. Bodiless requests MUST contain a closing sequence after thefollowing rules: 1. The C-linefinal header. Once a request iscopied unmodified from the offer. 2. The accept-types attribute containsready for delivery, theSEND payload media types thatsender follows theanswerer is willingconnection management (Section 4.4) rules toaccept. The accept-types attribute inforward theanswerrequest over an existing open connection or create a new connection. 6.1.1 Delivering SEND requests When an endpoint has a message to deliver, it first generates a new unique Message-ID. This ID MUST beeitherunique within thesame as thatscope of theoffer, or a subset. 3. The path attribute contains the answerer's local URL. Again, this document assumes that no relays are introduced.session. If theanswerer were to introduce onemessage is larger than 2048 octets in length, it either generates an interruptible chunk (which is RECOMMENDED), ormore relay,itwould add the appropriate URLs to the path attribute inMAY break theSDP answer.complete message into chunks of 2048 octets. Itwould not need to listen forthen generates aconnection, asSEND request for each chunk, following thefirst relay in its path would have that honor. Whenprocedures for constructing requests (Section 6.1). Each chunk MUST contain a Message-ID header field containing theofferer receivesMessage-ID. If theanswer,sender wishes non-default status reporting, it MUSTperform the following steps: 1. Saveinsert a Report-Failure and/or Report-Success header field with an appropriate value. All chunks of thepath attribute contents fromsame message MUST use theSDP answer as the remote path. Campbell (Ed.) Expires November 15, 2004 [Page 20] 2. Designate the first entry in the remote path as the adjacent-hop URL. 3. Check to see if a connection already exists that is associated with URL that matches the scheme, host part,same Report-Failure andport of the adjacent-hop URL.Report-Success values in their SEND requests. Ifsuch a connection exists,success reports are requested, the sending deviceSHOULD reuse it, rather than opening a new connection. 4. If no matching connection exists, attemptMAY wish toopenrun aconnection to the adjacent hop using the transport, address, port,timer of some value that makes sense for it's application andprotection mode designated by the adjacent-hop URL. 5. If the connection succeeds, ortake action if aconnectionsuccess Report isreused, immediately send a MSRP request to the opposite peer. This SHOULDnot received in this time. There is no universal value for this timer. For many IM applications, it may bea visit request, but MAY2 minutes while for some trading systems it may be under aSEND requestsecond. Regardless of whether such a timer is used, if theendpointsuccess report haslegitimate content to send. 6.5.2 Handlingnot been received by the time the session is ended, theinitial request An MSRPdevicethat accepts a network connection will receive an immediateSHOULD Campbell, et al. Expires January 16, 2005 [Page 17] Internet-Draft MSRPrequest fromJuly 2004 inform theconnecting endpoint. This may be a SEND or VISIT request. When an endpoint receives suchuser. The first chunk of the message SHOULD, and all subsequent chunks MUST include arequest, itByte-Range header field. The range-start field MUSTperformindicate thefollowing procedures: 1. Check if state exists for a session with a local URL that matchesposition of theTo-Path headerfirst byte in the body in the overall message. The range-end fieldvalueSHOULD indicate the position of theVISIT request. If so, and if no previous request has been received for that URL on a different connection, then return a 200 response, and save state associating the first URLlast byte in theFrom-Path header field with the connection on whichbody, if known. It MUST take therequest was received . 2. Ifvalue of "*" if thestate exists, and a matching request has occurred on a different connection, return a 506 response and do not change session state in any way. 3. If no matching state exists, return a 481 response, and do not change session state in any way. 6.5.3 Sending Instant Messages on a Session Once a MSRP session has been established, either endpoint may send instant messages to its peer usingposition is unknown, or if theSEND method. When an endpoint wishes to do so, it MUST construct a SENDrequestaccordingneeds tothe following process: 1. Insert a To-Path headerbe interruptible. The total fieldcontainingSHOULD contain thepath tototal size of theopposite endpoint, in order from left to right. 2. Insertmessage, if known. The total filed MAY contain aFrom-Path header field containing"*" if thelocal URL. Campbell (Ed.) Expires November 15, 2004 [Page 21] Internet-Draft MSRP May 2004 3. Inserttotal size of the messagepayloadis not known in advance. All chunks other than thebody, and the media typelast MUST include a "+" character in theContent-Type header field. The media type MUST match onecontinuation field of thetypesclosing line. The final chunk MUST use a "$" character. The sender MUST send all chunks in Byte-Range order. (However,the receiver cannot assume theformat list negotiatedrequests will be delivered in order, as an intervening relay may have changed theSDP exchange.order.) Ifa "*" was present intheaccept-types attribute, then the media type SHOULD match one of the explicitly listed entries, but MAY be any other arbitrary value. 4. Set the TR-ID and Message-ID header fields to a unique value. ThesenderMAY set these fieldschooses tothe same value. 5. Sendsend a body larger than 2048 octets in a single chunk, the requeston the connection associatedMUST be constructed so that it can be interrupted. A SEND request is interruptible if it either has no Byte-Range header field, or has such a field withthe session. 6. Ifa2xx response code is received,"*" in thetransaction was successful. 7. Iflast-byte sub-field. A SEND request is interrupted while a415 responsebody isreceived, this indicatesin therecipient is unable or unwilling toprocessthe media type. The sender SHOULD NOT attemptof being written tosend that particular media type again inthecontextconnection by simply noting how much ofthis session. 8. If any other response code is received, or if the transaction times out, the endpoint SHOULD assumethesessionmessage hasfailed, either tear down the session, or attemptalready been written tore-establishthesession by sending an updated SDP offer proposing a new connection. If a new connection is established,connection, then writing out theendpoint MAY chooseboundary string toresend the content onend thenew connection. Open Issue: Do we need to create a duplicate mechanism to suppress duplicate messages when a new connection is establishedchunk. It can then be resumed inthis fashion? mechanism? List consensus seems to indicate we do. We may need to specify that the tr-id space spansasequence of connections if they are associatedanother chunk with the samestream,Message-ID andof course, specify what it means for a stream to span connections. When an endpoint receivesaSEND request, it MUST performByte-Range header range start field containing thefollowing steps. 1. Check that it has state for a session with a local URL matching the To-Path value. If no matching session exists, return a 481 response. 2. Determine that it understandsposition of themedia type infirst byte after thebody, if any exists. 3. If it does, return a 200interruption occurred. SEND requests larger than 2k MUST be interrupted to send pending responseand renderor REPORT requests. If multiple SEND requests from different sessions are concurrently being sent over themessage tosame connections, theuser. The method of rendering isdevice SHOULD implement some scheme to alternate between them such that each concurrent request gets amatterchance to send some fair portion oflocal policy. If the message contained no bodydata atall, the endpoint should quietly ignore it. Campbell (Ed.) Expires November 15, 2004 [Page 22] 4. If it does not understandregular intervals suitable to themedia type, return a 415 response.application. Theendpointsender MUST NOTreturnassume that a415 response for any media type for which it indicated support inmessage is received by theSDP exchange. 6.5.4 Ending a Session When either endpoint in an MSRP session wishes to endpeer with thesession,same chunk allocation itfirst signals its intent using the normal processing forwas sent with. An intervening relay could possibly break SEND requests into smaller chunks, or aggregate multiple chunks into larger ones. The default disposition of body is "render". If thesignaling protocol. For example, in SIP,sender wants different disposition, itwould sendMAY insert aBYE request to the peer. After agreeingContent-Disposition header. Since MSRP is a binary protocol, transfer encoding MUST be "binary". Campbell, et al. Expires January 16, 2005 [Page 18] Internet-Draft MSRP July 2004 6.1.2 Sending REPORT requests REPORT requests are similar toend the session, the host endpointSEND requests, except that report requests MUSTrelease any resources acquired as part ofNOT include Report-Success or Report-Failure header fields, and MUST contain a Status header field. REPORT requests MUST contain thesession. Each peerMessage-ID header from the original SEND request. An MSRP endpoint MUSTdestroy all local state forbe able to generate success REPORT requests. REPORT requests MAY include a body. If a body is included, it SHOULD be of thesession. This involves completely removingDSN MIME type detailed in RFC1894 [8], but MAY be of some other type if thestate entry forsender of thesession and invalidatingSEND request indicated support in thesession URL. If no other sessions are using"receipt-type" parameter of theconnection,respective Report-Success or Report-Failure header field. This parameter contains theendpointalternative MIME type thatopened itSHOULDtear it down. However, the passive party MAY tear downbe used for this particular report. A client specifying anunused connection after a locally configured timeout period. Whenalternative 'receipt-type' for an MSRP transaction MUST also be capable of receiving the default format specified in this RFC1894. Use of the DSN MIME format in MSRP is described in Section 8 An endpointchooses to closeMUST send asession, it may have SEND transactions outstanding. For example,success report if itmay have sendsuccessfully receives a SENDrequests torequest whichit has not yet receivedcontained aresponse,Report-Success value of "yes", and either contains a complete message, orit may have received SEND requests that to which it has not responded. Once an endpoint has decided to closecontains theconnection, it SHOULD wait for such outstanding transactions to complete. It SHOULD NOT generate any new SEND transactions, and it MAY choose not to respond to any new SEND requests that are received after it decideslast chunk needed toclosecomplete thesession. It SHOULD not respond to any new messages that arrive after it signals its intent to closemessage. This request is sent following the normal procedures (Section 6.1), with a few additional requirements. The endpoint inserts a To-Path header field containing the From-Path value from the original request, and a From-Path header containing the URL identifying itself in the session.When anThe endpointis signaledthen inserts a Status header field with a namespace ofits peer's intent to close"000", asession, itshort-status of "200" and a relevant Reason phrase, and a Message-ID header field containing the value from the original request. Positive status reports SHOULD NOTinitiate any more SEND requests. It SHOULD waitinclude a payload. The endpoint MUST NOT send a success report forany outstanding transactionsa SEND request that either contained no Report-Success header field, or contained such a field with a value of "no". 6.1.3 Failure REPORT Generation If an MSRP endpoint receives a SEND request that itinitiated to complete,cannot process for some reason, andit SHOULD attempt respond to any open SEND transactions received prior to being signaled. It isthe Report-Failure header either was notpossible to completely eliminatepresent in thechanceoriginal request, or had a value of "yes", it SHOULD simply send asession terminatingtransaction response withincomplete SEND transactions. When this occurs,an appropriate error response code. However, there may be situations where theendpoint SHOULD clearly informerror cannot be determined quickly, such as when theuserendpoint is a gateway thatthe messages may not have been delivered. 6.5.5 Managing Session State and Connections Amust wait for a downstream network to indicate an error. In this situation, it MAY Campbell, et al. Expires January 16, 2005 [Page 19] Internet-Draft MSRPsession is represented by state at each endpoint, identified byJuly 2004 send a 200 OK response to thelocal URLrequest, andremote path. An active session also has an associated network connection. If the connection fails for any reason, the device MUST invalidate the session state for all sessions using the connection. Oncethen send aCampbell (Ed.) Expires November 15, 2004 [Page 23] Internet-Draft MSRP May 2004 connectionfailure REPORT request when the error isdropped, any associated session state MUST NOT be reused.detected. Ifanthe endpointwishes to continue to communicate after detecting a connection failure, it MAY initiatereceives anew SDP exchange to negotiateSEND request with anew session URL. Otherwise,Report-Failure header field value of "none", then it MUST NOT send a failure REPORT request, and SHOULDattempt to tear down the session using the rulesNOT send an MSRP response. Construction ofthe signaling protocol. It would be nice to allow sessionsfailure REPORT requests is identical to that for success reports, except the Status header code and reason fields SHOULD contain appropriate error codes. Any error response code defined in this specification MAY also berecovered afterused in failure reports. Failure REPORT requests MAY contain aconnection failure, perhapspayload, using the DSN MIME type. They MAY contain some other type if allowed byallowinga receipt-type in theactive endpoint to reconnect, and sendReport-Failure header field. If anew VISIT request. However, this approach createsfailure report is sent in response to arace condition between the timeSEND request that contained a chunk, it MUST include a Byte-Range header indicating thehosting device noticesactual range being reported on. It can take thefailed connection,range-start and total values from thetime that the endpoint tries to recoveroriginal SEND request, but MUST calculate thesession. Ifrange-end field from theendpoint attempts to reconnect prioractual body data. Endpoints SHOULD NOT send REPORT requests if they have reason to believe thehosting device noticing the failure, the hosting devicerequest willinterpret the recovery attempt as a conflict. The only way around this wouldnot beto force the hosting device to dodelivered. For example, they SHOULD NOT send aliveness checkREPORT request onthe original connection, which would createalot of complexity and overhead that do not seem to be worth the trouble. 6.6 Delivery Status Notification Delivery Status Notification (DSN)[10] provides an extensible MIME content-typesession that isused to convey both positive and negative status of messages in the network.no longer valid. Thisfunctionality is extremely usefulsection only describes failure report generation behavior for MSRPsessions that traverse a relay device.endpoints. Relaysupportbehavior isconsidered out ofbeyond the scopeforof thisspecificationdocument, and will beincludedconsidered in a separatespecification. This section will only cover functionality requireddocument. We expect failure reports to be more commonly generated bynon-relay aware endpoints for basic MSRP operation. Anrelays than by endpoints. 6.2 Constructing Responses If an MSRP endpointMUST be capablereceives a request that either contains a Report-Failure header value ofperforming the DSN operations described in this specification and SHOULD support the DSN MIME type outlined. An MSRP endpoint MAY use"yes", or does not contain a Report-Failure header field at all, it MUST immediately generate a response. Likewise, if analternative payload for reporting message status using the procedures outlined in this specification. 6.6.1 Endpoint DSN Request AnMSRP endpoint receives a request thatwishes to be informedcontains a Report-Failure header value ofmessage delivery/failure needs to request such information. This"partial", and the receiver isachieved by including an MSRP Receipt-Request header inunable to process therequest. The header can equal one of three values: negative: Indicatesrequest, it SHOULD immediately generate a response. To construct theclient only requires failure delivery report. none: Indicatesresponse, theclient requires no delivery reports. all: Indicatesendpoint first creates theclient requires both positiveresponse start-line, inserting appropriate response code andnegative delivery reports. Withinreason fields. The transaction identifier in thescope of this specificationresponse start line MUST match the transaction identifier from theReceipt-Requestoriginal request. The endpoint then inserts an appropriate To-Path headeris Campbell (Ed.)field. If the request triggering the response was a SEND request, the To-Path Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page24]20] Internet-Draft MSRPMayJuly 2004only usedheader field is formed by copying the last (right-most) URI inMSRPthe From-Path header field of the request. (Unlike other methods, responses to SENDrequests. Future extensionsrequests are returned only to the previous hop.) For responses to all other requests, the To-Path header field contains the full path back to the original sender. This full path is generated by taking the list of URLs from the From-Path of the original request, reversing the list, and writing the reversed list into the To-Path of the response. (Legal REPORT requests do not request responses, so this specificationMAY usedoesn't exercise themechanismbehavior describedin this document for delivery/failure status notification of other MSRP requests. The default valueabove, however we expect that extensions forthisgateways and relays will need such behavior.) Finally, the endpoint inserts a From-Path headerif not presentfield containing the URL that identifies it ina request is 'negative'. An examplethe context ofthisthe session, followed by the closing sequence after the last headerwould be: Message-Receipt: negativefield. Thedefault DSN MIME type is detailed in RFC 1894[10]. It is possible for MSRP endpoints to use a different format if required. This canresponse MUST beachieved by including a 'receipt-type' parametertransmitted back on the same connection on which the original request arrived. 6.3 Receiving Requests The receiving endpoint must first check the URL in theMessage-Receipt header. This parameter containsTo-Path to make sure thealternative MIME type that SHOULD be used for this particular receipt transaction. A client specifying an alternative 'receipt-type' for an MSRP transaction MUST also be capable of receiving the default format specified in this document. This allows intermediaries, such as MSRP relays, to generate failure reports when MSRP transaction failure occurs. 6.6.2 DSN generation An MSRP endpoint implementing this specification SHOULD be ablerequest belongs togenerate positive delivery status of MSRP requests. On receivinganMSRPexisting session. When the requestcontaining a Message-Receipt header with a value of 'all',is received, theendpointTo-Path willcarry out normal MSRP response generation andhave exactly one URL, which MUSTgeneratemap to anMSRP REPORT request usingexisting session that is associated with thefollowing procedures: 1. Insert a To header containingconnection on which theFrom value fromrequest arrived. If this is not true, and theoriginal request. 2. Insertrequest contained aFromReport-Failure headercontaining the Tovaluefrom the original request. 3. Insert the message status payload in the bodyof "no", then the receiver SHOULD quietly ignore the request. If thedefault DSN MIME type from DSN[10]Report-Failure header isusednot present, or had any other value, then theMSRP Content-Type header MUST use the value multipart/report. The relevance of DSN headers in MSRP can be found in section 7.6.5. An alternative MIME type MAY be used butreceiver MUSTbe specified inreturn a 481 response. Further request processing by theContent-Type header. Negative DSN generationreceiver isconsidered out ofmethod specific. 6.3.1 Receiving SEND requests When thescope of this document and will be covered inreceiving endpoint receives aseparate MSRP relay document. 4. InsertSEND request, it first determines if it contains anew transaction ID (TR-ID). 5. (Optional) Insert an MSRP Byte-Range header containing the value from 'multipart/byteranges' MIME header Content-rangecomplete message, or a chunk from a larger message. If thepayloadrequest contains no Byte-Range header, or contains one with a range-start value of "1", and the closing line continuation flag has achunkedvalue of "$", then the request contained the entire message. Otherwise, the receiver looks at the Message-ID value to associate chunks together into the original message. Itis possible that an entity downstream may decideforms a virtual buffer tobreak up an MSRP SEND messagereceive the message, keeping track of which bytes have been received andsendwhich are missing. The receiver takes the data from the request and places it inseparate chunks.the appropriate place in the buffer. Theoriginating client would be transparent to this operation but would need to be informedreceiver MUST determine the actual length of each chunk by inspecting the payload itself; it is possible the body is shorter than the range-end field indicates. This can occur if the sender interrupted aCampbell (Ed.)SEND request unexpectedly. It is worth nothing Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page25]21] Internet-Draft MSRPMayJuly 2004DSN only represents partthat the chunk that has a termination character of "$" defines therequest. 6.6.3 Receiving positive DSN An MSRP endpoint implementing this specification MUST be able to receive positive delivery statustotal length ofMSRP requests. 6.6.4 Receiving negative DSN An MSRP endpoint implementing this specification MUST be able to receive negative delivery statusthe message. What is done with the body is outside the scope of MSRPrequests. 6.6.5 DSN headers in MSRPand largely determined by the MIME type. Theformat of a default DSN reportbody MAY be rendered after the whole message istaken from RFC 1894[10]. Only a minimal subset of fields are used,received or partially rendered asdetailed init is being received. If theremainder of this section. 6.6.5.1 Per-Message DSNSEND request contained a Content-Type headerusage original-envelope-id: See Section 6.6.5.3 reporting-mta: See Section 6.6.5.4 dsn-gateway: Not Used received-from-mta: Not Used arrival-date: Not Used 6.6.5.2 Per-Recipient DSN header usage original-recipient Not Used final-recipient: See Section 6.6.5.5 action: See Section 6.6.5.6 status: See Section 6.6.5.7 remote-mta: Not Used diagnostic-code: Not Used last-attempt-date: Not Used will-retry-until:Not Used Campbell (Ed.) Expires November 15, 2004 [Page 26] Internet-Draft MSRP May 2004 6.6.5.3 original-envelope-id usage The 'original-envelope-id'fieldcontains a unique identifier which is used to correlateindicating an unsupported MIME type, the receiver SHOULD send aDSN report with415 response, if allowed by theoriginatingReport-Failure header field. All MSRPtransaction. The entity generating the DSN reportendpoints MUSTinsertbe able to receive theMessage-IDmultipart/mixed and multipart/alternative MIME types. If the SEND request contained a Report-Success header field with a valuethat appeared inof "yes", and theoriginal MSRPrequestintois either contains the'original-envelope-id' field. This allows a requesting cliententire message or the last chunk needed toexplicitly correlatecomplete a message, the receiver MUST send a success REPORT requestwithback to the sender. 6.3.2 Receiving REPORT requests When an endpoint receives a REPORT request, it may correlate it to the originalrequest. This correlation is implementation specificSEND request using the Message-ID andmakes no requirements on clients to holdthe Byte-Range, if present. If it requested success reports, then it SHOULD keep enough statefor transactions ID's. Information regardingabout each outstanding sent message so that it can correlate REPORT requests to the original messages. An endpoint that receives a REPORT requestcan be obtained fromcontaining a Status header with a namespace field of "000", it SHOULD interpret theDSN MIME type outlinedreport in[10]. 6.6.5.4 reporting-mta The 'reporting-mta-field' MUST followexactly theguidelines set out in RFC 1894[10]. The 'mta-name-type' from RFC1894[10] MUST usesame way it would interpret an MSRP transaction response with a response code matching thevalue of 'msrp-name-type', as defined in section 9 of this specification. The 'mta-name' valueshort-code field. It is possible to receive a failure report or a failure transaction response for a chunk that is currently being delivered. In thisfield as specified in RFC1894 [10] MUST equal an MSRP URL representing itself. 6.6.5.5 final-recipient The 'final-recipient-field' MUST followcase theguidelines set out in RFC 1894[10].entire message corresponding to that chunk should be aborted. It is possible that an endpoint will receive a REPORT request on a session that is no longer valid. The'address-type' from RFC1894 [10] MUST use the value of 'msrp-address-type', as defined in section 9 ofendpoint's behavior if thisspecification.happens is a matter of local policy. The'address-type' value for this field as specifiedendpoint is not required to take any steps to facilitate such late delivery, i.e. it is not expected to keep a connection active inRFC1894 [10] MUST equalcase late REPORTs might arrive. 7. Using MSRP with SIP 7.1 SDP Offer-Answer Exchanges for MSRP Sessions MSRP sessions will typically be initiated using thevalue contained inSession Campbell, et al. Expires January 16, 2005 [Page 22] Internet-Draft MSRP July 2004 Description Protocol (SDP) [2] via the SIP offer-answer mechanism [3]. This document defines a handful of new SDP parameters to setup MSRP'To' header fromsessions. These are detailed below and in theoriginal request being reported on. 6.6.5.6 actionIANA Considerations section. The'action' field MUST follow the guidelines set out in RFC 1894[10].general format of an SDP media-line is: m=<media> <port> <protocol> <format list> An offered or accepted MSRPentity constructing a DSN reportmedia-line MUSTusehave the'delivered'following valuefor a successful delivery and MUST useexactly, with the'failed' value for an un-successful delivery. The other values specified forexception that the'action'port fieldin RFC 1894[10]MAY beused. 6.6.5.7 status The 'status' field MUST follow the guidelinessetout in RFC 1894[10]. An MSRP entity constructingto zero. (According to [3], aDSN reportuser agent that wishes to accept an offer, but not a specific media-line MUSTrepresentset the port number of that media-line to zero (0).) m=message 9 msrp * While MSRPstatus code incould theoretically carry any media type, "message" is appropriate. For MSRP, thecorrect format detailedport number is always ignored--the actual port number is provided inRFC 1894[10] foran MSRP URL. Instead "9" is used, which is an innocuous value which is assigned to the'status' fielddiscard port. The protocol is always "msrp", and the value of the format list is always aDSN report.single asterisk character ("*"). An MSRPstatus code consists ofmedia-line is always accompanied by athree digit number whilemandatory "path" attribute. This attribute contains aDSN status is three digitsspace separatedby '.'. An example would be: Status: 5.0.0 (unknown permanent failure) Campbell (Ed.) Expires November 15, 2004 [Page 27] Internet-Draft MSRP May 2004 When generatinglist of URLs that must be visited to contact the user agent advertising thisfieldsession-description. If more than one URL is present, the leftmost URL is the firstdigit ofURL that must be visited to reach theMSRP status code (working from lefttarget resource. (The path list can contain multiple URLs toright) MUST be placed inallow for thefirst partdeployment of gateways or relays in the'status' DSN field. The second digitfuture.) MSRP implementations which can accept incoming connections will typically only provide a single URL here. MSRP media lines MUST also beplaced in the second part of the 'status' DSN field. The third digit MUST be placedaccompanied by an "accept-types" attribute. This attribute contains a list of MIME types which are acceptable to the endpoint. A "*" entry in thethird part ofaccept-types attribute indicates that the'status' DSN field. An example of a DSN 'status' field value would be: An MSRP '200' success response would be mapped to: Status: 2.0.0 (OK) The MSRP reason phrase mappedsender may attempt toa DSN 'status' field MAY be enclosed in parentheses if required. 6.7 Message Fragmentation MSRP devices SHOULD break largesend contentinto fragments,with media types that have not been explicitly listed. Likewise, an entry with an explicit type andsend each fragment inaseparate SEND request. A message fragment sent in this way is known"*" character asa "parcel". Large content is defined to be anything larger than 2K bytes. Each parcel is encapsulated usingthe"message/byteranges" MIME type, defined in RFC2616 [11],subtype indicates that the sender may attempt tocorrelate partssend content with any subtype of that type. If themessage. The definition of large is determined by local policy.receiver receives an MSRPendpoints MUST be capable of receiving and processing fragmented messages. Open Issue: Do we want to negotiate the use of message/byteranges like any other MIME type? I assume no, as we want to allow relays to fragment messages,request andrelays are not privyis able to process thecontent-types negotiated formedia type, it does so. If not, it will respond with asession. Although relays are not in scope for this document, we expect415 response. Note thatrelays will be able to introduce fragmentation, as well as change the fragmentation of previously fragmented messages. Therefore,allMSRP endpoints MUSTexplicit entries SHOULD beable to receive fragmented messages. 6.7.1considered preferred over any non-listed types. Campbell, et al. Expires January 16, 2005 [Page 23] Internet-Draft MSRPUsageJuly 2004 This feature is needed as, otherwise, the list ofmessage/byteranges The "message/byteranges" type allows multiple ranges in a single document. However, MSRPformats for rich IM devicesMUST NOTmay be prohibitively large. The accept-types attribute may includemore than one byte rangecontainer types, that is, MIME formats that contain other types internally. If compound types are used, the types listed ina single request. AlthoughtheHTTP usage for a document containing a single byte range indicates puttingaccept-types attribute may be used both as the"Content-Range" headerroot payload, or may be wrapped in aheader field, rather thanlisted container type. Any container types MUST also be listed in the accept-types attribute. Occasionally an endpoint will need to specify a MIME bodyitself, "Content-Range" MUST NOT appear astype that can only be used if wrapped inside a listed container type. Endpoints MAY specify MIME types that are only allowed when wrapped inside compound types using the "accept-wrapped-types" attribute in anMSRP header field. Open Issue: How muchSDP a-line. The semantics for accept-wrapped-types are identical to those of themessage/byteranges specification should we explain or copy forward? Copying too much obscuresaccept-types attribute, with thefactexception thatrfc2616 isthenormative definition, but itspecified types may only behelpful to have more context here. Campbell (Ed.) Expires November 15, 2004 [Page 28] Internet-Draft MSRP May 2004 Ifused when wrapped inside containers. Only types listed in theMSRP device has a priori knowledge ofaccept-types attribute may be used as theoverall content length, it SHOULD put that length into instance-length. The device MAY place a "*" in instance-length if it does not have such knowledge. Similarly, if"root" type for thedevice has a priori knowledge of the number of bytes in a byte range, it SHOULD place the last byte position in last-byte-pos. Otherwise, it MAY use a "*". If "*" is present, the recipient MUST determine the last-byte-position through normal request framing and body processing. An MSRP device MUST put the initial byte positionentire body. Since any type listed infirst-byte-pos. 6.8 Method Descriptions This section summarizes the purpose of each MSRP method. All MSRP messages MUST contain the TR-ID, From-Path, To-Path, and Boundary header fields, as well as a Closing field. Additional requirements exist depending on the individual method. 6.8.1 SEND The SEND method isaccept-types may be usedbyboththe host and visitor endpoints to send instant messages to its peer endpoint. A SEND request MUST contain a To-Path header field containing the sender's remote path,as aFrom-Path header field containing the sender's local URL,root body, anda Message-ID header field. SEND requestswrapped in other bodies, format entries from accept-types SHOULDcontain a MIME body part. The body MUSTNOT be repeated in this attribute. This approach does not allow for specifying distinct lists of acceptable wrapped types for different types of containers. If an endpoint understands amediaMIME typeincludedin theformat list negotiated in the SDP exchange. If a bodycontext of one wrapper, it ispresent,assumed to understand it in therequest MUST contain a Content-Type header field identifyingcontext of any other acceptable wrappers, subject to any constraints defined by themedia typewrapper types themselves. The approach of specifying types that are only allowed inside of containers separately from thebody. To Do: We planprimary payload types allows an endpoint toexpandforce the use ofMIME headers to allow any standard MIME header incertain wrappers. For example, aSEND request. This is not included in this version forCPIM [14] gateway device may require all messages to be wrapped inside message/cpim bodies, but may allow several content types inside thesake of gettingwrapper. If thedraft out as soon as possible, but will follow soon. 6.8.2 VISIT The visiting endpoint usesgateway were to specify theVISIT methodwrapped types in the accept-types attribute, its peer might attempt toassociate a network connection withuse those types without thesession state atwrapper. All types listed in either thelistening device. A VISIT request MUSTaccept-types or accept-wrapped-types attributes MAY include aTo-Path header includingmax-size parameter, indicating thesender's remote path, and a From-Path header field containinglargest message it is willing to accept of that type. Max-size refers to thesender's local URL. This purpose can also be served by a SEND request, ifcomplete message, not thesender has immediate content to send. Open Issue: Theresize of any one chunk. Senders MUST NOT exceed the max-size limit, if any, when sending messages of any listed type. If a type isoverlap between SEND and VISIT as currently defined. We should consider either removing VISIT entirely and Campbell (Ed.)listed without the parameter, then no preset size limit exists. Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page29]24] Internet-Draft MSRPMayJuly 2004just useaccept-types = accept-types-label ":" format-list accept-types-label = "accept-types" accept-wrapped-types = wrapped-types-label ":" format-list wrapped-types-label = "accept-wrapped-types" format-list = format-entry *( SP format-entry) format-entry = ctype [SEMI max-size] ctype = (type "/" subtype) / (type "/" "*") / ("*") type = token subtype = token max-size = "max" "=" 1*(DIGIT) 7.1.1 URL Negotiations Each endpoint in anempty SEND request, or we should always require VISIT. (This would not apply toMSRP session is identified by aendpoint connecting to its own relay.) 6.8.3 REPORT Report is used by an endpointURL. These URLs are negotiated in the SDP exchange. Each SDP offer orrelay to convey message delivery status 6.9 Response Code Descriptionsanswer MUST contain one or more MSRP URL in a path attribute. Thissection summarizesattribute has thevarious response codes. Exceptfollowing syntax: "a=path:" MSRP_URL *(SP MSRP_URL) wherenoted, all responsesMSRP_URL is an msrp: or msrps: URL as defined in Section 5. MSRP URLs included in an SDP offer or answer MUSTcontaininclude explicit port numbers. An MSRP device uses the URL to determine aTR-ID header field matchinghost address, port, transport, and protection level when connecting, and to identify theTR-ID header fieldtarget when sending requests and responses. The offerer and answerer each selects a URL to represent itself, and send it to the peer device in the SDP document. Each device stores the path value received from the peer, and uses that value as the target for requests inside the resulting session. If the path attribute received from the peer contains more than one URL, then the target URL is the rightmost, while the leftmost entry represents the adjacent hop. If only one entry is present, then it is both the peer and adjacent hop URL. The target path is the entire path attribute value received from the peer. The following example shows an SDP offer with a session URL of "msrp://a.example.com:7394/2s93i;tcp" v=0 o=alice 2890844526 2890844527 IN IP4 alice.example.com s= c=IN IP4 alice.example.com m=message 9 msrp * a=accept-types:text/plain Campbell, et al. Expires January 16, 2005 [Page 25] Internet-Draft MSRP July 2004 a=path:msrp://a.example.com:7394/2s93i;tcp The rightmost URI in the path attribute MUST identify the endpoint that generated the SDP document, or some other location where that endpoint wishes to receive requests associated with the session. It MUST be assigned for this particular session, and MUST NOT duplicate any URI in use for any other session in which the endpoint is currently participating. It SHOULD be hard to guess, and protected from eavesdroppers. This is discussed in more detail in Section 14. 7.1.2 Path Attributes with Multiple URLs As mentioned previously, this document describes MSRP for peer-to-peer scenarios, that is, when no relays are used. However, we expect a separate document to describe the use of relays. In order to allow an MSRP device that only implements the core specification to interoperate with devices that use relays, this document must include a few assumptions about how relays work. An endpoint that uses one or more relays will indicate that by putting a URL for each device in the relay chain into the SDP path attribute. The final entry would point to the endpoint itself. The other entries would indicate each proposed relay, in order. The first entry would point to the first relay in the chain; that is, the relay to which the peer device, or a relay operation on its behalf, should connect. Endpoints that do not wish to insert a relay, including those that do not support relays at all, will put exactly one URL into the path attribute. This URL represents both the endpoint for the session, and the connection point. While endpoints that implement only this specification will never introduce a relay, they will need to be able to interoperate with other endpoints that do use relays. Therefore, they MUST be prepared to receive more than one URL in the SDP path attribute. When an endpoint receives more than one URL in a path header, only the first entry is relevant for purposes of resolving the address and port, and establishing the network connection, as it describes the first adjacent hop. If an endpoint puts more than one URL in a path attribute, the final URL in the path (the peer URL) attribute MUST exhibit the uniqueness properties described above. Uniqueness requirements for other entries in the attribute are out of scope for this document. Campbell, et al. Expires January 16, 2005 [Page 26] Internet-Draft MSRP July 2004 7.1.3 Updated SDP Offers MSRP endpoints may sometimes need to send additional SDP exchanges for an existing session. They may need to send periodic exchanges with no change to refresh state in the network, for example, SIP Session Timers. They may need to change some other stream in a session without affecting the MSRP stream, or they may need to change an MSRP stream without affecting some other stream. Either peer may initiate an updated exchange at any time. The endpoint that sends the new offer assumes the role of offerer for all purposes. The answerer MUST respond with a path attribute that represents a valid path to itself at the time of the updated exchange. This new path may be the same as its previous path, but may be different. The new offerer MUST NOT assume that the peer will answer with the same path it used previously. If either party wishes to send an SDP document that changes nothing at all, then it MUST have the same o-line as in the previous exchange. 7.1.4 Example SDP Exchange Endpoint A wishes to invite Endpoint B to a MSRP session. A offers the following session description: v=0 o=usera 2890844526 2890844527 IN IP4 alice.example.com s= c=IN IP4 alice.example.com t=0 0 m=message 9 msrp * a=accept-types: message/cpim text/plain text/html a=path:msrp://alice.example.com:7394/2s93i9;tcp B responds with its own URL: v=0 o=userb 2890844530 2890844532 IN IP4 bob.example.com s= c=IN IP4 bob.example.com t=0 0 m=message 9 msrp * a=accept-types:message/cpim text/plain a=path:msrp://bob.example.com:8493/si438ds;tcp Campbell, et al. Expires January 16, 2005 [Page 27] Internet-Draft MSRP July 2004 7.1.5 Connection Negotiation Previous versions of this document included a mechanism to negotiate the direction for any required TCP connection. The mechanism was loosely based on the COMEDIA [24]work being done in the MMUSIC working group. The primary motivation was to allow MSRP sessions to succeed in situations where the offerer could not accept connections but the answerer could. For example, the offerer might be behind a NAT, while the answerer might have a globally routable address. The SIMPLE working group chose to remove that mechanism from MSRP, as it added a great deal of complexity to connection management. Instead, MSRP now specifies a default connection direction. 7.2 MSRP User Experience with SIP In typical SIP applications, when an endpoint receives an INVITE request, it alerts the user, and waits for user input before responding. This is analogous to the typical telephone user experience, where the callee "answers" the call. In contrast, the typical user experience for instant messaging applications is that the initial received message is immediately displayed to the user, without waiting for the user to "join" the conversation. Therefore, the principle of least surprise would suggest that MSRP endpoints using SIP signaling SHOULD allow a mode where the endpoint quietly accepts the session, and begins displaying messages. SIP INVITE requests may be forked by a SIP proxy, resulting in more than one endpoint receiving the same INVITE. SIP early media [28] techniques can be used to establish a preliminary session with each endpoint, and canceling the INVITE transaction for any endpoints that do not send MSRP traffic after some period of time. 8. DSN payloads in MSRP REPORT Requests The format of a default REPORT request payload format the DSN taken from RFC1894 [8]. Only a minimal subset of fields are relevant for MSRP, as detailed in the remainder of this section. 8.1 Per-Message DSN header usage original-envelope-id: See Section 8.3 reporting-mta: See Section 8.4 dsn-gateway: Not Used Campbell, et al. Expires January 16, 2005 [Page 28] Internet-Draft MSRP July 2004 received-from-mta: Not Used arrival-date: Not Used 8.2 Per-Recipient DSN header usage original-recipient Not Used final-recipient: See Section 8.5 action: See Section 8.6 status: See Section 8.7 remote-mta: Not Used diagnostic-code: Not Used last-attempt-date: Not Used will-retry-until:Not Used 8.3 original-envelope-id usage The 'original-envelope-id' field contains a unique identifier which is used to correlate a DSN report with the originating MSRP transaction. The entity generating the DSN report MUST insert the Message-ID value that appeared in the original MSRP request into the 'original-envelope-id' field. This allows a requesting client to explicitly correlate a REPORT request with the original request. This correlation is implementation specific and makes no requirements on clients to hold state for transactions ID's. Information regarding the original request can be obtained from the DSN MIME type outlined in [8]. 8.4 reporting-mta The 'reporting-mta-field' MUST follow the guidelines set out in RFC 1894[8]. The 'mta-name-type' from RFC1894[8] MUST use the value of 'msrp-name-type', as defined in Section 15.4 of this specification. The 'mta-name' value for this field as specified in RFC1894 [8] MUST equal the MSRP URL representing itself in the context of the session. 8.5 final-recipient The 'final-recipient-field' MUST follow the guidelines set out in RFC 1894[8]. The 'address-type' from RFC1894 [8] MUST use the value of 'msrp-address-type', as defined in Section 15.4 of this Campbell, et al. Expires January 16, 2005 [Page 29] Internet-Draft MSRP July 2004 specification. The 'address-type' value for this field as specified in RFC1894 [8] MUST equal the final value contained in the MSRP 'To-Path' header from the original request. 8.6 action The 'action' field MUST follow the guidelines set out in RFC 1894[8]. An MSRP entity constructing a DSN report MUST use the 'delivered' value for a successful delivery and MUST use the 'failed' value for an unsuccessful delivery. The other values specified for the 'action' field in RFC 1894[8] MAY be used. 8.7 status The 'status' field MUST follow the guidelines set out in RFC 1894[8]. An MSRP entity constructing a DSN report MUST represent the MSRP status code in the correct format detailed in RFC 1894[8] for the 'status' field of a DSN report. An MSRP status code consists of a three digit number while a DSN status is three digits separated by '.'. An example would be: Status: 5.0.0 (unknown permanent failure) When generating this field the first digit of the MSRP status code (working from left to right) MUST be placed in the first part of the 'status' DSN field. The second digit MUST be placed in the second part of the 'status' DSN field. The third digit MUST be placed in the third part of the 'status' DSN field. An example of a DSN 'status' field value would be: An MSRP '200' success response would be mapped to: Status: 2.0.0 (OK) The MSRP reason phrase mapped to a DSN 'status' field MAY be enclosed in parentheses if required. 9. Formal Syntax The following syntax specification uses the augmented Backus-Naur Form (BNF) as described in RFC-2234 [6]. msrp-req-or-resp = msrp-request / msrp-response msrp-request = req-start headers [content-stuff] end-line msrp-response = resp-start headers end-line req-start = pMSRP SP transact-id SP method CRLF Campbell, et al. Expires January 16, 2005 [Page 30] Internet-Draft MSRP July 2004 resp-start = pMSRP SP transact-id SP status-code [SP phrase] CRLF phrase = utf8text pMSRP = %4d.53.52.50 ; MSRP in caps transact-id = ident method = mSEND / mREPORT / other-method mSEND = %53.45.4e.44 ; SEND in caps mREPORT = %52.45.50.4f.52.54; REPORT in caps other-method = 1*UPALPHA status-code = 3DIGIT headers = 1*( header CRLF ) header = ( To-Path / From-Path / Message-ID / Report-Success / Report-Failure / Byte-Range / Status / Mime-Header / ext-header ) To-Path = "To-Path:" SP URL *( SP URL ) From-Path = "From-Path:" SP URL *( SP URL ) Message-ID = "Message-ID:" SP ident Report-Success = "Report-Success:" SP ("yes" / "no" ) Report-Failure = "Report-Failure:" SP ("yes" / "no" / "partial" ) Byte-Range = "Byte-Range:" SP range-start "-" range-end "/" total range-start = 1*DIGIT range-end = 1*DIGIT / "*" total = 1*DIGIT / "*" Status = "Status:" SP namespace SP short-status [SP text-reason] ident = alphanum 3*31ident-char ident-char = alphanum / "." / "-" / "+" / "%" / "=" content-stuff = *(Other-Mime-Header CRLF) Content-Type 2CRLF data CRLF Content-Type = "Content-Type:" SP media-type media-type = type "/" subtype *( ";" gen-param ) type = token subtype = token gen-param = pname [ "=" pval ] Campbell, et al. Expires January 16, 2005 [Page 31] Internet-Draft MSRP July 2004 pname = token pval = token / quoted-string token = 1*(alphanum / "-" / "." / "!" / "%" / "*" / "_" / "+" quoted-string = DQUOTE *(qdtext / qd-esc) DQUOTE qdtext = SP / HT / %x21 / %x23-5B / %x5D-7E / UTF8-NONASCII qd-esc = (BACKSLASH BACKSLASH) / (BACKSLASH DQUOTE) BACKSLASH = "\" DQUOTE = %x22 Other-Mime-Header = (Content-ID / Content-Description / Content-Disposition / mime-extension-field); ; Content-ID, and Content-Description are defined in RFC2045. ; Content-Disposition is defined in RFC2183 ; MIME-extension-field indicates additional MIME extension ; headers as described in RFC2045 data = *OCTET end-line = "-------" transact-id continuation-flag CRLF continuation-flag = "+" / "$" ext-header = hname ":" SP hval CRLF hname = alpha *token hval = utf8text utf8text = *(HT / %x20-7E / UTF8-NONASCII) UTF8-NONASCII = %xC0-DF 1UTF8-CONT / %xE0-EF 2UTF8-CONT / %xF0-F7 3UTF8-CONT / %xF8-Fb 4UTF8-CONT / %xFC-FD 5UTF8-CONT UTF8-CONT = %x80-BF 10. Response Code Descriptions This section summarizes theoriginal request, and To-Path and From-Path headers matching thosesemantics of various response codes that may be used in MSRP transaction responses. These codes may also be used in theoriginal request. 6.9.1Status header in REPORT requests. Campbell, et al. Expires January 16, 2005 [Page 32] Internet-Draft MSRP July 2004 10.1 200 The 200 response code indicates a successful transaction.6.9.210.2 400 A 400 response indicates a request was unintelligible.6.9.310.3 403 The action is not allowed 10.4 415 A 415 response indicates the SEND request contained a MIME content-type that is not understood by the receiver.6.9.410.5 426 A 426 response indicates that the request is only allowed over TLS protected connections.6.9.510.6 481 A 481 response indicates that no session exists for the connection.6.9.610.7 506 A 506 response indicates that aVISITrequestoccurred in which the To-Path header indicatesarrived on alocal path thatsession which is alreadyassociated withbound to another network connection.A 506 response MUST NOT be returned in response to any method other than VISIT. 6.10 Header Field Descriptions11. Examples 11.1 Basic IM session This sectionsummarizesshows an example flow for thevarious header fields.most common scenario. The example assumes SIP is used to transport the SDP exchange. Details of the SIP messages and SIP proxy infrastructure are omitted for the sake of brevity. In the example, assume the offerer is sip:alice@example.com and the answerer is sip:bob@example.com. Campbell, et al. Expires January 16, 2005 [Page 33] Internet-Draft MSRPheader Campbell (Ed.)July 2004 Alice Bob | | | | |(1) (SIP) INVITE | |----------------------->| |(4) (SIP) 200 OK | |<-----------------------| |(5) (SIP) ACK | |----------------------->| |(6) (MSRP) SEND | |----------------------->| |(7) (MSRP) 200 OK | |<-----------------------| |(8) (MSRP) SEND | |<-----------------------| |(9) (MSRP) 200 OK | |----------------------->| |(10) (SIP) BYE | |----------------------->| |(11) (SIP) 200 OK | |<-----------------------| | | | | 1. Alice constructs a local URL of msrp://alicepc.example.com:7777/iau39;tcp . Alice->Bob (SIP): INVITE sip:bob@example.com v=0 o=alice 2890844557 2890844559 IN IP4 alicepc.example.com s= c=IN IP4 alicepc.example.com t=0 0 m=message 9 msrp * a=accept-types:text/plain a=path:msrp://alicepc.example.com:7777/iau39;tcp 2. Bob listens on port 8888, and sends the following response: 3. Bob->Alice (SIP): 200 OK v=0 o=bob 2890844612 2890844616 IN IP4 bob.example.com s= c=IN IP4 bob.example.com t=0 0 m=message 9 msrp * a=accept-types:text/plain Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page30]34] Internet-Draft MSRPMayJuly 2004fields are single valued; that is, they MUST NOT occur more than once in a particular request or response. 6.10.1 TR-ID The TR-ID header field contains a transaction identifier used to map a responsea=path:msrp://bob.example.com:8888/9di4ea;tcp 4. Alice->Bob (SIP): ACK 5. (Alice opens connection tothe corresponding request. A TR-ID value MUST be unique among all values used by a given endpoint inside a given session.Bob.) Alice->Bob (MSRP): MSRPelements MUST NOT assume any additional semantics for TR-ID. 6.10.2 Message-ID The Message-ID header field contains a message identifier used to map a delivery status notification to the corresponding request. TR-ID cannot be used for this purpose, as it may change between hops if relays are involved. A Message-ID value MUST be unique among all values used by a given endpoint inside a given session.d93kswow SEND To-Path:msrp://bob.example.com:8888/9di4ea;tcp From-Path:msrp://alicepc.example.com:7777/iau39;tcp Message-ID: 12339sdqwer Content-Type:text/plain Hi, I'm Alice! -------d93kswow$ 6. Bob->Alice (MSRP): MSRPelements MUST NOT assume any additional semantics for Message-ID. The Message-ID value MAY be the same as the original TR-ID value. 6.10.3 To-Path The To-Path header field is used to indicate the sender's remote path. Alld93kswow 200 OK To-Path:msrp://bob.example.com:8888/9di4ea;tcp From-Path:msrp://alicepc.example.com:7777/iau39;tcp -------d93kswow$ 7. Bob->Alice (MSRP): MSRPrequests MUST contain a To-Path header field. 6.10.4 From-Path The From-Path header field is used to indicate the sender'sdkei38sd SEND To-Path:msrp://alice.example.com:7777/iau39;tcp From-Path:msrp://bob.example.com:8888/9di4ea;tcp Message-ID: 456 Content-Type:text/plain Hi, Alice! I'm Bob! -------dkei38sd$ 8. Alice->Bob (MSRP): MSRP dkei38sd 200 OK To-Path:msrp://alice.example.com:7777/iau39;tcp From-Path:msrp://bob.example.com:8888/9di4ea;tcp -------dkei38sd$ 9. Alice->Bob (SIP): BYE Alice invalidates localURL. Allsession state. 10. Bob invalidates local state for the session. Bob->Alice (SIP): 200 OK Campbell, et al. Expires January 16, 2005 [Page 35] Internet-Draft MSRPrequests MUST containJuly 2004 11.2 Chunked Message For an example of aFrom-Path header field. 6.10.5 Boundary The Boundary header field contains the boundary string that is used to terminatechunked message, see themessage. This string MUST have at least 16 bits of randomness. This string MUST NOT be duplicated anywhere elseexample inthe message. The Boundary header field is mandatory for allSection 4.1. 11.3 System Message Sysadmin->Alice (MSRP): MSRPmessages, and SHOULD be the first header field in the message. 6.10.6 Closing The Closing field contains the same boundary string that was originally listed in the Boundary header field, as well as the Continuation-Flag field.d93kswow SEND To-Path:msrp://alicepc.example.com:8888/9di4ea;tcp From-Path:msrp://example.com:7777/iau39;tcp Message-ID: 12339sdqwer Report-Failure: no Report-Success: no Content-Type:text/plain TheClosing field MUST occur at the end of each MSRP message. If the message content has been sent completely, the Interrupt-Flag field value MUST be ""$ (dollar sign). If theresystem isfurther content to send as part of the "logical" instant message, this field value MUST be "+". (plus sign.) Campbell (Ed.)going down in 5 minutes -------d93kswow$ Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page31]36] Internet-Draft MSRPMayJuly 20046.10.7 Content-Type The Content-Type header field11.4 Positive Report Alice->Bob (MSRP): MSRP d93kswow SEND To-Path:msrp://bob.example.com:8888/9di4ea;tcp From-Path:msrp://alicepc.example.com:7777/iau39;tcp Message-ID: 12339sdqwer Report-Success: yes Content-Type:text/html <html><body> <p>Here isused to indicatethat important link... <a href="www.example.com/foobar">foobar</a> </p> </body></html> -------d93kswow$ Bob->Alice (MSRP): MSRP d93kswow 200 OK To-Path:msrp://alicepc.example.com:7777/iau39;tcp From-Path:msrp://bob.example.com:8888/9di4ea;tcp -------d93kswow$ Bob->Alice (MSRP): MSRP dkei38sd SEND To-Path:msrp://alicepc.example.com:7777/iau39;tcp From-Path:msrp://bob.example.com:8888/9di4ea;tcp Message-ID: 12339sdqwer Status: 000 200 OK -------dkei38sd$ 11.5 Forked IM Traditional IM systems generally do a poor job of handling multiple simultaneous IM clients online for theMIME media typesame person. While some do a better job than many existing systems, handling of multiple clients is fairly crude. This becomes a much more significant issue when always-on mobile devices are available, but when it is desirable to use them only if another IM client is not available. Using SIP makes rendezvous decisions explicit, deterministic, and very flexible; instead "pager-mode" IM systems use implicit implementation-specific decisions which IM clients cannot influence. Campbell, et al. Expires January 16, 2005 [Page 37] Internet-Draft MSRP July 2004 With SIP session mode messaging rendezvous decisions can be under control of thebody. Content-Type MUST be present ifclient in abodypredictable, interoperable way for any host that implements callee capabilities [30]. As a result, rendezvous policy ispresent. To Do:managed consistently for each address of record. Thework groupfollowing example shows Juliet with several IM clients where she can be reached. Each of these hasagreed to allow the usea unique SIP Contact and MSRP session. The example takes advantage ofany standard MIME header. This is not reflectedSIP's capability to "fork" an invitation to several Contacts inthis version, but will beparallel, in sequence, or in combination. Juliet has registered from her chamber, the balcony, her PDA, and as a last resort, you can leave ashortly forthcoming one. 7. Example This section shows an examplemessageflow for the most common scenario.with her Nurse. Juliet's contacts are listed below. Theexample assumes SIPq-values express relative preference (q=1.0 isused to transporttheSDP exchange. Detailshighest preference). We query for a list of Juliet's contacts by sending a REGISTER: REGISTER sip:thecapulets.example.com SIP/2.0 To: Juliet <sip:juliet@thecapulets.example.com> From: Juliet <sip:juliet@thecapulets.example.com>;tag=12345 Call-ID: 09887877 CSeq: 772 REGISTER The Response contains her Contacts: SIP/2.0 200 OK To: Juliet <sip:juliet@thecapulets.example.com> From: Juliet <sip:juliet@thecapulets.example.com>;tag=12345 Call-ID: 09887877 CSeq: 771 REGISTER Contact: <sip:juliet@balcony.thecapulets.example.com> ;q=0.9;expires=3600 Contact: <sip:juliet@chamber.thecapulets.example.com> ;q=1.0;expires=3600 Contact: <sip:jcapulet@veronamobile.example.net>;q=0.4;expires=3600 Contact: <sip:nurse@thecapulets.example.com>;q=0.1;expires=3600 When Romeo opens his IM program, he selects Juliet and types the message "art thou hither?" (instead of "you there?"). His client sends a SIPmessagesinvitation to sip:juliet@thecapulets.example.com. The Proxy there tries first the balcony andSIP proxy infrastructure are omitted forthesakechamber simultaneously. A client is running on both those systems, both ofbrevity. Inwhich setup early sessions of MSRP with Romeo's client. The client automatically sends theexample, assumemessage over theofferer is sip:alice@atlanta.comMSRPS to the two MSPR URIs involved. After a delay of a several seconds with no reply or activity from Juliet, the proxy cancels the invitation at her first two contacts, and forwards theanswererinvitation on to Juliet's PDA. Since her father issip:bob@biloxi.com. Alice Bobtalking to Campbell, et al. Expires January 16, 2005 [Page 38] Internet-Draft MSRP July 2004 her about her wedding, she selects "Do Not Disturb" on her PDA, which sends a "Busy Here" response. The proxy then tries the Nurse, who answers and tells Romeo what is going on. Romeo Juliet's Juliet/ Juliet/ Juliet/ Nurse Proxy balcony chamber PDA | | | | | | |--INVITE--->| | | | | | |--INVITE--->| | | | | |<----180----| | | | |<----180----| | | | ||(1) (SIP) INVITE|---PRACK---------------->| ||----------------------->| |(4) (SIP) 200 OK||<-----------------------| |(5) (SIP) ACK||----------------------->| |(6) (MSRP) SEND|<----200-----------------| ||----------------------->| |(7) (MSRP) 200 OK||<-----------------------| |(8) (MSRP) SEND||<-----------------------| |(9) (MSRP) 200 OK|<===Early MSRP Session==>| art thou hither? ||----------------------->| |(10) (SIP) BYE||----------------------->| |(11) (SIP) 200 OK||<-----------------------|| | | |1. Alice constructs a local URL of msrp://alicepc.atlanta.com:7777/iau39 and listens for a connection on TCP port 7777. Alice->Bob (SIP): INVITE sip:bob@biloxi.com Campbell (Ed.) Expires November 15, 2004 [Page 32] Internet-Draft MSRP May 2004 v=0 o=alice 2890844557 2890844559 IN IP4 host.anywhere.com s= c=IN IP4 fillername t=0 0 m=message 9999 msrp * a=accept-types:text/plain a=path:msrp://alicepc.atlanta.com:7777/iau39 2. Bob->Alice (SIP): 200 OK v=0 o=bob 2890844612 2890844616 IN IP4 host.anywhere.com s= c=IN IP4 ignorefield t=0 0 m=message 9999 msrp * a=accept-types:text/plain a=path:msrp://bob.atlanta.com:8888/9di4ea 3. Alice->Bob (SIP): ACK 4. (Alice opens connection to Bob. This may occur in parallel with the previous step.) Alice->Bob (MSRP): MSRP SEND Boundary: d93kswow To-Path:msrp://bob.atlanta.com:8888/9di4ea From-Path:msrp://alicepc.atlanta.com:7777/iau39 TR-ID: 123 Message-ID: 123 Content-Type: "text/plain" Hi, I'm Alice! -------d93kswow$ 5. Bob->Alice (MSRP): MSRP 200 OK Boundary: 839s9ed To-Path:msrp://bob.atlanta.com:8888/9di4ea From-Path:msrp://alicepc.atlanta.com:7777/iau39 TR-ID: 123 -------839s9ed$ 6. Bob->Alice (MSRP): MSRP SEND Boundary: dkei38sd Campbell (Ed.) Expires November 15, 2004 [Page 33] Internet-Draft MSRP May 2004 To-Path:msrp://alice.atlanta.com:7777/iau39 From-Path:msrp://bob.atlanta.com:8888/9di4ea TR-ID: 456 Message-ID: 456 Content-Type: "text/plain" Hi, Alice! I'm Bob! -------dkei38sd$ 7. Alice->Bob (MSRP): MSRP 200 OK Boundary: diw3ids To-Path:msrp://alice.atlanta.com:7777/iau39 From-Path:msrp://bob.atlanta.com:8888/9di4ea TR-ID: 456 -------diw3ids$ 8. Alice->Bob (SIP): BYE Alice invalidates local session state. 9. Bob invalidates local state for the session. Bob->Alice (SIP): 200 OK 8. IANA Considerations 8.1 MSRP Port| | |--INVITE---------------->| | | | |<----180-----------------| | | |<----180----| | | | | |---PRACK----------------------------->| | | |<----200------------------------------| | | |<========Early MSRPuses TCP port XYX,Session==========>| art thou hither? | | | | | | | | | | | | | | | .... Time Passes .... | | | | | | | | | | | | | | | | |--CANCEL--->| | | | | |<---200-----| | | | | |<---487-----| | | | | |----ACK---->| | | | | |--CANCEL---------------->| | | | |<---200------------------| | | | |<---487------------------| | | | |----ACK----------------->| | | | |--INVITE---------------------------->| romeo wants | | | | | tobe determined by IANA after this document is approved for publication. Usage of this value is described in Section 6.1 8.2 MSRP URL Schema This document defines the URL schema of "msrp" "msrps", "smsrp", and "smsrps". 8.2.1 Syntax See Section 6.1. 8.2.2 Character Encoding See Section 6.1. Campbell (Ed.)IM w/ you | |<---486 Busy Here--------------------| | | |----ACK----------------------------->| | | | | | | | | |--INVITE---------------------------------------->| | |<---200 OK---------------------------------------| |<--200 OK---| | | | | |---ACK------------------------------------------------------->| |<================MSRP Session================================>| | | | | | | Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page34]39] Internet-Draft MSRPMayJuly 20048.2.3 Intended Usage See Section 6.1. 8.2.4 Protocols The Message Session Relay Protocol (MSRP). 8.2.5 Security Considerations See Section 9. 8.2.6 Relevant Publications RFCXXXX [Note to RFC Editor: Please replace RFCXXXX in the above paragraph| Hi Romeo, Juliet is | | withthe actual number assigned to this document. 8.3 SDP Parameters This document registers the following SDP parameters in the sdp-parameters registry: 8.3.1 Accept Types Attribute-name: accept-types Long-form Attribute Name Acceptable MIME Types Type: Media level Subjecther father now | | can i take a message?| | | | Tell her toCharset Attribute No Purpose and Appropriate Values See Section 5.2. 8.3.2 Wrapped Types Attribute-name: accept-wrapped-types Long-form Attribute Name Acceptable MIME Types Inside Wrappers Type: Media level Subjectgo toCharset Attribute No Purpose and Appropriate Values See Section 5.3. 8.3.3 Path Attribute-name: path Long-form Attribute Name MSRP URL Path Type: Media level Campbell (Ed.) Expires November 15, 2004 [Page 35] Internet-Draftconfession tommorrow.... | 12. Extensibility MSRPMay 2004 Subjectwas designed toCharset Attribute No Purposebe only minimally extensible. New MSRP Methods, Headers, and status codes can be defined in standards track RFCs. There is no registry of headers, methods, or status codes, since the number of new elements andAppropriate Values See Section 5.4. 8.4 IANA registration forms for DSN types 8.4.1 IANA registration form for address-type This document registerstotal extensions is expected to be very small. MSRP does not contain a version number or any negotiation mechanism to require or discover new'address-type' forfeatures. MSRP was designed to use lists of URLs instead of a single URL inconjunction with RFC1894[10]. The authors requestthe To-Path and From-Path headers in anticipation of relay or gateway functionality being added. In addition, msrp: and msrps: URLs can contain parameters which are extensible. 13. CPIM compatibility MSRP sessions may be gatewayed to other CPIM [25]compatible protocols. If this occurs, the gateway MUST maintain session state, and MUST translate between the MSRP session semantics and CPIM semantics thatthese valuesdo not include a concept of sessions. Furthermore, when one endpoint of the session is a CPIM gateway, instant messages SHOULD berecordedwrapped inthe IANA registry for DSN 'address-type'. Proposed Address name: msrp-address-type Syntax: See Section 6.1 8.4.2 IANA registration form for MTA-name-type This document registers"message/cpim" [7] bodies. Such anew 'MTA-name-type' for usegateway MUST include "message/cpim" as the first entry inconjunction with RFC1894[10]. The authors requestits SDP accept-types attribute. MSRP endpoints sending instant messages to a peer thatthese values be recordedhas included 'message/cpim" as the first entry in theIANA registry for DSN 'MTA-name-type'. Proposed Address name: msrp-name-type Syntax: See See Section 6.1 9.accept-types attribute SHOULD encapsulate all instant message bodies in "message/ cpim" wrappers. All MSRP endpoints MUST support the message/cpim type, and SHOULD support the S/MIME features of that format. 14. Security ConsiderationsThereInstant Messaging systems are used to exchange anumbervariety ofsecurity considerationssensitive information ranging from personal conversations, to corporate confidential information, to account numbers and other financial trading information. IM is used by individuals, corporations, and governments forMSRP, somecommunicating important information. Like many communications systems, the properties ofwhich are mentioned elsewhere in this document. This section discusses those further,Integrity andintroduces some new ones. 9.1 TLSConfidentiality of the exchanged information, along with the possibility of Anonymous communications, and knowing you are communicating with theMSRPS Scheme Allcorrect other party are required. MSRPdevices must support TLS, with at leastpushes Campbell, et al. Expires January 16, 2005 [Page 40] Internet-Draft MSRP July 2004 many of theTLS_RSA_WITH_AES_128_CBC_SHA [8] cipher suite. Other cipher suites MAY be supported.hard problems to SIP when SIP sets up the session, but some of the problems remain. Spam and DoS attacks are also very relevant to IM systems. MSRPdoes not define a separate TCP portneeds to provide confidentiality and integrity forTLS connections. This means that all MSRP server devices, that is, all devicesthe messages it transfers. It also needs to provide assurances the connected host is the host thatlisten for TCP connections, MUST be preparedit meant to connect tohandle both TLSandplain text connections onthat thesame port.connection has not been hijacked. Whena device accepts ausing only TCPconnection, it MUST watch for the TLS handshake messages to determine ifconnections, MSRP security is fairly weak. If host A is contacting B, B passes its hostname and aparticular connection uses TLS.secret to A using SIP. If thefirst data receivedSIP offer or answer is notpart of a startTLSrequest, the device ceasesor S/MIME [27] protected, anyone can see this secret. A then connects towatch fortheTLS handshake untilprovided host name and passes the secret in the clear across the connection to B. A assumes that it is talking to B based on where itreadssent theentire message. OnceSYN packet and then delivers the secret in plain text across the connections. B assumes it is talking to A because themessage has been completely received,host on thedevice resumes watching forother end of thestart TLS message. Campbell (Ed.) Expires November 15, 2004 [Page 36] Internet-Draft MSRP May 2004 Any MSRP device MAY refuse to accept a given request over a non-TLSconnectionby returning a 426 response. MSRP devices acting indelivered therole of TCP client MAY perform a TLS handshake at any time, as long assecret. An attacker that could ACK therequest occurs between MSRP messages. The endpoint MUST NOT sendSYN packet could insert itself as astart TLS requestman in the middleof an MSRP message. The working group considered only requiringin theendpoint to watch for aconnection. When using TLShandshake at the beginning of the session. However,connections, theendpoint should be able to determine if a new messagesecurity isa start TLS request or an MSRP request by only reading ahead three bytes. Therefore,significantly improved. We assume that theworking group chose to allow a session to switch to TLS in mid-stream, as long ashost accepting theswitch occurs between MRSP messages. There have since been proposals that we only allow start-tls atconnectiontime. Do we havehas aconsensus here one way or the other? The "msrps" and "smsrps" URI schema indicatescertificate from a well know certificate authority. Furthermore, we assume that theconnection MUST be protected with TLS. Relay handling of "msrps" and "smsrps" are beyondSIP signaling to set up thescope of this document. However, any relay specification MUST explicitly specify this. MSRP requests for "msrps" URLs MUST be sent over TLSsession is protectedconnections. If a device receives a request for a "msrps" or "smsrps" URL over an unprotected connection, it MUST reject the requestwitha 426 response. 9.1.1 Sensitivity of Session URLs The URLs sent inTLS (using sips). In this case, when host A contacts host B, theSDP offer/answer exchange forsecret is passed through aMSRP session are used by the endpointsSIP confidential channel toidentify each other. If an attacker were ableA. A connects with TLS to B. B presents a valid certificate, so A knows it really is connected toacquireB. A then delivers thesession URL, eithersecret provided byguessingB, so that B can verify itor by eavesdropping, thereis connected to A. In this case, awindow of opportunity in whichrogue SIP Proxy can see theattacker could hijacksecret in thesession connectingSIP signaling traffic andsendingcould potentially insert itself as aMSRP requestman-in-the-middle. Realistically, using TLS is only feasible when connecting to gateways or relays , as thelistening device before the legitimate peer. Becausetypes ofthis sensitivity, these URLs SHOULD be constructed in a way to make them difficult to guess, and should be sufficiently random sohosts thatit isend clients use for sending instant messages are unlikely tobe reused. All mechanisms used to transport these URLs SHOULD be protected from eavesdroppers and man-in-the-middle attacks. Thereforehave aMSRP device MUST supportlong term stable IP address or a stable DNS name that a certificate can bind to. In addition, theusecost ofTLSserver certificates from well known certificate authorities is currently too high for the vast majority of end users to even consider getting one for each client. The only real security forall MSRP messages. Further, MSRPconnectionsSHOULD actually be protected with TLS. Further, an MSRPwithout relays is achieved using S/MIME. This does not require the actual endpointMUST be capableto have certificates from a well known certificate authority. The Identity [22] and Certificates [23] mechanism with SIP provides S/MIME based delivery ofusinga secret between A and B. No SIP intermediary except theCampbell (Ed.)explicitly trusted authentication service (one per user) can see the secret. The S/MIME encryption of the SDP can also be used by SIP to Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page37]41] Internet-Draft MSRPMayJuly 2004security features of the signaling protocolexchange keying material that can be used inorderMRSP. The MSRP session can then use S/MIME with this keying material toprotect the SDP exchangeencrypt andSHOULD actually use them on all such exchanges. End-to-end protection schemes SHOULD be preferredsign messages sent overhop-by-hop schemes for protection ofMSRP. The connection can still be hijacked since theSDP exchange. 9.1.2 Endsecret is sent in clear text toEnd Protectionthe other end ofIMs Instant messagesthe TCP connection, but this risk is mitigated if all the MSRP content is encrypted and signed with S/MIME. MSRP cancontain very sensitive information. As a result,not be used asspecified in RFC 2779 [3], instant messaging protocols need to providean amplifier forencryption, integrityDoS attacks, but it can be used to form a distributed attack to consume TCP connection resource on servers. The attacker, Eve, sends an SIP INVITE with no offer to Alice. Alice returns a 200 with an offer andauthentication of instant messages. ThereforeEve returns an answer with the SDP that indicates that her MSRPendpoints MUST supportaddress is theend-to-end encryption and integrityaddress ofbodiesTom. Since Alice sentvia SEND requeststhe offer, Alice will initiate a connection to Tom usingSecure MIME (S/MIME) [7]. Noteup resources on Tom's server. Given the huge number of IM clients, and the relatively few TCP connections thatwhile each protected body could use separate keying material,most servers support, this isinefficienta fairly straightforward attack. SIP is attempting to address issues inthat it requiresdealing with spam. The spam issue is probably best dealt with at the SIP level when anindependent public key operation for each message. Endpoints wishingMSRP session is initiated and not at the MSRP level. TLS is used toinvoke end-to-end protection of message sessions SHOULD exchange symmetric keys in SDP k-lines,authenticate devices anduse secret key encryption onto provide integrity and confidentiality foreach MSRP message. When symmetric keys are present in the SDP,theoffer-answer exchangeheaders being transported. MSRP elements MUSTbe protected from eavesdroppingimplement TLS andtampering usingMUST also implement theappropriate facilitiesTLS ClientExtendedHello extended hello information for server name indication as described in [12]. A TLS cipher-suite ofthe signaling protocol. For example, if the signaling protocol is SIP, the SDP exchangeTLS_RSA_WITH_AES_128_CBC_SHA [15] MUST be supported (other cipher-suites MAY also be supported). Since MSRP carries arbitrary MIME content, it can trivially carry S/ MIME protectedusing S/MIME. 9.1.3 CPIM compatibilitymessages as well. All MSRPsessions may be gatewayed to other CPIM [19]compatible protocols. If this occurs, the gateway MUST maintain session state, andimplementations MUSTtranslate betweensupport theMSRP session semantics and CPIM semantics thatmultipart/signed MIME type even if they do notincludesupport S/ MIME. Since SIP can carry aconcept of sessions. Furthermore, when one endpoint of thesessionis a CPIM gateway, instantkey, S/MIME messagesSHOULD be wrappedin"message/cpim" [5] bodies. Such a gateway MUST include "message/cpim" asthefirst entrycontext of a session could also be protected using a key-wrapped shared secret [26] provided inits SDP accept-types attribute.the session setup. 15. IANA Considerations 15.1 MSRPendpoints sending instant messagesPort MSRP uses TCP port XYX, toa peer that has included 'message/cpim" as the first entrybe determined by IANA after this document is approved for publication. Usage of this value is described in Section 5 15.2 MSRP URL Schemes This document defines theaccept-types attribute SHOULD encapsulate all instant message bodiesURL schemes of "msrp" and "msrps". Campbell, et al. Expires January 16, 2005 [Page 42] Internet-Draft MSRP July 2004 Syntax See Section 5. Character Encoding See Section 5. Intended Usage See Section 5. Protocols The Message Session Relay Protocol (MSRP). Security Considerations See Section 14. Relevant Publications RFCXXXX [Note to RFC Editor: Please replace RFCXXXX in"message/ cpim" wrappers. All MSRP endpoints MUST supportthemessage/cpim type, and SHOULD supportabove paragraph with theS/MIME features of that format. 9.1.4 PKI Considerations Several aspects of MSRP will benefit from being used inactual number assigned to this document. 15.3 SDP Parameters This document registers thecontext of a public key infrastructure. For example,following SDP parameters in theMSRPS scheme allows,sdp-parameters registry: 15.3.1 Accept Types Attribute-name: accept-types Long-form Attribute Name Acceptable MIME Types Type: Media level Subject to Charset Attribute No Purpose andeven encourages, TLS connections between endpoint devices. And whileAppropriate Values See Section 7.1. 15.3.2 Wrapped Types Attribute-name: accept-wrapped-types Long-form Attribute Name Acceptable MIME Types Inside Wrappers Type: Media level Subject to Charset Attribute No Purpose and Appropriate Values See Section 7.1. 15.3.3 Path Attribute-name: path Long-form Attribute Name MSRPallowsURL Path Type: Media level Subject to Charset Attribute No Purpose and Appropriate Values See Section 7.1.1. 15.4 IANA registration forms for DSN types 15.4.1 IANA registration form for address-type This document registers asymmetric session key to protect all messagesnew 'address-type' for use ina session, it is most likelyconjunction with RFC1894[8]. The authors request thatsession key itself wouldthese values beexchangedrecorded ina signaling protocol such as SIP. Since Campbell (Ed.)the IANA registry for DSN 'address-type'. Proposed Address name: msrp-address-type Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page38]43] Internet-Draft MSRPMayJuly 2004 Syntax: See Section 5 15.4.2 IANA registration form for MTA-name-type This document registers a new 'MTA-name-type' for use in conjunction with RFC1894[8]. The authors request thatkey is extremely sensitive, its exchange would also needthese values be recorded in the IANA registry for DSN 'MTA-name-type'. Proposed Address name: msrp-name-type Syntax: See Section 5 16. Change History 16.1 draft-ietf-simple-message-sessions-07 Significant re-write to attempt to improve readability. Added maximum size parameter in accept-types Changed the Boundary field to beprotected. In SIP,part of thepreferred mechanism for this wouldstart-line rather than a header field. Removed the TR-IDheader, and changed request-response matching to beS/MIME,based on the Boundary field value. Responses still contain the TR-ID header, whichwould also benefitmust match the Boundary froma PKI. However, all of these features may be used without PKI. Each endpoint could instead use self signed certificates. This will,the request. Removed transport selection from URL scheme and added the "tcp" parameter. Added description ofcourse, be less convenient thanthe "simple" mode witha PKI, in that there would benocertificate authority to act astransaction responses, and made mode selection dependent on the reporting level requested for atrusted introducer. Peers would be requiredgive message. Changed the DSN section toexchange certificates priorreflect separate request of success and failure reports. Enhanced REPORT method tosecurely communicating. Since, at leastbe useful even without a payload. removed SRV usage forthe immediate future, any given MSRP implementationURL resolution. This islikelyonly used for relay discovery, and therefore should be moved tocommunicate with at least some peersthe relay draft. Added discussion about late REPORT handling. Asserted thatdo not have a PKI available, MSRP implementations SHOULD supportREPORT requests are always sent in simple mode. Removed theuse of self-signed certificates, and SHOULD supportdependency on multipart/byteranges for fragmentation. Incorporated theability to configure lists of trusted certificates. To Do: Add text discussionByte-Range header into the base MSRP header set. Removed the VISIT method. Change to useof TLS certificates in more detail. 10. Changes from Previous Draft Versions This sectionSEND tobe deleted priorserve the purpose formerly reserved topublication as an RFC 10.1VISIT. 16.2 draft-ietf-simple-message-sessions-06 Changed To and From header names to To-Path and From-Path. Added more clarification to path handling, and commentary on how it enables relay usage. Changed mechanism for signaling transport and TLS protection into the MSRP URL, rather than the SDP M-Line. Campbell, et al. Expires January 16, 2005 [Page 44] Internet-Draft MSRP July 2004 Removed length field from start line and added Boundary header field and Closing field. Added recommendation to fragment any content over 2k. Added Rohan's proposal to make offerer connect to answerer. (With open issue for more discussion.) Changed To-Path and From-Path usage in responses to indicate the destination and source of the response, rather than merely copy from the associated request. Updated DSN section. Added text on field usage. Fixed changesection--changesTR-ID header from version 05 were erroneously attributed to 04.10.216.3 draft-ietf-simple-message-sessions-05 Changed the use of session URLs. Instead of a single session URL, each endpoint is identified by a distinct URL. MSRP requests will put the destination URL in a Toheader, and the sender URL in a From header. Campbell (Ed.) Expires November 15, 2004 [Page 39] Internet-Draft MSRP May 2004header, and the sender URL in a From header. Changed the SDP exchange of MSRP URLs to handle the URL for each endpoint. Further, changed the SDP attribute to support a list of URLs in each direction. This may be used with relays to exchange paths, rather than single URLs. MSRP endpoints must be able to intelligently process such a list if received. This document does not, however, describe how to generate such a list. Added section for Delivery Status Notification handling, and added associated entries into the syntax definition. Added content fragmentation section. Removed recommendation to start separate session for large transfers. Corrected some mistakes in the syntax definitions. Added Chris Boulton as a co-author for his contribution of the DSN text.10.316.4 draft-ietf-simple-message-sessions-04 Removed the direction attribute. Rather than using a comedia styled direction negotiation, we just state that the answerer opens any needed connection.10.416.5 draft-ietf-simple-message-sessions-03 Removed all specification of relays, and all features specific to the use of relays. The working group has chosen to move relay work into a separate effort, in order to advance the base specification. (The MSRP acronym is unchanged for the sake of convenience.) This included removal of the BIND method, all response codes specific to BIND, Digest Authentication, and the inactivity timeout. Campbell, et al. Expires January 16, 2005 [Page 45] Internet-Draft MSRP July 2004 Removed text indicating that an endpoint could retry failed requests on the same connection. Rather, the endpoint should consider the connection dead, and either signal a reconnection or end the session. Added text describing subsequent SDP exchanges. Added mandatory "count" parameter to the direction attribute to allow explicit signaling of the need to reconnect. Added text to describe the use of send and receive only indicators in SDP for one-way transfer of large content. Added text requiring unique port field values if multiple M-line's exist. Corrected a number of editorial mistakes.10.516.6 draft-ietf-simple-message-sessions-02 Moved all content type negotiation from the "m"-line format list into "a"-line attributes. Added the accept-types attribute. This is due to the fact that the sdp format-list syntax is notCampbell (Ed.) Expires November 15, 2004 [Page 40] Internet-Draft MSRP May 2004conducive to encoding MIME content types values. Added "other-method" construction to the message syntax to allow for extensible methods. Consolidated all syntax definitions into the same section. Cleaned up ABNF for digest challenge and response syntax. Changed the session inactivity timeout to 12 minutes. Required support for the SHA1alogorithm.algorithm. Required support for the message/cpim format. Fixed lots of editorial issues. Documented a number of open issues from recent list discussions.10.616.7 draft-ietf-simple-message-sessions-01 Abstract rewritten. Added architectural considerations section. The m-line format list now only describes the root body part for a request. Contained body part types may be described in the "accept-wrapped-types" a-line attribute. Added a standard dummy value for the m-line port field. Clarified that a zero in this field has normal SDP meaning. Clarified that an endpoint is globally configured as to whether or not to use a relay. There is no relay discovery mechanism intrinsic to MSRP. Changed digest algorithm to SHA1. Added TR-ID and S-URI to the hash for digest authentication. CMS usage replaced with S/MIME. TLS andMSRPSmsrps: usage clarified. Session state timeout is now based on SEND activity, rather than BIND and VISIT refreshes. Campbell, et al. Expires January 16, 2005 [Page 46] Internet-Draft MSRP July 2004 Default port added. Added sequence diagrams to the example message flows. Added discussion of self-signed certificates in the security considerations section.10.716.8 draft-ietf-simple-message-sessions-00 Name changed to reflect status as a work group item. This version no longer supports the use of multiple sessions across a single TCP session. This has several related changes: There is now a single session URI, rather than a separate one for each endpoint. The session URI is not required to be in requests other than BIND and VISIT, as the session can be determined based on the connection on which it arrives. BIND and VISIT now create soft state, eliminating the need for the RELEASE and LEAVE methods. The MSRP URL format was changed to better reflect generic URL standards. URL comparison and resolution rules were added. SRV usage added.Campbell (Ed.) Expires November 15, 2004 [Page 41] Internet-Draft MSRP May 2004Determination of host and visitor roles now uses a direction attribute much like the one used in COMEDIA. Format list negotiation expanded to allow a "prefer these formats but try anything" semantic Clarified handling of direction notification failures. Clarified signaling associated with session failure due to dropped connections. Clarified security related motivations for MSRP. Removed MIKEY dependency for session key exchange. Simple usage of k-lines in SDP, where the SDP exchange is protected end-to-end seems sufficient.10.816.9 draft-campbell-simple-im-sessions-01 Version 01 is a significant re-write. References to COMEDIA were removed, as it was determined that COMEDIA would not allow connections to be used bidirectional in the presence of NATs. Significantly more discussion of a concrete mechanism has been added to make up for no longer using COMEDIA. Additionally, this draft and draft-campbell-cpimmsg-sessions (which would have also changed drastically) have now been combined into this single draft.11.17. Contributors and Acknowledgments In addition to the editor, The following people contributed extensive work to this document: ChrisBoultonBoulton, CullenJenningsJennings, PaulKyzivatKyzivat, RohanMahyMahy, AdamRoachRoach, JonathanRosenbergRosenberg, RobertSparks 12. AcknowledgmentsSparks. The following people contributed substantial discussion and feedback Campbell, et al. Expires January 16, 2005 [Page 47] Internet-Draft MSRP July 2004 to this ongoing effort: AllisonMankinMankin, JonPetersonPeterson, BrianRosenRosen, DeanWillisWillis, AkiNiemiNiemi, HishamKhartabilKhartabil, PekkaPessiPessi, OritLevin 13.Levin. 18. References13.118.1 Normative References [1] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC 2246, January 1999. [2] Handley, M. and V. Jacobson, "SDP: Session Description Protocol", RFC 2327, April 1998.Campbell (Ed.) Expires November 15, 2004 [Page 42] Internet-Draft MSRP May 2004 [2][3] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, June 2002. [4] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002.[3] Day, M., Aggarwal, S.[5] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [6] Crocker, D. andJ. Vincent, "Instant Messaging /P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997. [7] Atkins, D. and G. Klyne, "Common PresenceProtocol Requirements",and Instant Messaging Message Format", draft-ietf-impp-cpim-msgfmt-08 (work in progress), January 2003. [8] Moore, K. and G. Vaudreuil, "An Extensible Message Format for Delivery Status Notifications", RFC2779, February 2000. [4]1894, January 1996. [9] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996. [10] Troost, R., Dorner, S. and K. Moore, "Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field", RFC 2183, August 1997. [11] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifiers(URL):(URI): Generic Syntax", RFC 2396, August 1998.[5][12] Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J. and T. Wright, "Transport Layer Security (TLS) Extensions", RFC 3546, June 2003. Campbell, et al. Expires January 16, 2005 [Page 48] Internet-Draft MSRP July 2004 [13] Rosenberg, J., "The Session Initiation Protocol (SIP) UPDATE Method", RFC 3311, October 2002. [14] Atkins, D. and G. Klyne, "Common Presence and InstantMessaging Message Format", draft-ietf-impp-cpim-msgfmt-08 (work in progress), January 2003. [6] Gulbrandsen, A., Vixie, P. and L. Esibov, "A DNS RR for specifying the location of services (DNS SRV)", RFC 2782, February 2000. [7] Ramsdell, B., "S/MIME Version 3Messaging: MessageSpecification", RFC 2633, June 1999. [8]Format", draft-ietf-impp-cpim-msgfmt-08 (work in progress), January 2003. [15] Chown, P.,""Advanced"Advanced Encryption Standard (AES) Ciphersuites for Transport LayerSecuritySecur ity (TLS)", RFC 3268, June 2002.[9] Eastlake, 3rd, D. and P. Jones, "US Secure Hash Algorithm 1 (SHA1)", RFC 3174, September 2001. [10] Moore, K. and G. Vaudreuil, "An Extensible Message Format for Delivery Status Notifications", RFC 1894, January 1996. [11] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. 13.218.2 Informational References[12] Campbell, B.[16] Johnston, A. andJ. Rosenberg,O. Levin, "Session Initiation ProtocolExtension for Instant Messaging", RFC 3428, September 2002. [13] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", RFC 1889, January 1996. [14] Mahy, R., Campbell, B., Sparks, R., Rosenberg, J., Petrie, D. and A. Johnston, "A Multi-party Application FrameworkCall Control - Conferencing forSIP", draft-ietf-sipping-cc-framework-02User Agents", draft-ietf-sipping-cc-conferencing-03 (work in progress),May 2003. Campbell (Ed.) Expires November 15, 2004 [Page 43] Internet-Draft MSRP May 2004 [15]February 2004. [17] Rosenberg, J., Peterson, J., Schulzrinne, H. and G. Camarillo, "Best Current Practices for Third Party Call Control in the Session Initiation Protocol",draft-ietf-sipping-3pcc-04draft-ietf-sipping-3pcc-06 (work in progress),June 2003. [16]January 2004. [18] Sparks, R. and A. Johnston, "Session Initiation Protocol Call Control - Transfer",draft-ietf-sipping-cc-transfer-01draft-ietf-sipping-cc-transfer-02 (work in progress), February2003. [17] Camarillo, G., Marshall, W.2004. [19] Campbell, B., Rosenberg, J., Schulzrinne, H., Huitema, C. and D. Gurle, "Session Initiation Protocol (SIP) Extension for Instant Messaging", RFC 3428, December 2002. [20] Mahy, R., "Benefits and Motivation for Session Mode Instant Messaging", draft-mahy-simple-why-session-mode-00 (work in progress), February 2004. [21] Mahy, R. and C. Jennings, "Relays for the Message Session Relay Protocol (MSRP)", draft-ietf-simple-msrp-relays-01.txt (work in progress), July 2004. [22] Peterson, J.Rosenberg, "Integration of Resource Managementand C. Jennings, "Enhancements for Authenticated Identity Management in the Session Initiation Protocol (SIP)",RFC 3312, October 2002. [18]draft-ietf-sip-identity-02 (work in progress), May 2004. [23] Jennings, C. and J. Peterson, "Certificate Management Service for SIP", draft-jennings-sipping-certs-03 (work in progress), May 2004. [24] Yon, D., "Connection-Oriented Media Transport in SDP", draft-ietf-mmusic-sdp-comedia-05 (work in progress), March Campbell, et al. Expires January 16, 2005 [Page 49] Internet-Draft MSRP July 2004 2003. [25] Peterson, J., "APrivacy MechanismCommon Profile for Instant Messaging (CPIM)", draft-ietf-impp-im-04 (work in progress), August 2003. [26] Housley, R., "Triple-DES and RC2 Key Wrapping", RFC 3217, December 2001. [27] Ramsdell, B., "S/MIME Version 3 Message Specification", RFC 2633, June 1999. [28] Camarillo, G. and H. Schulzrinne, "Early Media and Ringing Tone Generation in the Session Initiation Protocol(SIP)", RFC 3323 , November 2002. [19] Peterson, J., "A Common Profile for(SIP)", draft-ietf-sipping-early-media-02 (work in progress), June 2004. [29] Saint-Andre, P., "Extensible Messaging and Presence Protocol (XMPP): Instant Messaging(CPIM)", draft-ietf-impp-im-04and Presence", draft-ietf-xmpp-im-22 (work in progress),August 2003. [20] Yon, D., "Connection-Oriented Media TransportApril 2004. [30] Rosenberg, J., "Indicating User Agent Capabilities inSDP", draft-ietf-mmusic-sdp-comedia-05the Session Initiation Protocol (SIP)", draft-ietf-sip-callee-caps-03 (work in progress),March 2003. Author's AddressJanuary 2004. Authors' Addresses Ben Campbelldynamicsoft 5100 Tennyson Parkway(editor) EMail: ben@nostrum.com Rohan Mahy Cisco Systems, Inc. 5617 Scotts Valley Drive, Suite1200 Plano, TX 75024200 Scotts Valley, CA 95066 USA EMail:bcampbell@dynamicsoft.com Campbell (Ed.)rohan@cisco.com Campbell, et al. ExpiresNovember 15,January 16, 2005 [Page 50] Internet-Draft MSRP July 2004 Cullen Jennings Cisco Systems, Inc. 170 West Tasman Dr. MS: SJC-21/2 San Jose, CA 95134 USA EMail: fluffy@cisco.com Campbell, et al. Expires January 16, 2005 [Page44]51] Internet-Draft MSRPMayJuly 2004 Intellectual Property Statement The IETF takes no position regarding the validity or scope of anyintellectual propertyIntellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available;neithernor does it represent that it has made any independent effort to identify any such rights. Information on theIETF'sprocedures with respect to rights instandards-track and standards-related documentationRFC documents can be found inBCP-11.BCP 78 and BCP 79. Copies ofclaims of rightsIPR disclosures madeavailable for publicationto the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights byimplementorsimplementers or users of this specification can be obtained from the IETFSecretariat.on-line IPR repository at http://www.ietf.org/ipr. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rightswhichthat may cover technology that may be required topracticeimplement this standard. Please address the information to the IETFExecutive Director. Full Copyright Statement Copyright (C) The Internet Society (2004). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purposeat ietf-ipr@ietf.org. Disclaimer ofdeveloping Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assignees.Validity This document and the information contained hereinisare provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCEDISCLAIMSDISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATIONCampbell (Ed.) Expires November 15, 2004 [Page 45] Internet-Draft MSRP May 2004HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Copyright Statement Copyright (C) The Internet Society (2004). This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights. Acknowledgment Funding for the RFC Editor function is currently provided by the Internet Society.Campbell (Ed.)Campbell, et al. ExpiresNovember 15, 2004January 16, 2005 [Page46]52] ----