view Side-By-Side changes
SIMPLE Working Group B. Campbell Internet-Draft J. Rosenberg Expires:November 20,December 29, 2003 R. Sparks dynamicsoft P. Kyzivat Cisco SystemsMay 22,June 30, 2003 Instant Message Sessions in SIMPLEdraft-ietf-simple-message-sessions-00draft-ietf-simple-message-sessions-01 Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. 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 20,December 29, 2003. Copyright Notice Copyright (C) The Internet Society (2003). All Rights Reserved. AbstractThe SIP MESSAGE method is used to send instant messages, where each message is independent of any other message.Thisis often called pager-mode messaging, due to the fact that this model is similar to that of most two-way pager devices. Another model is called session-mode. In session-mode,document describes theinstant messages are part ofMessage Session Relay Protocol (MSRP), amedia session that provides ordering,mechanism for transmitting asecurity context, and other functions. This media session is establishedseries of Instant Messages within a session. MSRP sessions are managed using the SDP offer/answer model carried by aSIP INVITE, justsignaling protocol such asan audioSIP. MSRP supports end-to-end Instant Message Sessions, as well as sessions traversing one orvideo session would be established.two relays. Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 1] Internet-Draft SIMPLE IM SessionsMayJune 2003This document describes the Message Session Relay Protocol (MSRP), a mechanism for transmitting session-mode messages with minimalist relay support. Additionally, this document describes using the SDP offer/answer model to initiate such sessions.Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Motivation for Session-mode Messaging . . . . . . . . . . . 4 3. Scope of this Document . . . . . . . . . . . . . . . . . . . 5 4. Protocol Overview . . . . . . . . . . . . . . . . . . . . . 5 5.SDP Offer-Answer Exchanges for MSRP Sessions.Architectural Considerations . . . . . . . . . . . . . . . . 8 5.1 Use ofthe SDP M-lineRelays . . . . . . . . . . . . . . . . . . . . . . . 8 5.2The Direction AttributeTransferring Large Content . . . . . . . . . . . . . . . . . 9 5.3URL NegotiationsConnection Sharing . . . . . . . . . . . . . . . . . . . . .10 5.4 Example9 6. SDPExchangeOffer-Answer Exchanges for MSRP Sessions . . . . . . . . 10 6.1 Use of the SDP M-line . . . . . . . . . . .11 6. The Message Session Relay Protocol. . . . . . . . 10 6.2 The Direction Attribute . . . .11 6.1 MSRP URLs. . . . . . . . . . . . . . 11 6.3 MIME Wrappers . . . . . . . . . .11 6.2 MSRP URL Comparison. . . . . . . . . . . . . 13 6.4 URL Negotiations . . . . . .12 6.3 Resolving MSRP Host Device. . . . . . . . . . . . . . . . 136.3.1 The msrps URL Scheme .6.5 Example SDP Exchange . . . . . . . . . . . . . . . . . .14 6.4 MSRP messages. . 14 7. The Message Session Relay Protocol . . . . . . . . . . . . . 15 7.1 MSRP URLs . . . . . . .14 6.5 MSRP Transactions . .. . . . . . . . . . . . . . . . . . 156.67.1.1 MSRPSessions . .URL Comparison . . . . . . . . . . . . . . . . . . . . 166.6.1 Initiating an7.1.2 Resolving MSRPsessionHost Device . . . . . . . . . . . . . . . . . 166.6.2 Handling VISIT requests7.1.3 The msrps URL Scheme . . . . . . . . . . . . . . . . .19 6.6.3 Sending Instant Messages on a Session. . . 17 7.2 MSRP messages . . . . . . .20 6.6.4 Managing Session State and Connections. . . . . . . . . .21 6.7 MSRP Relays. . . . . . 17 7.3 MSRP Transactions . . . . . . . . . . . . . . . . .22 6.7.1 Establishing Session State at a Relay. . . . 18 7.4 MSRP Sessions . . . . . .22 6.7.2 Removing Session State from a relay. . . . . . . . . . .24 6.7.3 Sending IMs across an MSRP relay. . . . . . 19 7.4.1 Initiating an MSRP session . . . . . . .24 6.7.4 Relay Pairs. . . . . . . . . . 19 7.4.2 Handling VISIT requests . . . . . . . . . . . . .24 6.8 Session State Expiration. . . . . 23 7.4.3 Sending Instant Messages on a Session . . . . . . . . . . . 23 7.4.4 Ending a Session .26 6.9 Digest Authentication. . . . . . . . . . . . . . . . . .26 6.9.1 The MD5 Algorithm. . . 24 7.4.5 Session Inactivity Timer . . . . . . . . . . . . . . . . .27 6.10 Method Descriptions. 24 7.4.6 Managing Session State and Connections . . . . . . . . . . . 25 7.5 MSRP Relays . . . . . . .28 6.10.1 BIND. . . . . . . . . . . . . . . . . 26 7.5.1 Establishing Session State at a Relay . . . . . . . . . .28 6.10.2 SEND. 26 7.5.2 Removing Session State from a relay . . . . . . . . . . . . 28 7.5.3 Sending IMs across an MSRP relay . . . . . . . . . . . . . . 286.10.3 VISIT7.5.4 Relay Pairs . . . . . . . . . . . . . . . . . . . . . . . . 28 7.6 Digest Authentication . .29 6.11 Response Code Descriptions. . . . . . . . . . . . . . . .29 6.11.1 200. 30 7.6.1 The SHA1 Algorithm . . . . . . . . . . . . . . . . . . . . . 31 7.7 Method Descriptions . . . . .29 6.11.2 400. . . . . . . . . . . . . . . 31 7.7.1 BIND . . . . . . . . . . . .29 6.11.3 401. . . . . . . . . . . . . . . . 31 7.7.2 SEND . . . . . . . . . . .29 6.11.4 403. . . . . . . . . . . . . . . . . 32 7.7.3 VISIT . . . . . . . . . .30 6.11.5 415. . . . . . . . . . . . . . . . . 32 7.8 Response Code Descriptions . . . . . . . . . .30 6.11.6 481. . . . . . . 32 7.8.1 200 . . . . . . . . . . . . . . . . . . . .30 6.11.7 500. . . . . . . . 32 7.8.2 400 . . . . . . . . . . . . . . . . . . .30 Campbell, et al. Expires November 20, 2003 [Page 2] Internet-Draft SIMPLE IM Sessions May 2003 6.11.8 506. . . . . . . . . 33 7.8.3 401 . . . . . . . . . . . . . . . . . .30 6.12 Header Field Descriptions. . . . . . . . . . 33 7.8.4 403 . . . . . .30 6.12.1 TR-ID. . . . . . . . . . . . . . . . . . . . . . 33 7.8.5 415 . . . .30 6.12.2 Exp. . . . . . . . . . . . . . . . . . . . . . . . 33 7.8.6 426 . . .30 6.12.3 CAuth. . . . . . . . . . . . . . . . . . . . . . . . . 33 Campbell, et al. Expires December 29, 2003 [Page 2] Internet-Draft SIMPLE IM Sessions June 2003 7.8.7 481 .31 6.12.4 SChal. . . . . . . . . . . . . . . . . . . . . . . . . .32 6.12.5 Content-Type. 33 7.8.8 500 . . . . . . . . . . . . . . . . . . . . . .32 6.12.6 S-URL. . . . . . 33 7.8.9 506 . . . . . . . . . . . . . . . . . . . .32 7. Examples. . . . . . . . 33 7.9 Header Field Descriptions . . . . . . . . . . . . . . . . .32 7.1 No Relay33 7.9.1 TR-ID . . . . . . . . . . . . . . . . . . . . . . . . .33 7.2 Single Relay. . 34 7.9.2 Exp . . . . . . . . . . . . . . . . . . . . .34 7.3 Two Relays. . . . . . . 34 7.9.3 CAuth . . . . . . . . . . . . . . . . .37 8. IANA Considerations. . . . . . . . . . 34 7.9.4 SChal . . . . . . . . .40. . . . . . . . . . . . . . . . . . 35 7.9.5 Content-Type . . . . . . . . . . . . . . . . . . . . . . . . 36 7.9.6 S-URL . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 36 8.1 No Relay . . . . . . . . . . . . . . . . . . . . . . . . . . 36 8.2 Single Relay . . . . . . . . . . . . . . . . . . . . . . . . 39 8.3 Two Relays . . . . . . . . . . . . . . . . . . . . . . . . . 42 9.SecurityIANA Considerations . . . . . . . . . . . . . . . . .40. . . 46 9.1The MSRPS SchemeMSRP Port . . . . . . . . . . . . . . . . . . . . . .40. . . 46 9.2Sensitivity of the SessionMSRP URL Schemes . . . . . . . . . . . . . .41 9.3 End to End Protection of IMs. . . . . . . . 46 9.2.1 Syntax . . . . . . .41 9.4 CPIM compatibility. . . . . . . . . . . . . . . . . . . .42 10. Changes introduced in draft-ietf-simple-message-sessions-0046 9.2.2 Character Encoding . . . . . . . . . .42 11. Changes introduced in draft-campbell-simple-im-sessions-01. . . . . . . . . . .43 12. Contributors46 9.2.3 Intended Usage . . . . . . . . . . . . . . . . . . . . . . .43 Normative References47 9.2.4 Protocols . . . . . . . . . . . . . . . . . . .43 Informational References. . . . . . 47 9.2.5 Security Considerations . . . . . . . . . . .44 Authors' Addresses. . . . . . . 47 9.2.6 Relevant Publications . . . . . . . . . . . . .45 Intellectual Property and Copyright Statements. . . . . .46 Campbell, et al. Expires November 20, 2003 [Page 3] Internet-Draft SIMPLE IM Sessions May 200347 9.3 SDP Parameters . . . . . . . . . . . . . . . . . . . . . . . 47 9.3.1 Direction . . . . . . . . . . . . . . . . . . . . . . . . . 47 9.3.2 Wrapped Types . . . . . . . . . . . . . . . . . . . . . . . 47 10. Security Considerations . . . . . . . . . . . . . . . . . . 48 10.1 TLS and the MSRPS Scheme . . . . . . . . . . . . . . . . . . 48 10.2 Sensitivity of the Session URL . . . . . . . . . . . . . . . 49 10.3 End to End Protection of IMs . . . . . . . . . . . . . . . . 49 10.4 CPIM compatibility . . . . . . . . . . . . . . . . . . . . . 50 10.5 PKI Considerations . . . . . . . . . . . . . . . . . . . . . 50 11. Changes from Previous Draft Versions . . . . . . . . . . . . 50 11.1 draft-ietf-simple-message-sessions-01 . . . . . . . . . . . 51 11.2 draft-ietf-simple-message-sessions-00 . . . . . . . . . . . 51 11.3 draft-campbell-simple-im-sessions-01 . . . . . . . . . . . . 52 12. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 52 Normative References . . . . . . . . . . . . . . . . . . . . 53 Informational References . . . . . . . . . . . . . . . . . . 53 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 54 Intellectual Property and Copyright Statements . . . . . . . 56 Campbell, et al. Expires December 29, 2003 [Page 3] Internet-Draft SIMPLE IM Sessions June 2003 1. Introduction The MESSAGE[9][10] extension to SIP [2] allows SIP to be used to transmit instant messages. Instant messages sent using the MESSAGE method are normally independent of each other. This approach is often calledpager-modepage-mode messaging, since it follows a model similar to that used by many two-way pager devices.Pager-modepage-mode messaging makes sense for instant message exchanges where a small number of messages occur. There are also applications in which it is useful for instant messages to be associated together in some way. For example, a user may wish to join a text conference, participate in the conference for some period of time, then leave the conference. This usage is analogous to regular media sessions that are typically initiated, managed, and terminated using SIP. We commonly refer to this model as session-mode messaging. One of the primary purposes of SIP and SDP (Section5)6) is the management of media sessions. Session-mode messaging can be thought of as a media session like any other. This document describes 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 overpager-modepage-mode messages. For message exchanges that include more than a small number of message transactions, message sessions offer a way to remove messaging load from intervening SIP proxies. For example, a minimal session setup and tear-down requires one INVITE/ACK transaction, and one BYE transaction, for a total of 5 SIP messages. Normal SIP request routing allows for all but the initial INVITE transaction to bypass any intervening proxies that do not specifically request to be in the path for future requests. Session-mode messages never cross the SIP proxies themselves, unless proxies also act as message relays. Eachpager modepage-mode message involves a complete SIP transaction, that is, a request and a response. Anypager-modepage-mode message exchange that involves more than 2or 3MESSAGE requests will generate more SIP requests than a minimal session initiation sequence. Since MESSAGE is normally used outside of a SIP dialog, these requests will typically traverse the entire proxy network between the endpoints. Due to network congestion concerns, the MESSAGE method has significant limitations in message size, a prohibition against overlapping requests, etc. Much of this has been required because of Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 4] Internet-Draft SIMPLE IM SessionsMayJune 2003 perceived limitations in the congestion-avoidance features of SIP itself. Work is in 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. There is no requirement to wait for acknowledgement, so that message transactions can be overlapped. Message sessions allow greater efficiency for secure message exchanges. The SIP MESSAGE request inherits the S/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, a session key can be established at the time of session initiation. This key can be used to protect each message that is part of the session. 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 any other media sessions. Any SIP feature that can be applied to other sorts of media sessions can equally apply to message sessions. For example, conferencing[11],[12], third party call control[12],[13], call transfer[13],[14], QoS integration[14],[15], and privacy[15][16] can all be applied to message sessions. Messaging sessions can also reduce the overhead in each individual message. Inpager-mode,page-mode, each message needs to include all of the SIP headers that are mandated by RFC 3261 [2]. However, many of these headers are not needed once a context is established for exchanging messages. As a result, messaging session mechanisms can be designed with significantly less overhead. 3. Scope of this Document This document describes the use of MSRP between endpoints, or via one or two relays, where endpoints have advance knowledge of the relays. It does not provide a mechanism for endpoints to determine whether a relay is needed, or for endpoints to discover the presence of relays. This document describes the use of MSRP over TCP. MSRP may be used over other congestion-controlled protocols such as SCTP. However, the specific bindings for other such protocols are outside the scope of this document. 4. Protocol Overview Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 5] Internet-Draft SIMPLE IM SessionsMayJune 2003 The Message Session Relay Protocol (MSRP) provides a mechanism for transporting session-mode messages between endpoints. MSRP also contains primitives to allow the use of one or two relay devices. MSRP uses connection oriented, reliable network transport protocols only. It is intrinsically NAT and firewall friendly, as it allows participants to positively 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: Used toactuallysend message content from one endpoint to another. VISIT: Used by an endpoint to establish a session association to the opposite endpoint, or to a relay that was selected by the opposite endpoint. BIND: Used by an endpoint to establish a session at a relay, and allow the opposite endpoint to visit that relay. The simplest use case for MSRP is a session that goes directly between endpoints, with no intermediaries involved. Assume A is an endpoint that wishes to establish a message session, and B is the endpoint invited by A. A invites B to participate in a message session by sending a URL that represents the session. This URL is temporary, and must not duplicate the URL used for any other active sessions. B "visits" A by connecting to A and sending a VISIT request containing the URL that A provided. This associates the connection from B with the session. B then responds to the invitation, informing A that B has accepted the session. A and B may now exchange messages using SEND requests on the connection. When either party wishes to end the session, it informs the peer party with a SIP BYE request. A terminates the session by invalidating associated state, and dropping the connection. The end to end case looks something like the following. (Note that the example shows a logical flow only; syntax will come later in this document.) A->B (SDP): offer (msrp://A/123) B->A (MSRP): VISIT (msrp://A/123) Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 6] Internet-Draft SIMPLE IM SessionsMayJune 2003 A->B (MSRP): 200 OK B->A (SDP): answer(msrp://A/123) A->B (MSRP): SEND B->A (MSRP): 200 OK B->A (MSRP): SEND A->B (MSRP): 200 OK Thestate associated with thesessionwill expire over time, based onstate has anexpiration time specified in theassociated inactivity timer. This timer is initialized when a successful VISIT request occurs, and is reset each time either endpoint sends a SEND request. If this timer expires without being reset, thelifetime ofhosting device invalidates the sessionis to exceedstate and terminates all associated connections. Endpoints thatexpiration time, the visitor must update the expiration withare otherwise idle may keep anew VISIT request prior to expiration.session active by periodically sending SEND requests with no content. A slightly more complicated case involves a single relay, known about in advance by one of the parties. The endpoint that has the preexisting relationship with the relay uses the BIND method to establish session state in the relay. The relay returns a temporary URL, that identifies the session. For endpoints A and B, and relay R, the flow would look like the following: A->R: MSRP: BIND(msrp://r) R->A: MSRP: 200 OK (msrp://r/4uye) A->B (SDP): offer (msrp://r/4uye) B->R (MSRP): VISIT (msrp://r/4uye) R->B (MSRP): 200 OK B->A (SDP): answer(msrp://r/4uye) A->R (MSRP): SEND R->B (MSRP): SEND B->R (MSRP): 200 OK R->A (MSRP): 200 OKB->R (MSRP): SENDCampbell, et al. ExpiresNovember 20,December 29, 2003 [Page 7] Internet-Draft SIMPLE IM SessionsMayJune 2003 B->R (MSRP): SEND R->A (MSRP): SEND A->R (MSRP): 200 OK R->B (MSRP): 200 OK The BINDrequest contains an expiration time much the same as in VISIT.request contains an expiration time. Ifthe life ofarelay-hosted session issuccessful VISIT request does not occur prior toexceed the expiration value intheBIND request,expiration, thehost endpointrelay willrefreshdestroy theexpiration time with a new BIND request prior to expiration.session. Additionally, when tearing down a session, the host endpoint invalidates the session state by issuing a BIND request with an expiration value of zero. 5.SDP Offer-Answer Exchanges for MSRP Sessions. MSRP sessions will typically be initiated using the Session Description Protocol (SDP) [1] offer-answer mechanism, carriedArchitectural Considerations There are a number of considerations that, if handled inSIP [2] or any other protocol supporting it. MSRP borrows the ideaa reasonable fashion, will allow more effective use of thedirection attributes from COMEDIA [17], but does not depend on that specification.protocols described in this document. 5.1 Use ofthe SDP M-lineRelays TheSDP m-line takesprimary motivation for relay support in MSRP is to deal with situations where, due to issues of network topologies, neither endpoint is able to receive an inbound TCP connection from thefollowing form: m=<media> <port> <protocol> <format list>other. Fornon-RTP media sessions, The media field specifies the top level MIME media typeexample, both endpoints may be behind separate firewalls that only allow outbound connections. Relays may also be needed forthe session.policy enforcement. ForMSRP sessions,example, parts of themedia field MUST havefinancial industry require thevaluelogging of"message". The proto field MUST designateall communication. However, themessage session mechanism and transport protocol, separated byuse of such relays has a"/" character. For MSRP, left partsignificant impact on the scalability ofthis value MUSTMSRP. Each relay will require two TCP connections for each session in use, as well as memory for local session state storage. Most general purpose platforms on which one might implement MSRP relays will have relatively low limits on the number of simultaneous TCP connections they can handle. Therefore relays SHOULD NOT be"msrp". For MSRP over TCP,used indescrimantly. In theright partabsence ofthis field MUST take the value "tcp". Forstrong reasons to use relays, MSRPover other transport protocols, the field value MUSTendpoints SHOULD bedefined by the specification for that protocol binding. The format list MUST indicate the MIME content-types that the endpoint is willingconfigured toaccept inset up point-to-point sessions. MSRP supports thepayloaduse ofSEND requests. If anytwo relays, where each endpoint has a relay acting on its behalf. However, most of theallowed types are compound in nature, that is, they allow one or more arbitrary MIME body parts to be embedded within them, then the format list MUST include the content-types allowed for the embedded parts. If the final entry in the format list isnetwork topology issues mentioned above can work with a"*", this indicatessingle relay, if thatthe endpointrelay ismay be willing to receive other typesreachable by both endpoints. Dual relays are only needed for cases of very strict firewall policy, such aswell, but the types listed explicitlywhen only specific hosts arepreferred. The format list in the SDP answer MUST beallowed to connect to thesame as,outside world; or situations requiring strict policy enforcement at both endpoint domains. If asubset of, the list provided in the offer.given usage Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 8] Internet-Draft SIMPLE IM SessionsMayJune 2003A "*" in the format list indicates that the sender may attempt to send messages with other media types that have not been explicitly listed. If the receiver is able to process the media type, it does so. If not, it will respondscenario can be solved with a415. Note that all explicit entriessingle relay, then a second relay SHOULD NOT be used. In spite of these recommendations, relays serve a real purpose in that theformat list should be considered preferred over any non-listed types. This feature is needed as, otherwise,increase theformat list for IM devices may be prohibitively large. The port fieldlikelihood of two arbitrary endpoints being able to talk to one another. Therefore if a provider deploys MSRP endpoints inthe M-line isa network configuration that prevents them from receiving TCP connections from arbitrary peers, and does notusedwish todetermineexplicitly prevent MSRP communication with theport to which to connect. Rather,outside world, then theactual port is determined byprovider SHOULD provide its endpoints with thecontentsuse ofthe session URL. (Section 6.1). The following example illustratesanm-line forMSRP relay that is reachable from arbitrary peers. 5.2 Transferring Large Content MSRP endpoints may attempt to send very long messages on aCPIMsession. For example, most commercial instant messaging systems have a file transfer feature. Since MSRP does not impose messagesession, where the endpointsize limits, there iswillingnothing toaccept payloadsprevent endpoints from transferring files over it. An analysis ofplain textwhether it makes sense to do this, rather than sending such content over FTP, HTTP, orHTML, which may appear atsome other such protocol, is beyond thetop levelscope ofthe payload, or maythis document. However, implementers should beembedded inside a message/cpim body part. m=message 49232 msrp/tcp message/cpim text/plain text/html 5.2 The Direction Attribute Since MSRP uses connection oriented transport protocols, one goalaware of theSDP negotiation is to determine which participant initiates the transport connection.impact of sending very large messages over MSRP. Thedirection attribute advertises whetherprimary impact is, since MSRP is sent over TCP, is that any additional messages that theofferer or answerersender wishes toinitiatesend will be blocked until the large transfer is complete. This includes responses to messages sent by theconnection, wishespeer. Therefore, any SEND transactions initiated by the peerendpointare likely toinitiate the connection, or doesn't care. The endpoint that acceptstime out, even though they are received without problems. Further, there is no way to abort theconnection, or hassending of arelay acceptvery large message before it is complete. For theconnection on its behalf,sake of efficiency, the framing mechanism in MSRP issaidvery simple. There is no clean way to"host"recover framing if thesession, andcomplete message isknown asnot sent. These issues can be mitigated greatly if thehosting endpoint. Theendpointthat initiatessimply establishes a separate session for theconnection is saidtransfer. This allows the transfer to"visit"be sent without interfering with any instant messages being sent on other sessions. Further, thesession, and is known asendpoint can abort thevisiting endpoint. The direction attribute is included in an SDP a-line, with a value takingtransfer by simply tearing down thefollowing syntax: direction = direction-label ":" role direction-label = "direction" role = active / passive / both active = "active" passive = "passive" both = "both" The valuestransfer session. Therefore, if a peer wishes to send very large content, it SHOULD establish a dedicated session for that purpose. 5.3 Connection Sharing The SIMPLE working group spent quite a bit of effort in therole field are as follows:consideration of shared TCP connections. Connection sharing would Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 9] Internet-Draft SIMPLE IM SessionsMay 2003 passive The endpoint wishes to host the session active The endpoint wishes the peer to host the session. both The endpoint is willing to act as either host or visitor. The SDP offer for an MSRP session MUST contain a direction attribute, which MAY take anyJune 2003 offer value whenever a large number of message sessions cross thedefined values. If the offerersame two adjacent devices. This situation iscapable of hostinglikely to occur in thesession, or can arrange for atwo relayto hostmodel. It may also occur in thesession on its behalf, then it SHOULD select "both".point-to-point model if the endpoints are multiuser devices, as is likely with web-hosted messaging services. Unfortunately, such connection sharing in TCP created significant problems. Theendpoint SHOULD NOT select "active" unlessbiggest problem is itcannot hostintroduced a head-of-line blocking problem that spanned sessions. For example, if two different pairs of users had sessions that crossed the same shared connection, a large message sent on one sessionunder any circumstances. The endpoint SHOULD NOT select "passive" unless it has no option but to hostwould block transfer of messages on the other session. TheSDP answer also MUST contain a direction attribute, but its value choices are limited basedworking group considered this an unacceptable property of shared connections. One possible solution was to put limits on message size, and possibly add mechanisms to allow breaking messages into many chunks. However, these solutions promised to add a great deal of complexity to thevalue in the offer. If the offer contained "active", then the answerer MUST either select "passive" or reject the offer. Likewise, if the offer contained "passive", then the answerer MUST select"active" or reject the offer. If the offer contained "both",protocol, so theanswerer SHOULD select "active", but MAY select "passive" if local policy requires itwork group chose not toactgo that route. It may be possible to relax this requirement using other transport protocols, such ashost. 5.3 URL Negotiations An MSRP sessionSCTP. The lack of connection sharing in this document should not be construed to prohibit shared connections on other such protocols. However, such specification isidentified by anbeyond the scope of this document. 6. SDP Offer-Answer Exchanges for MSRPURL, which is determined bySessions MSRP sessions will typically be initiated using thehosting endpoint, and negotiatedSession Description Protocol (SDP) [1] offer-answer mechanism, carried inthe SDP exchange. Any SDP offerSIP [2] oranswer that creates a possibility thatany other protocol supporting it. MSRP borrows thesender will hostidea of thesession, that is, contains adirectionvalueattributes from COMEDIA [18], but does not depend on that specification. 6.1 Use of"passive" or "both", MUST contain an MSRP URL in a session attribute. This attribute hasthefollowing syntax: a=session:<MSRP_URL> where <MSRP_URL> is an MSRP or MSRPS URL as defined in Section 6.1.SDP M-line Thevisitor will use the session URL established bySDP m-line takes thehost both to resolvefollowing form: m=<media> <port> <protocol> <format list> For non-RTP media sessions, The media field specifies thehost address and port, and to identifytop level MIME media type for thesession when connecting.session. For MSRP sessions, theaddressmedia fieldin the C-line andMUST have the value of "message". The port fieldin the M-line areis normally notrelevant,used, andMUSTSHOULD beignored. The following example shows anset to 9999. An exception is when the port field value is set to zero, according to normal SDPoffer with ausage. The proto field MUST designate the message sessionURLmechanism and transport protocol, separated by a "/" character. For MSRP, left part of"msrp://example.com:7394/2s93i" c=IN IP4 useless.host.name m=message 7394 msrp/tcp text/plain a=direction:both a=session:msrp://example.com:7394/2s93ithis value MUST be "msrp". For MSRP over TCP, the right part of this field MUST take the value "tcp". For MSRP over other transport Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 10] Internet-Draft SIMPLE IM SessionsMayJune 2003The session URLprotocols, the field value MUST bea temporary URL assigned justdefined by the specification for that protocol binding. The format list MUST indicate the MIME content-types that the endpoint is willing to accept in the payload of SEND requests. If the final entry in the format list is a "*", thisparticular session. Itindicates that the endpoint is may be willing to receive other types as well, but the types listed explicitly are preferred. The format list in the SDP answer MUSTNOT duplicate any URLbe the same as, or a subset of, the list provided inuse forthe offer. A "*" in the format list indicates that the sender may attempt to send messages with other media types that have not been explicitly listed. If the receiver is able to process the media type, it does so. If not, it will respond with a 415. Note that all explicit entries in the format list should be considered preferred over any non-listed types. This feature is needed as, otherwise, the format list for IM devices may be prohibitively large. The m-line format list may include MIME wrapper types, that is, mime formats that contain othersession hosted bytypes internally. The types listed in theendpointformat field can be used both as the root payload, orrelay. Further, sincemay be contained in container types. (Note that thepeer endpoint will usecontainer type must also be listed in thesession URL to identify itselfformat list.) A list of types that are only allowed whenconnecting, it SHOULD be hard to guess, and protected from eavesdroppers. This willwrapped in containers can bediscussedcommunicated inmore detailthe accept-wrapped-types (Section 6.3) attribute. The port field in theSecurity Considerations section. 5.4 Example SDP Exchange Endpoint A wishes to invite Endpoint BM-line is not normally used toa MSRP session. A offers the following session description containingdetermine thefollowing lines: c=IN IP4 alice.example.com m=message 7394 msrp/tcp message/cpim text/plain text/html a=direction:both a=session:msrp://alice.example.com:7394/2s93i9 Endpoint B choosesport toparticipate inwhich to connect. Rather, theroleactual port is determined by the contents ofvisitor, opens a TCP connection to alice.example.com:7394, and successfully performs a VISIT transaction passingthe session URL (Section 7.1). However, a port value ofmsrp://alice.example.com:7394/ 2s93i9;. B indicates that itzero hasaccomplished this by answering with: c=IN IP4 dontlookhere m=message 7394 msrp/tcp message/cpim text/plain a=direction:active A may now send IMs to B by executing SEND transactions on the same connection on which B senttheVISIT request. 6. The Message Session Relay Protocolnormal SDP meaning. TheMessage Session Relay Protocol (MSRP) isfollowing example illustrates an m-line for atext based,messageoriented protocol for the transfer of instant messages insession, where thecontextendpoint is willing to accept root payloads ofa session. MSRP uses the UTF8 character set. MSRP messages MUSTmessage/ cpim, plain text or HTML. The second two types could either besent over reliable, congestion-controlled, connection-oriented transport protocols, suchpresented asTCP. 6.1 MSRP URLs MSRP sessions are identified by MSRP URLs. Anthe root body, or could be contained within message/cpim bodies. m=message 9999 msrp/tcp message/cpim text/plain text/html 6.2 The Direction Attribute Since MSRPURL follows a subsetuses connection oriented transport protocols, one goal of theURL syntax in Appendix A of RFC2396 [4], with a scheme of "msrp": msrp_url = "msrp" ":" "//" [userinfo] hostport ["/' resource] resource = 1*unreservedSDP negotiation is to determine which participant initiates the transport connection. The direction attribute advertises whether the offerer or answerer wishes to initiate the connection, wishes the peer endpoint to initiate the connection, or doesn't care. Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 11] Internet-Draft SIMPLE IM SessionsMayJune 2003 Theconstructions for "userinfo", "hostport",endpoint that accepts the connection, or has a relay accept the connection on its behalf, is said to "host" the session, and"unreserved" are detailed in RFC2396 [4]. An MSRP URL server part identifiesis known as the hostingdevice ofendpoint. The endpoint that initiates the connection is said to "visit" the session, and is known as the visiting endpoint. The direction attribute is included in anMSRPSDP a-line, with a value taking the following syntax: direction = direction-label ":" role direction-label = "direction" role = active / passive / both active = "active" passive = "passive" [sp timeout] both = "both" timeout = 1*DIGIT ; timeout value in seconds The values for the role field are as follows: passive The endpoint wishes to host the session active The endpoint wishes the peer to host the session.Thereboth The endpoint isno default port for MSRP URLs.willing to act as either host or visitor. Ifthe server part contains a numeric IP address,"both" is selected, itMUST alsomay contain an optional timeout value. This timeout specifies how much time the answerer should wait before giving up on aport. The resource part identifies a particular session at thatconnection and attempting to take over as host device.The absence ofIf theresource part indicates a referencetimeout value is not specified, it defaults to 30 seconds. The SDP offer for an MSRPhost device, but does not specifically refer to a particularsessionresource. Open Issue: Do we need a default port? Cullen points out it would at least be useful for firewall configuration. The server part will typically notMUST contain auserinfo component, but MAY do so to indicate a user account fordirection attribute, which MAY take any of thesession is valid. Note that this is notdefined values. If thesame thing as identifyingofferer is capable of hosting thesession itself. Ifsession, or can arrange for auserinfo component exists, MUST be constructed only from "unreserved" characters,relay toavoid a need for escape processing. Escaping MUSThost the session on its behalf, then it SHOULD select "both". The endpoint SHOULD NOTbe used in an MSRP URL. Furthermore, a userinfo part MUSTselect "active" unless it cannot host the session under any circumstances. The endpoint SHOULD NOTcontain password information.select "passive" unless it has no option but to host the session. Thefollowing is an example ofSDP answer also MUST contain atypical MSRP URL: msrp://host.example.com:8493/asfd34 6.2 MSRP URL Comparison MSRP URL comparisonsdirection attribute, but its value choices are limited based on the value in the offer. If the offer contained "active", then the answerer MUSTbe performed according toeither select "passive" or reject thefollowing rules: The host part is compared as case insensitive.offer. Likewise, if the offer contained "passive", then the answerer MUST select"active" or reject the offer. If theport exists explicitly in either URL, thenoffer contained "both", the answerer SHOULD select "active", but MAY select "passive" if itmust match exactly. Since there is no default port for MSRP, a URL with an explicit port is never equivalent to another with no port specified. The resource part is compared as case insensitive. A URL without a resource partisnever equivalentunable toone that includes a resource part. Userinfo parts are not considered for URL comparison. Path normalization is not relevant for MSRP URLs. Escape normalization is not required, sincereach therelevant parts are limitedhost device, or if local policy requires it tounreserved characters.act as host. Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 12] Internet-Draft SIMPLE IM SessionsMayJune 2003 6.3Resolving MSRP Host Device An MSRP host device is identified by the server part of an MSRP URL. IfMIME Wrappers The MIME content-types in theserver part contains a numeric IP addressM-line format list will often include compound types; that is, types that contain other types. For example, "message/cpim" or "multipart/mixed." Occasionally andport, they MUSTendpoint will need to specify a MIME body type that can only be usedas listed.. If the server part contains a host name andif wrapped inside aport,listed container type. Endpoints MAY specify MIME types that are only allowed to be wrapped inside compound types using theconnecting device MUST determine a host address by doing"accept-wrapped-types" attribute in anA or AAAA DNS query, and use the port as listed. If the server part contains a host name but no port, the connecting device MUST performSDP a-line. This attribute has the followingsteps: 1. Construct an SRV [6] query string by prefixingsyntax: accept-wrapped-types = wrapped-types-label ":" format-list wrapped-types-label = "accept-wrapped-types" The format-list element has thehost name withidentical syntax as theservice field "_msrp" andformat list in theprotocol field ("_tcp"m-line. The semantics forTCP). For example, "_msrp._tcp.host.example.com". 2. Perform a DNS SRV query usingthisquery string. 3. Select a resulting record accordingattribute are identical to those of therules in RFC2782 [6]. Determinem-line format list, with theport fromexception that thechosen record. 4. If necessary, determine a host device address by performing an A or AAAA queryspecified types may only be used when wrapped inside containers. The container types would be specified on thehost name field inm-line normally. Since any type listed on theselected SRV result record. If multiple Am-line may be used both as a root body, orAAAA records are returned,wrapped in other bodies, format entries from thefirst entrym-line SHOULD NOT bechosen for the initial connection attempt. This allows any ordering createdrepeated inthe DNS to be preserved. 5.this attribute. This approach does not allow for specifying distinct lists of acceptable wrapped types for different types of containers. Ifthe connection attempt fails, the device SHOULD attempt to connect to the addresses returned in any additional A or AAAA records,an endpoint understands a MIME type in theorder the records were presented. If allcontext ofthese fail, the device SHOULD attempt to use any additional SRV records that may have been returned, following the normal rules for SRV record selection. Open Issue: We need to carefully consider the rules about A RR selection. I am sure there are others who understand this much better than I do. Ted pointed usone wrapper, it is assumed toRFC1794, which if Iunderstandcorrectly indicates that some systems may attempt to load balance by controlling the orderit inwhich A RRs are presented. Attemptsthe context of any other acceptable wrappers, subject torandomize selectionany constraints defined by theclient could distort any such control. Notewrapper types themselves. The approach of specifying types thatin most cases, the transport protocol will be determinedare only allowed inside of containers separately from theresolution process.primary payload types allows an endpoint to force the use of certain wrappers. For example,ifa CPIM gateway device may require all messages to be wrapped inside message/cpim bodies, but may allow several content types inside theMSRP URL was communicatedwrapper. If the gateway were to specify the wrapped types in the m-line format list, its peer could choose to use those types without the wrapper. 6.4 URL Negotiations An MSRP session is identified by an MSRP URL, which is determined by the hosting endpoint, and negotiated in the SDP exchange. Any SDP offer oranswer,answer that creates a possibility that theSDP M-linesender willcontainhost thetransport protocol. Whensession, that is, contains a direction value of "passive" or "both", MUST contain an MSRP URLis communicated outside of SDP, the protocol SHOULD also be communicated. Forin a session attribute. This Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 13] Internet-Draft SIMPLE IM SessionsMayJune 2003example, a client may be configured to use a particular relay thatattribute has the following syntax: a=session:<MSRP_URL> where <MSRP_URL> isreferenced withan MSRPURL.or MSRPS URL as defined in Section 7.1. Theclient MUST also be told what protocol to use. If a device needsvisitor will use the session URL established by the host both to resolveanthe host address and port, and to identify the session when connecting. For MSRPURL and doessessions, the address field in the C-line is notknowrelevant, and MUST be ignored. The port field in theprotocol, it SHOULD assume TCP. Open Issue: Do we need to do an NAPTR query to determineM-line MUST be ignored if non-zero. Zero values have theprotocol? 6.3.1normal meeting for SDP. Themsrpsfollowing example shows an SDP offer with a session URLSchemeof "msrp://example.com:7394/2s93i" c=IN IP4 useless.host.name m=message 9999 msrp/tcp text/plain a=direction:both a=session:msrp://example.com:7394/2s93i The"msrps"session URLScheme indicates that each hopMUST besecured with TLS. Otherwise, it is used identically as an MSRP URL, except thataMSRPStemporary URL assigned just for this particular session. It MUST NOTbe considered equivalent to an MSRP URL. The MSRPS scheme is further discussedduplicate any URL in use for any other session hosted by theSecurity Considerations section. 6.4 MSRP messages MSRP messages are either requestsendpoint orresponses. Requestsrelay. Further, since the peer endpoint will use the session URL to identify itself when connecting, it SHOULD be hard to guess, andresponses are distinguishedprotected fromone another by the first line. The first line ofeavesdroppers. This will be discussed in more detail in Section 10. 6.5 Example SDP Exchange Endpoint A wishes to invite Endpoint B to aRequest takesMSRP session. A offers theform offollowing session description containing therequest-start entry below. Likewise,following lines: c=IN IP4 alice.example.com m=message 9999 msrp/tcp message/cpim text/plain text/html a=direction:both a=session:msrp://alice.example.com:7394/2s93i9 Endpoint B chooses to participate in thefirst linerole of visitor, opens aresponse takesTCP connection to alice.example.com:7394, and successfully performs a VISIT transaction passing the URL of msrp://alice.example.com:7394/ 2s93i9;. B indicates that it has accomplished this by answering with: c=IN IP4 dontlookhere m=message 9999 msrp/tcp message/cpim text/plain a=direction:active A may now send IMs to B by executing SEND transactions on theform of response-start. The syntax for an MSRP message is as follows:same Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 14] Internet-Draft SIMPLE IM SessionsMayJune 2003msrp-message = request-start/response-start *(header CRLF) [CRLF body] request-start = "MSRP" SP length SP Method CRLF response-start= "MSRP" SP length SP Status-Code SP Reason CRLF length = 1*DIGIT ;connection on which B sent thelength ofVISIT request. 7. The Message Session Relay Protocol The Message Session Relay Protocol (MSRP) is a text based, message oriented protocol for themessage, exclusivetransfer of instant messages in thestart line. Method = SEND / BIND / VISIT header = Client-Authenticate / Server-Challenge / Transaction-ID / Session-URL/ Content-Type / Expires Status-Code = 200 ;Success / 400 ;Bad Request / 401 ;Authentication Required / 403 ;Forbidden / 415 ;Unsupported Content Type / 481 ;No session / 500 ;Cannot Deliver / 506 ;duplicate session Reason = token ; Human readable text describing status Client-Authenticate = "CAuth" credentials Server-Challenge = "SChal" ":" challenge Transaction-ID = "Tr-ID" ":" token Content-Type = "Content-Type" ":" quoted-string Session-URL = "S-URL" ":" msrp_url Expires = "Exp"":" delta-seconds delta-seconds= 1*DIGIT ; Integer numbercontext ofseconds All requests and responses MUST contain at leastaTR-ID header field. Messages MAY contain other fields, depending onsession. MSRP uses themethod or response code. 6.5UTF8 character set. MSRPTransactions Anmessages MUST be sent over reliable, congestion-controlled, connection-oriented transport protocols, such as TCP. 7.1 MSRPtransaction consistsURLs MSRP sessions are identified by MSRP URLs. An MSRP URL follows a subset ofexactly one request and one response.the URL syntax in Appendix Aresponse matchesof RFC2396 [4], with atransaction if it share the same TR-ID value,scheme of "msrp": msrp_url = "msrp" ":" "//" [userinfo] hostport ["/' resource] resource = 1*unreserved The constructions for "userinfo", "hostport", andarrives on the same connection on which the transaction was sent. BIND is always hop by hop. VISIT transactions"unreserved" areusually hop-by-hop, but may be relayeddetailed insituations whereRFC2396 [4]. An MSRP URL server part identifies thevisiting endpoint useshosting device of an MSRP session. If the server part contains arelay. However, SEND transactions are end to end, meaningnumeric IP address, it MUST also contain a port. The resource part identifies a particular session at thatunder normal circumstances the response is sent byhost device. The absence of thepeer endpoint, even if there are intervening relays. Endpoints MUST select TR-ID header field valuesresource part indicates a reference to an MSRP host device, but does not specifically refer to a particular session resource. MSRP has an IANA registered recommended port defined inrequests so that they areSection 9.1. However, this value should notrepeated bybe considered a default, as thesame endpoint in scope ofURL process described herein will always explicitly resolve a port number. However, thegiven session. TR-ID valuesURLs SHOULD beglobally unique.configured so that the recommended port is used whenever appropriate. This makes life easier for network administrators who need to manage firewall policy for MSRP. TheTR-ID space of each endpointserver part will typically not contain a userinfo component, but MAY do so to indicate a user account for which the session isindependent ofvalid. Note thatof its peer. Endpointsthis is not the same thing as identifying the session itself. If a userinfo component exists, MUSTNOT infer any semanticsbe constructed only fromthe TR-ID header field beyond what"unreserved" characters, to avoid a need for escape processing. Escaping MUST NOT be used in an MSRP URL. Furthermore, a userinfo part MUST NOT contain password information. The following isstatedan example of a typical MSRP URL: Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 15] Internet-Draft SIMPLE IM SessionsMayJune 2003above. In particular, TR-ID values are not required to follow any sequence. MSRP Transactions complete when a response is received, or after a timeout interval expires with no response. Endpoints MUST treat such timeouts in exactly the same way they would treat a 500 response. The size of the timeout interval is a matter of local policy. 6.6 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 (a host and a visitor) and may have one or two relays. A session is identified by anmsrp://host.example.com:8493/asfd34 7.1.1 MSRPURL. 6.6.1 Initiating anURL Comparison MSRPsession When an endpoint wishes to engage a peer endpoint in a message session, it invites the peer to communicate using an SDP 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 asURL comparisons MUST be performed according to theanswerer.following rules: Theofferer SHOULD volunteer to acthost part is compared as case insensitive. If thehosting endpoint if allowed by policy and network topology.port exists explicitly in either URL, then it must match exactly. AnendpointURL with an explicit port issaidnever equivalent tohost a session if one of two conditions are true.another with no port specified. Thehost either directly listens for a connection from the peer endpoint, and maintains session state itself, or it usesresource part is compared as case insensitive. A URL without aBIND requestresource part is never equivalent toinitialize session state at a relayone thatwill listen forincludes aconnection from the peer. The peer thatresource part. Userinfo parts are not considered for URL comparison. Path normalization is not relevant for MSRP URLs. Escape normalization is not required, since the relevant parts are limited to unreserved characters. 7.1.2 Resolving MSRP Host Device An MSRP host device isdesignated asidentified by thevisitor. The offerer MAY requestserver part of an MSRP URL. If theanswerer to actserver part contains a numeric IP address and port, they MUST be used as listed.. If the server part contains a hostif it is prevented from accepting connections by network topology or policy,name andis not able to bind toarelay to act on its behalf. Ifport, theofferer wishes toconnecting device MUST determine a host address by doing an A or AAAA DNS query, and use thesession directly, that is without usingport as listed. If the server part contains arelay, ithost name but no port, the connecting device MUST perform the following steps: 1. Constructa session MSRP URL . This URL MUST be resolvable toan SRV [6] query string by prefixing theofferer. The URL SHOULD be temporary, SHOULD be hard to guess, and MUST not duplicatehost name with theURL of any other session currently hosted byservice field "_msrp" and theofferer. 2. Listenprotocol field ("_tcp" for TCP). For example, "_msrp._tcp.host.example.com". 2. Perform aconnection from the peer.DNS SRV query using this query string. 3.Construct an SDP offer as described in Section 5, includingSelect a resulting record according to thelist of allowed IM payload formatsrules in RFC2782 [6]. Determine theformat list. The offerer maps the session URL toport from thesession attribute, aschosen record. 4. If necessary, determine a host device address by performing an A Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page 16] Internet-Draft SIMPLE IM SessionsMayJune 2003describedor AAAA query on the host name field inSection 5.3. 4. Insert a direction attribute. This valuethe selected SRV result record. If multiple A or AAAA records are returned, the first entry SHOULD be"both", indicating thatchosen for theofferer will allowinitial connection attempt. This allows any ordering created in theanswererDNS tooverridebe preserved. 5. If theofferer's decisionconnection attempt fails, the device SHOULD attempt tohost. The value MAY be "passive" ifconnect to the addresses returned in any additional A or AAAA records, in the order the records were presented. If all of these fail, the device SHOULD attempt to use any additional SRV records that may have been returned, following the normal rules for SRV record selection. Note that in most cases, theofferer is preventedtransport protocol will be determined separately fromallowingtheanswerer override this choice. 5. Sendresolution process. For example, if the MSRP URL was communicated in an SDP offerusingor answer, thenormal processing forSDP M-line will contain thesignalingtransport protocol.IfWhen an MSRP URL is communicated outside of SDP, theofferer choosesprotocol SHOULD also be communicated. For example, a client may be configured toforce the answereruse a particular relay that is referenced with an MSRP URL. The client MUST also be told what protocol tohostuse. If a device needs to resolve an MSRP URL and does not know thesession,protocol, it SHOULD assume TCP. 7.1.3 The msrps URL Scheme The "msrps" URL Scheme indicates that each hop MUSTperform the following steps instead: 1. Construct an SDP offer as described above, but with no session attribute. 2. Insert a direction attributebe secured with TLS. Otherwise, it is used identically as an MSRP URL, except that avalue of "active". 3. Send the offer using normal processing for the signaling protocol. When the answerer receives the SDP offer and choosesMSRPS URL MUST NOT be considered equivalent toparticipatean MSRP URL. The MSRPS scheme is further discussed inthe session, it must choose whether of act as the hostSection 10. 7.2 MSRP messages MSRP messages are either requests or responses. Requests and responses are distinguished from one another by thevisitor. A direction attribute valuefirst line. The first line of"both" in the offer indicates thata Request takes theofferer wishes to host, but will allowform of theanswerer to host, in which caserequest-start entry below. Likewise, theanswerer SHOULD actfirst line of a response takes the form of response-start. The syntax for an MSRP message is as follows: Campbell, et al. Expires December 29, 2003 [Page 17] Internet-Draft SIMPLE IM Sessions June 2003 msrp-message = request-start/response-start *(header CRLF) [CRLF body] request-start = "MSRP" SP length SP Method CRLF response-start= "MSRP" SP length SP Status-Code SP Reason CRLF length = 1*DIGIT ; thevisitor, but MAY choose to host. A valuelength of"passive" meanstheofferer insists upon hosting, in which casemessage, exclusive of theanswererstart line. Method = SEND / BIND / VISIT header = Client-Authenticate / Server-Challenge / Transaction-ID / Session-URL/ Content-Type / Expires Status-Code = 200 ;Success / 400 ;Bad Request / 401 ;Authentication Required / 403 ;Forbidden / 415 ;Unsupported Content Type / 426 ;Upgrade Required / 481 ;No session / 500 ;Cannot Deliver / 506 ;duplicate session Reason = token ; Human readable text describing status Client-Authenticate = "CAuth" credentials Server-Challenge = "SChal" ":" challenge Transaction-ID = "Tr-ID" ":" token Content-Type = "Content-Type" ":" quoted-string Session-URL = "S-URL" ":" msrp_url Expires = "Exp"":" delta-seconds delta-seconds= 1*DIGIT ; Integer number of seconds All requests and responses MUSTact as visitor or decline the offer. Ifcontain at least a TR-ID header field. Messages MAY contain other fields, depending on theanswerer chooses to participate asmethod or response code. 7.3 MSRP Transactions An MSRP transaction consists of exactly one request and one response. A response matches avisitor,transaction if itMUST perform the following steps: 1. Determineshare thehost addresssame TR-ID value, andport fromarrives on thesession URL, followingsame connection on which theprocedurestransaction was sent. BIND is always hop by hop. VISIT transactions are usually hop-by-hop, but may be relayed insection Section 6.1 2. Connect tosituations where thehost address and port, usingvisiting endpoint uses a relay. However, SEND transactions are end-to-end, meaning that under normal circumstances thetransport protocol fromresponse is sent by theM-line. 3. Construct a VISIT request, whichpeer endpoint, even if there are intervening relays. Endpoints MUSTcontain the following information: 1. An S-URLselect TR-ID header fieldcontainingvalues in requests so that they are not repeated by the same endpoint in scope of the given session. TR-ID values SHOULD be globally unique. The TR-ID space of each endpoint is independent of that of its peer. Endpoints MUST NOT infer any semantics from thesession URL. 2. ATR-ID header fieldcontaining a unique transaction ID. 3. An Exp header field containing the expiration time for the VISIT request.beyond what is stated Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page17]18] Internet-Draft SIMPLE IM SessionsMayJune 20034. A size field containingabove. In particular, TR-ID values are not required to follow any sequence. MSRP Transactions complete when a response is received, or after a timeout interval expires with no response. Endpoints MUST treat such timeouts in exactly the same way they would treat a 500 response. The size ofthe message subsequent to the start-line. 4. Send the requestthe timeout interval is a matter of local policy, with a default of 30 seconds after a request has been completely sent. 7.4 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 (a host andwait foraresponse 5. If the transaction succeeds, set the actual expiration timevisitor) and may have one or two relays. A session is identified by an MSRP URL. 7.4.1 Initiating an MSRP session When an endpoint wishes tothe valueengage a peer endpoint in a message session, it invites theExp header field inpeer to communicate using an SDP offer, carried over SIP or some other protocol supporting theresponse, and send aSDP offer/ answerviamodel. For thesignaling protocol, accordingpurpose of this document, we will refer to thefollowing rules: 1. The C-line is copied unmodified from the offer. 2. The M-Line contains a dummy port value, the protocol field fromendpoint choosing to initiate communication as theoriginal offer,offerer, anda format list describingtheSEND payload media types thatpeer being invited as theanswereranswerer. The offerer SHOULD volunteer to act as the hosting endpoint if allowed by policy and network topology. An endpoint iswillingsaid toaccept.host a session if one of two conditions are true. Theformat list in the answer MUST behost either directly listens for a connection from thesame as the format list in the offer,peer endpoint, and maintains session state itself, or it uses asubset. 3. A direction attribute containingBIND request to initialize session state at a relay that will listen for a connection from thevalue "active". 6. Ifpeer. The peer that is not the host is designated as thetransaction fails,visitor. The offerer MAY request the answererMAY chooseto act ashost,host ifallowed by the direction attribute of the answer. If the answererit isunableprevented from accepting connections by network topology orunwillingpolicy, and is not able tohost, then it should return an error response as appropriate for the signaling protocol.bind to a relay to act on its behalf. If theanswerer choosesofferer wishes to host thesession,session directly, that is without using a relay, it MUST perform the following steps: 1. Construct anewsession MSRP URL . This URL MUST bea MSRP URL, MUST resolveresolvable to theanswerer, and MUST not be the same as the session URL in the offer.offerer. The URL SHOULD be temporary, SHOULD be hard to guess, and MUST not duplicateURLs currently identifyingthe URL of anyactive sessionsother session currently hosted by theanswerer.offerer. 2. Listen for a connection from the peer. 3. Construct an SDPansweroffer as described in Section5, mapping6, including the list of allowed IM payload formats in the format list. The Campbell, et al. Expires December 29, 2003 [Page 19] Internet-Draft SIMPLE IM Sessions June 2003 offerer maps thenewsession URL to the sessionattribute, and insertingattribute, as described in Section 6.4. 4. Insert a direction attribute. This value SHOULD be "both", indicating that the offerer will allow the answerer to override the offerer's decision to host. If "both" is selected, the offerer SHOULD leave the timeout at the default value (by leaving out the value entirely." However, the offerer MAY select a different timeout if circumstances warrant it. The direction value MAY be "passive" if the offerer is prevented from allowing the answerer override this choice. 5. Send the SDP offer using the normal processing for the signaling protocol. If the offerer chooses to force the answerer to host the session, it MUST perform the following steps instead: 1. Construct an SDP offer as described above, but with no session attribute. 2. Insert a direction attribute withthea value of"passive". 4."active". 3. Send theSDPoffer usingthenormal processing for the signaling protocol. When theoffereranswerer receives the SDPanswer,offer and chooses to participate in the session, it mustdetermine who will continue to hostchoose whether of act as thesession. Ifhost or theanswer contained avisitor. A direction attribute value of"active", the offerer MUST continue as host. If the offer contained "active" or"both"andin theanswer contains "passive", thenoffer indicates that the offererMUSTwishes to host, but will allow the answerer tohosthost, in which case theCampbell, et al. Expires November 20, 2003 [Page 18] Internet-Draft SIMPLE IM Sessions May 2003 session. Ifanswerer SHOULD act as the visitor, but MAY choose to host. A value of "passive" means the offerer insists upon hosting, in which case the answerer MUST act as visitor or decline the offer. If the answerer choosesnottocontinueparticipate ashost,a visitor, it MUST perform the following steps: 1.Release resources it acquired in expectation of hosting the session, if any. 2.Determine the host address and port from the sessionURL of the answer,URL, following the procedures in section Section6.1 3.7.1 2. Connect to the host address and port, using the transport protocol from the M-line.4.3. Construct a VISIT request, which MUST contain the following information: 1.AAn S-URL header field containing the session URL. Campbell, et al. Expires December 29, 2003 [Page 20] Internet-Draft SIMPLE IM Sessions June 2003 2. A TR-ID header field containing a unique transaction ID. 3.An Exp header field containing the expiration time for the VISIT request. 4.A size field containing size of the message subsequent to the start-line.5.4. Send the request and wait for a response6.5. If the transaction succeeds,setsend a SDP answer via the signaling protocol, according to the following rules: 1. The C-line is copied unmodified from the offer. 2. The M-Line contains a dummy port value, the protocol field from the original offer, and a format list describing the SEND payload media types that the answerer is willing to accept. The format list in theactual expiration time toanswer MUST be either thevalue insame as theExp header fieldformat list in theresponse, and acknowledge the answer viaoffer, or a subset. 3. A direction attribute containing thesignaling protocol.value "active". 6. Ifeither the connection attempt ortheVISITtransactionfail, acknowledgefails, theanswer, then initiateanswerer MAY choose to act as host, if allowed by thetear-downdirection attribute of thesession usinganswer. If thesignaling protocol. 6.6.2 Handling VISIT requests An MSRP endpoint thatanswerer ishosting a session will receive a VISIT request from the visiting endpoint. When an endpoint receives a VISIT request,unable or unwilling to host, then itMUST perform the following procedures: 1. Check if state existsshould return an error response as appropriate fora session with a URL that matches the S-URL oftheVISIT request. If so, and if no visitorsignaling protocol. Some TCP connectionhas been associated with the session, determine the expirationfailure conditions may ordinarily take some timeaccordingto notice. For example, if theprocedures in Section 6.8, then returnofferer is unable to open a200 response, and save state designating theTCP connectionon which Campbell, et al. Expires November 20, 2003 [Page 19] Internet-Draft SIMPLE IM Sessions May 2003 the request was received as the visitor leg of the session. 2. If the session exists, andto thevisitorhost device, this connectionhas already been established, andattempt may take a fairly large number of seconds to timeout. This length of time will not be acceptable for many call flow scenarios. Therefore, therequest arrived ondevices SHOULD limit theexisting visitor connection, treattime they wait for therequest asTCP connection to arefresh, as described in Section 6.8. Ifshorter timeout value, which will default to 30 seconds. However, therequest arrived onofferer MAY supply a differentconnection, return a 506 response and do not change session statetime inany way. 3.the timeout parameter of the "both" direction value. Ifno matching session exists, return a 481 request, and do not change session state in any way. 6.6.3 Sending Instant Messages on a Session Oncethe offerer supplies aMSRP session has been established, either endpoint may send instant messages to its peer usingvalue, theSEND method. Whenanswerer SHOULD use that value for the TCP connection timeout, interpreted as anendpoint wishesinteger number of seconds. If the answerer chooses todo so,host the session, it MUSTconstruct a SEND request according toperform the followingprocess:steps: 1.Insert the message payload inConstruct a new session URL . This MUST be a MSRP or MSRPS URL, MUST resolve to thebody,answerer, andthe media type in the Content-Type header field. The media typeMUSTmatch one of the types innot be theformat list negotiated insame as theSDP exchange. If a "*" is presentsession URL in theformat list, then the media typeoffer. The URL SHOULD be temporary, SHOULDmatch one of the explicitly listed entries, but MAYbe hard to guess, and MUST not duplicate URLs currently identifying anyother arbitrary value. 2. Setactive sessions hosted by theTR-ID header field toanswerer. 2. Listen for aunique value.connection from the peer. Campbell, et al. Expires December 29, 2003 [Page 21] Internet-Draft SIMPLE IM Sessions June 2003 3.SendConstruct an SDP answer as described in Section 6, mapping therequest onnew session URL to theconnection associatedsession attribute, and inserting a direction attribute with thesession.value of "passive". 4.If a 2xx response code is received,Send thetransaction was successful. 5. If a 5xx response code is received,SDP offer using thetransaction failed, but may possibly be successful if retried. The endpoint MAY retrynormal processing for therequest as a new transaction, that is, with a new TR-ID value. Ifsignaling protocol. When theendpointofferer receives5xx responses more than some threshold number of times in a row,the SDP answer, itSHOULD assumemust determine who will continue to host thesession has failed, and initiate tear-down viasession. If thesignaling protocol. The threshold value isanswer contained amatterdirection attribute value oflocal policy. 6."active", the offerer MUST continue as host. Ifa 415 response is received, this indicatestherecipient is unableoffer contained "active" orunwilling to process"both" and themedia type. The sender SHOULD NOT attemptanswer contains "passive", then the offerer MUST allow the answerer tosend that particular media type again inhost thecontext of thissession.7.Ifany other response code is received,theendpoint SHOULD assumeofferer chooses not to continue as host, it MUST perform thesession has failed,following steps: 1. Release resources it acquired in expectation of hosting the session, if any. 2. Determine the host address andinitiate tear-down. Campbell, et al. Expires November 20, 2003 [Page 20] Internet-Draft SIMPLE IM Sessions May 2003 When an endpoint receivesport from the session URL of the answer, following the procedures in section Section 7.1 3. Connect to the host address and port, using the transport protocol from the M-line. 4. Construct aSENDVISIT request,itwhich MUSTperformcontain the followingsteps.information: 1.Determine that it understands the media type inA S-URL header field containing thebody, if any exists.session URL. 2.If it does, returnA TR-ID header field containing a200 response and renderunique transaction ID. 3. A size field containing size of the message subsequent to theuser. The method of rendering isstart-line. 5. Send the request and wait for amatter of local policy. 3.response 6. Ifit does not understandthemedia type, return a 415 response. 6.6.3.1 Ending a Session When either endpoint in an MSRP session wishes to endtransaction succeeds, set thesession, it first signals its intent usingactual expiration time to thenormal processing forvalue in thesignaling protocol. For example,Exp header field inSIP, it would send a BYE request tothepeer. After agreeing to endresponse, and acknowledge thesession,answer via thehost endpoint MUST release any resources acquired as part ofsignaling protocol. If either thesession. The process for this differs depending on whetherconnection attempt or thesession is hosted directly byVISIT transaction fail, acknowledge thehost, or an a relay. The host MUST destroy local state foranswer, then initiate thesession. This involves completely removingtear-down of thestate entry for this session and invalidatingsessionURL. If the host isusinganthe signaling protocol. Campbell, et al. Expires December 29, 2003 [Page 22] Internet-Draft SIMPLE IM Sessions June 2003 7.4.2 Handling VISIT requests An MSRPrelay, it MUST sendendpoint that is hosting a session will receive aBIND containing an expires value of zero. ThisVISIT requestMUST be sent host connection established byfrom theoriginal BIND request. This BIND requestvisiting endpoint. When an endpoint receives a VISIT request, it MUSTincludeperform the following procedures: 1. Check if state exists for a session with a URLinthat matches the S-URLheader field. Since these host actions completely destroyof thesessionVISIT request. If so, and if no visitor connection has been associated with the session, then return a 200 response, and save stateatdesignating thehosting device,connection on which the request was received as the visitoris not required to take further action beyond cleaning up any local state.leg of the session. 2. Iffor some reasonthehost fails to destroysessionstate, the state will be invalidated anyway when either ofexists, and theoriginal BIND or VISIT requests expire. 6.6.4 Managing Session Statevisitor connection has already been established, return a 506 response andConnections A MSRPdo not change sessionis represented bystateat the host device. As mention previously,in any way. 3. If no matching session exists, return a 481 request, and do not change session stateis identified by anin any way. 7.4.3 Sending Instant Messages on a Session Once a MSRPURL. An activesessionalsohastwo associated network connections. The connection hosting device andbeen established, either endpoint may send instant messages to its peer using thehostSEND method. When an endpointis known aswishes to do so, it MUST construct a SEND request according to the following process: 1. Insert the message payload in the body, and the media type in thehost connection.Content-Type header field. Theconnection with the visiting endpoint ismedia type MUST match one of thevisiting connection. Note that whentypes in thesession state is hosted directly by an endpoint,format list negotiated in thehost connection may not involveSDP exchange. If aphysical network connection; rather it"*" isa logical connectionpresent in thedevice maintains with itself. When session state is destroyed for any reason,format list, then thehosting device Campbell, et al. Expires November 20, 2003 [Page 21] Internet-Draft SIMPLE IM Sessions May 2003media type SHOULDdropmatch one of theconnection(s). If a connection fails forexplicitly listed entries, but MAY be anyreason,other arbitrary value. 2. Set thesession hosting device MUST invalidateTR-ID header field to a unique value. 3. Send thesession state. This is true regardless of whetherrequest on thedroppedconnection associated with the session. 4. If a 2xx response code is received, thehost or visiting connection. Oncetransaction was successful. 5. If aconnection5xx response code isdropped,received, theassociated session state MUST NOTtransaction failed, but may possibly bereused. Ifsuccessful if retried. The endpoint MAY retry theendpoints wish to continue to communicate after a connection failure, they must initiaterequest as a newsession. An endpoint detectingtransaction, that is, with aconnection failure SHOULD attempt to tear down the session usingnew TR-ID value. If therulesendpoint receives 5xx responses more than some threshold number ofthe signaling protocol. It would be nice to allow sessions to be recovered aftertimes in aconnection failure, perhaps by allowingrow, it SHOULD assume theopposite endpoint to reconnect,session has failed, andsendinitiate tear-down via the signaling protocol. The threshold value is anew VISIT or BIND request. However, this approach createsmatter of local policy. Campbell, et al. Expires December 29, 2003 [Page 23] Internet-Draft SIMPLE IM Sessions June 2003 6. If arace condition between the time that the hosting device notices the failed connection, and415 response is received, this indicates thetime thatrecipient is unable or unwilling to process theendpoint triesmedia type. The sender SHOULD NOT attempt torecoversend that particular media type again in the context of this session. 7. If any other response code is received, the endpointattempts to reconnect prior toSHOULD assume thehosting device noticingsession has failed, and initiate tear-down. When an endpoint receives a SEND request, it MUST perform thefailure,following steps. 1. Determine that it understands thehosting device will interpretmedia type in therecovery attempt asbody, if any exists. 2. If it does, return aconflict. The only way around this would be to force200 response and render thehosting devicemessage todo a liveness check ontheoriginal connection, which would createuser. The method of rendering is alotmatter ofcomplexity and overhead that dolocal policy. 3. If it does notseem to be worthunderstand thetrouble. 6.7 MSRP Relays 6.7.1 Establishing Session State at a Relay An endpoint that wishes to host a MSRP session MAY do so by initiating session state atmedia type, return aMSRP relay, rather than hosting directly. An endpoint may wish to do this because network topology or local policy prevents415 response. 7.4.4 Ending apeer from connecting directlySession When either endpoint in an MSRP session wishes to end theendpoint. The use of a relay should not besession, it first signals its intent using thedefault case, that is,normal processing for the signaling protocol. For example, in SIP, it would send ahostingBYE request to the peer. After agreeing to end the session, the host endpointthatMUST release any resources acquired as part of the session. The process for this differs depending on whether the session isnot prevented from doing sohosted directly bytopologythe host, orpolicy SHOULDan a relay. The host MUST destroy local state for the session. This involves completely removing the state entry for this sessiondirectly. In order to use a relay,and invalidating session URL. If the host is using an MSRPendpointrelay, it MUSThave knowledge of that relay's existence and location.. We previously mentioned howsend a BIND containing anendpoint wishing toexpires value of zero. This request MUST be sent hosta MSRP session constructsconnection established by the original BIND request. This BIND request MUST include the sessionURL. When using a relay,URL in theendpoint delegates that responsibility toS-URL header field. Since these host actions completely destroy therelay. To establishsession state ata relay,theendpoint MUST performhosting device, thefollowing steps: 1. Open a network connectionvisitor is not required to take further action beyond cleaning up any local state. If for some reason the host fails to destroy session state, therelaystate will be invalidated anyway when the inactivity timer expires. 7.4.5 Session Inactivity Timer State associated with MSRP sessions, either at therelays address and the well-known port for MSRP relays,host endpoint, orat another port if soa hosting or visiting relay, is soft-state; that is, it expires over Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page22]24] Internet-Draft SIMPLE IM SessionsMayJune 2003configured. 2. Constructtime if no message activity occurs. Each such device maintains aBIND requestpair of inactivity timer, each witha S-URL that refers to the relay. 3. Setan initial value of 1 minute. One of these timers is assigned for each endpoint. All devices use theExpire header field to a desiredsame, predetermined timer expiration value.4. Send the BIND requestWhile there might be some utility in negotiating this timer onthe connection. 5. Responda per device basis, such negotiation would add a great deal of complexity toany authentication request fromMSRP. When a hosting device or visiting relay returns a successful response to a VISIT request, it MUST initialize both timers. The device MUST reset a timer anytime therelay. 6.associated endpoint sends a SEND request. If either timer expires without being reset, theresponse has a 2xx status code, usedevice MUST invalidate theURLsession, using normal procedures depending on the device's role in theS-URL header field assession. Each endpoint MUST keep a similar timer, which it initializes when the sessionURL. The endpoint usesis created from its perspective. For the host endpoint, thisURLis when it receives a successful response to a BIND request. For a visiting endpoint, this is when it sees a successful response to a VISIT request. Each endpoint resets its timer whenever it sends a SEND request. If an endpoint inactivity timer approaches expiration, and the endpoint wishes to continue participating inexactlythesame manner as it had constructedsession, ititself. Additionally, acceptMUST send a SEND request. This request MAY be sent without a body if there is no user data to send. Endpoints MUST select theexpirestimer valuein the response as session expiration time. A MSRP relay listensso that there is sufficient time forconnectionsthe SEND request to traverse toits well-known port at all times. When it receives a BIND request, it SHOULD authenticatetherequest, either using digest-authentication, TLS authentication, or some other authentication mechanism.opposite endpoint. Ifauthentication succeeds,therelay performs the following steps: 1. Verifyendpoint waits to theclientlast moment, there isauthorized to BIND to this relay. If not, returna403 responsedanger that it will not be received by all relevant devices in time to prevent session destruction. 7.4.6 Managing Session State andmake noConnections A MSRP session is represented by statechange. 2. Ifat theclient is authorized, construct ahost device. As mention previously, session state is identified by an MSRP URL. An active session also has two associated network connections. TheURL MUST resolve to the relay. It SHOULD be temporary,connection hosting device andhard to guess. It MUST not duplicate URL used in any active sessions hosted bytherelay. Ifhost endpoint is known as therelay wisheshost connection. The connection with the visiting endpointto connect over a point other than the MSRP relay well-know port, it MUST explicitly add the port number to visitor URL. 3. Establishis theexpiration time forvisiting connection. Note that when the sessionaccording to section Section 6.8. 4. Createstatefor the session. The relay MUST associateis hosted directly by an endpoint, the host connectionon whichmay not involve a physical network connection; rather it is a logical connection the device maintains with itself. When session state is destroyed for any reason, theBIND request arrived ashosting device SHOULD drop thehostconnection(s). If a connection fails forthe session. 5. Return a 200 response, withany reason, the sessionURL in the S-URL header field, andhosting device MUST invalidate the sessionexpiration time in the Exp header field.. When an MSRP relay receives a VISIT request, it MUST performstate. This is true regardless of whether thefollowing steps: 1. Checkdropped connection is theS-URL header field value to see it matcheshost or visiting connection. Once a connection is dropped, theURL for an existingassociated session stateentry.MUST NOT be Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page23]25] Internet-Draft SIMPLE IM SessionsMayJune 20032.reused. Ifnot, returnthe endpoints wish to continue to communicate after a481 response and make no state changes 3. If it matches, but anotherconnectionhas already been associated withfailure, they must initiate a new session. An endpoint detecting a connection failure SHOULD attempt to tear down the sessionURL, returnusing the rules of the signaling protocol. It would be nice to allow sessions to be recovered after a506 response and make no state changes. Ifconnection failure, perhaps by allowing thesession has been previously associated withopposite endpoint to reconnect, and send a new VISIT or BIND request. However, this approach creates a race condition between the time that the hosting device notices the failed connection,treateand therequest as a refresh. 4.time that the endpoint tries to recover the session. Ifit matches, and no visiting connection has been previously associated withthesession, thenendpoint attempts to reconnect prior to theVISIT succeeds. The relay assignshosting device noticing theconnection on which it receivedfailure, theVISIT requesthosting device will interpret the recovery attempt as a conflict. The only way around this would be to force thevisiting connection forhosting device to do a liveness check on thesession, and returnsoriginal connection, which would create a200 response. The visit expiration time is established as described in Section 6.8lot of complexity andreturned inoverhead that do not seem to be worth theresponse. 6.7.2 Removingtrouble. 7.5 MSRP Relays 7.5.1 Establishing Session Statefromat arelayRelay An endpoint that wishes to host a MSRPrelay SHOULD removesession MAY do so by initiating session stateforat asession when any ofMSRP relay, rather than hosting directly. An endpoint may wish to do this because network topology or local policy prevents a peer from connecting directly to thefollowing conditions occur: oendpoint. Theexpiration time for eitheruse of a relay should not be theBIND or VISIT is reached withoutdefault case, that is, arespective refresh request. o Thehosting endpoint that is not prevented from doing so by topology or policy SHOULD hostsendsthe session directly. In order to use aBIND refresh request matching withrelay, anexpiration valueMSRP endpoint MUST have knowledge ofzero. o Either the host or visitor network connection fails for any reason. 6.7.3 Sending IMs acrossthat relay's existence and location.. We previously mentioned how an endpoint wishing to host a MSRPrelay Oncesession constructs session URL. When using a relay, the endpoint delegates that responsibility to the relay. To establish session state at a relay, the endpoint MUST perform the following steps: 1. Open asession is establishednetwork connection to the relay ata relay,thehostrelays address andvisitor may exchange IMs by sending SEND requests. Under normal circumstances,port. Normally, this information will be resolved from an MSRP URL representing therelay does not respond to SEND requests in any way. Rather,relay, although the relayMUST forward theMAY be configured with an explicit address and port, rather than a URL. 2. Construct a BIND request with a S-URL that refers to thepeer connection unchanged. Likewise, ifrelay. 3. Set therelay receivesExpire header field to aresponse it MUST forwarddesired value. Campbell, et al. Expires December 29, 2003 [Page 26] Internet-Draft SIMPLE IM Sessions June 2003 4. Send the BIND requestunchangedon thepeerconnection.If a SEND5. Respond to any authentication requestarrives on a connection that is not associated with a session,from therelay MUST returnrelay. 6. If the response has a481 response. 6.7.4 Relay Pairs In rare circumstances, two relays may be required2xx status code, use the URL ina session. For example, two endpoints may existthe S-URL header field as the session URL. The endpoint uses this URL inseparate administrative domains, where each domain's policy insist thatexactly the same manner as it had constructed it itself. Additionally, accept the expires value in the response as pre-visit expiration time. A MSRP relay listens for connections at allsessions must cross that domain'stimes. When it receives a BIND request, it SHOULD authenticate the request, either using digest-authentication, TLS authentication, or some other authentication mechanism. If authentication succeeds, the relay performs the following steps: 1. Verify the client is authorized to BIND to this relay.A relay operating on behalf ofIf not, return a 403 response and make no state change. 2. If thevisiting endpoint Campbell, et al. Expires November 20, 2003 [Page 24] Internet-Draft SIMPLE IM Sessions May 2003client isknown asauthorized, construct avisiting relay. Ansession MSRPrelay MAYURL. The URL MUST resolve to the relay. It SHOULD becapable of acting as a visitingtemporary, and hard to guess. It MUST not duplicate URL used in any active sessions hosted by the relay.In a twoIf the relayscenario,wishes thevisitor connectsvisiting endpoint to connect over arelay operating on its behalf, ratherpoint other thanconnecting directly tothehosting device. The visitor sends a VISIT request as it would ifMSRP relay well-know port, ithad connected directlyMUST explicitly add the port number to visitor URL. 3. Establish thehosting device.pre-visit expiration time for the session according to section Section 7.4.5. 4. Create state for the session. Thevisitingrelaythen connect toMUST associate thehosting device and performs a VISIT requestconnection onbehalf ofwhich thevisitor. When a relay that is capable of actingBIND request arrived asa visiting relay receives a VISIT request, it MUST check to see iftheS-URL ofhost connection for therequest matchessession. 5. Return adomain that the relay hosts. If200 response, with the session URLmatches, then the visitor is not requestingin therelay act as a visiting relay,S-URL header field, andit SHOULD operate normally. IftheURL does not match, thenpre-visit session expiration time in the Exp header field. When an MSRP relaySHOULDreceives a VISIT request, it MUST perform the following steps: 1.The relay SHOULD authenticate the VISIT request, using digest authentication or some other mechanism. 2. Determine thatCheck thevisiting endpoint is authorizedS-URL header field value touse this device as a visiting relay.see it matches the URL for an existing session state entry. 2. If not, return a403481 response anddrop the connection.make no state changes 3.Attempt to open aIf it matches, but another connectionto the hosting device, determininghas already been associated with theaddresssession URL, return a 506 response andport frommake no state changes. If theS-URL exactlysession has been previously associated with this Campbell, et al. Expires December 29, 2003 [Page 27] Internet-Draft SIMPLE IM Sessions June 2003 connection, treat the request asif it wereavisiting endpoint connecting directly.refresh. 4. Ifthisit matches, and no visiting connectionis successful, continuehas been previously associated with theremaining steps. Otherwise, returnsession, then the VISIT succeeds. The relay assigns the connection on which it received the VISIT request as the visiting connection for the session, and returns a500200 response.4. Create local7.5.2 Removing Session State from a relay An MSRP relay SHOULD remove stateto associatefor a session when any of the following conditions occur: o The session inactivity timer expires. o The pre-visit timer expires before a VISIT request has occurred. o The host sends a BIND refresh request matching with an expiration value of zero. o Either the host or visitor network connectiontofails for any reason. 7.5.3 Sending IMs across an MSRP relay Once a session is established at a relay, the hostdevice withand visitor may exchange IMs by sending SEND requests. Under normal circumstances, theconnectionrelay does not respond to SEND requests in any way. Rather, thevisiting device. 5. Relayrelay MUST forward theVISITrequestunchangedto thehosting device. 6. Relaypeer connection unchanged. Likewise, if the relay receives a responsetoit MUST forward theVISITrequest unchangedtoon thevisiting endpoint.peer connection. Ifthe responsea SEND request arrives on a connection that is not associated with a200, set the expiration time for the local session state to the value in the Exp header insession, the relay MUST return a 481 response.7.7.5.4 Relayall subsequent arriving on one of the associated connections to the peer connection. The preceding steps resultPairs In rare circumstances, two relays may be required inlocal session statea session. For example, two endpoints may exist in separate administrative domains, where each domain's policy insist thatexpires basedall sessions must cross that domain's relay. A relay operating onthe expiration time negotiated betweenbehalf of the visiting endpointand the hosting device. Theis known as a visiting relay. An MSRP relay MAY be capable of acting as a visiting relay. This document does not describe a mechanism for an endpointwill send VISIT requests on the same connection from timetotimediscover that it needs torefresh the session state expiration time. Ause a visitingrelay MUST refresh the local expirationrelay. We assume that an Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page25]28] Internet-Draft SIMPLE IM SessionsMayJune 2003time basedendpoint is globally configured to use or not use such a relay, and does not make this decision onthe Exp header field value inasuccessful responsesession-by-session basis. This, of course, does not preclude using some other mechanism to make such aVISIT request. If the local expiration time passes withoutdecision. In arefresh, the visitingtwo relaySHOULD invalidatescenario, thesession state and SHOULD dropvisitor connects to a relay operating on its behalf, rather than connecting directly to theassociated connections. If either associated connection fails for any reason,hosting device. The visitor sends a VISIT request as it would if it had connected directly to the hosting device. The visiting relaySHOULD invalidatethen connects to thesession state,hosting device andSHOULD drop the peer connection. 6.8 Session State Expiration State associated with MSRP sessions, either atperforms a VISIT request on behalf of thehost endpoint orvisitor. When ahost relay, is soft-state;relay thatis, it expires over time unless refreshed. The expiration timeisdetermined by the Expires header field in VISIT and BIND requests. Allcapable of acting as a visiting relay receives a VISITand BIND requestsrequest, it MUSTcontain an Expires header field. This field is defined as an integer numbercheck to see if the S-URL ofseconds fromthetimerequest matches a domain that therequestrelay hosts. If the URL matches, then the visitor isreceived. When a hosting device (endpoint or relay) creates session state due tonot requesting the relay act as asuccessful VISIT request,visiting relay, and it SHOULDacceptoperate normally. If theExpires value fromURL does not match, then the relay SHOULD perform the following steps: 1. The relay SHOULD authenticate the VISIT request,although it MAY chooseusing digest authentication or some other mechanism. 2. Determine that the visiting endpoint is authorized to use this device as asmaller value. It MUST NOT choosevisiting relay. If not, return alarger value. The device MUST communicate403 response and drop theactual chosen value backconnection. 3. Attempt tothe opposite endpoint by placing the value in an expires header field in the response. Likewise, whenopen arelay creates session state dueconnection toa successful BIND request, it SHOULD accepttheexpires valuehosting device, determining the address and port from therequest, althoughS-URL exactly as if itMAY choosewere asmaller value. It MUST NOT choosevisiting endpoint connecting directly. If this connection is successful, continue with the remaining steps. Otherwise, return alarger value. The device MUST communicate500 response. 4. Create local state to associate theactual chosen value backconnection to theopposite endpoint by placinghost device with thevalue in an Expires header field inconnection to theresponse. Avisitingrelay does not normally respond to a VISIT request. Rather, it relaysdevice. 5. Relay the VISIT request unchanged to the hostingdevice, and relaysdevice. 6. Relay theresultingresponsebackto the VISIT request unchanged to the visiting endpoint.This prevents it from being able7. Relay all subsequent arriving on one of the associated connections tonegotiatetheexpiration time inpeer connection. If either associated connection fails for any reason, thesame way as hosting devices. Therefore, avisiting relay MUSTdetermine session expiration time frominvalidate theExp header field in any 200 response returned bysession state, and MUST drop thehosting device. 6.9peer connection. Campbell, et al. Expires December 29, 2003 [Page 29] Internet-Draft SIMPLE IM Sessions June 2003 7.6 Digest Authentication MSRP relays may use the digest authentication scheme to authenticate users. MSRP digest authentication is a simplified version of HTTP digest authentication[18],[19], but this specification does not normatively depend on that document. MSRP digest authentication does not support the concept of a protection domain, nor does it support integrity protection. Since a user of a relay is expected to haveCampbell, et al. Expires November 20, 2003 [Page 26] Internet-Draft SIMPLE IM Sessions May 2003credentials for that particular relay, it does not support the realm concept. Finally, since digest authentication is only expected for the initial BIND or VISIT request, MSRP does not support HTTP digest optimizations such as MD5-sess and preemptive credential loading by the client. Typically, a hosting user that uses a relay will have a preexisting relationship with that relay. This relationship SHOULD include authentication credentials. An MSRP relay SHOULD authenticate initial BIND requests. It is less likely that the visiting user will have an account at the hosting relay, so inmanymost cases the authentication of VISIT requests is not useful. However a relay MAY authenticate initial VISIT requests. A visiting relay SHOULD authenticate initial VISIT requests, as it is much more likely to share credentials with the visiting user. There has been some discussion that a hosting relay SHOULD also authenticate VISIT requests. However, it will beverycommon for visiting users to have no preexisting relationship with the host relay. Using authentication here would require the host endpoint to send temporary credentials in the SDP exchange, perhaps as part of the session URL. However, these temporary credentials would necessarily be transferred via the same channels as the session URL itself. If the credentials are sufficiently protected in transfer, then so is the session URL. Further, since the session URL is intended for a one time use, and is expected to be hard to guess, that URL itselfmayshould be sufficient for this purpose. Any situation where this is not adequate can be covered by the use of the MSRPS scheme. MSRP relays MUST NOT request authentication for any method other than BIND and VISIT. If a relay wishes to authenticate a request using digest authentication, it MAY challenge the request by responding with a 401 response, which MUST include a SChal header field. If an endpoint wishes to respond to a digest authentication challenge Campbell, et al. Expires December 29, 2003 [Page 30] Internet-Draft SIMPLE IM Sessions June 2003 received in a 401 response, it MAY do so by sending a new VISIT or BIND request, identical to the previous request, but with a CAuth header field containing the response to the challenge.6.9.17.6.1 TheMD5SHA1 Algorithm The only digest authentication algorithm defined in this specification isMD5. [8]SHA1. [9] Other algorithms can be added as extensions.MD5SHA1 is the default algorithm if no algorithm directive is present in the challenge.Campbell, et al. Expires November 20, 2003 [Page 27] Internet-Draft SIMPLE IM Sessions May 2003TheMD5 algorithmSHA1 digest is defined as follows: Let KD(secret, data) denote the string obtained by performing the digest algorithm to the data "data" with the secret "secret". Let H(data) denote the string obtained by performing the checksum algorithm on the data "data". For the"MD5""SHA1" algorithm, H(data) =MD5(data),SHA1(data), and KD(secret,data) = H(concat(secret, ":", data) The request-digest value in a CAuth header field takes the following format. Note that unq(quoted-string) denotes the value of the string with the quotes removed. request-digest = <"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <"> A1 = unq(username-value) ":" shared-secret A2 =Methodconcat(Method,TR-ID,S-URI) When the relay receives a CAuth header, it SHOULD check its validity by looking up the shared secret, or H(A1), performing the same digest operation as performed by the client, and comparing the results to the request-digest value.6.107.7 Method Descriptions This section summarizes the purpose of each MSRP method. All MSRP messages MUST contain the TR-ID header fields. All messages MUST contain a length field in the start line that indicates the overall length of the request, including any body, but not including the start line itself. Additional requirements exist depending on the individual method. Except where otherwise noted, all requests are hop by hop.6.10.17.7.1 BIND The BIND method is used by a host endpoint to establish or refresh session state at a hosting relay. BIND requests SHOULD be Campbell, et al. Expires December 29, 2003 [Page 31] Internet-Draft SIMPLE IM Sessions June 2003 authenticated. BIND requests MUST contain the S-URL and Exp header fields and MAY contain the CAuth header fields. A successful response to a BIND request MUST contain the S-URL and Exp header fields.6.10.27.7.2 SEND The SEND method is used by both the host and visitor endpoints to send instant messages to its peer endpoint. SEND requests SHOULD contain a MIME body part. The body MUST be of a media type includedCampbell, et al. Expires November 20, 2003 [Page 28] Internet-Draft SIMPLE IM Sessions May 2003in the format list negotiated in the SDP exchange. If a body is present, the request MUST contain a Content-Type header field identifying the media type of the body. Unlike other methods, SEND requests are end to end in nature. This means the request is consumed only by the opposite endpoint. Under normal conditions, any intervening relays merely forward the request on towards the peer endpoint.6.10.37.7.3 VISIT The visiting endpoint uses the VISIT method to associate a network connection with the session state at the hosting device, which could be either the host endpoint or a relay operating on behalf of the host endpoint.VISIT is also used to refresh the expiration time for the visiting connection.The request MUST contain a S-URL header matching the session URL.A VISIT request MUST contain the Expires header field. Successful responses to a VISIT request MUST contain the Expires header.There is normally no authentication operation for the VISIT request. This is because the session URL acts as a shared secret between host and the visitor. This puts certain requirements on the handling of the session URLs that are discussed in Section9.10. However, if a visiting relay is used, it SHOULD authenticateinitial VISIT requests, and MAY authenticate subsequentVISITrefreshrequests.6.117.8 Response Code Descriptions This section summarizes the various response codes. Except where noted, all responses MUST contain a TR-ID header field matching the TR-ID header field of the associated request. Responses are never consumed by relays.6.11.17.8.1 200 The 200 response code indicates a successful transaction.6.11.2 400 A 400 response indicates a request was unintelligible. 6.11.3 401Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page29]32] Internet-Draft SIMPLE IM SessionsMayJune 2003 7.8.2 400 A 400 response indicates a request was unintelligible. 7.8.3 401 A 401 response indicates authentication is required. 401 responses MUST NOT be used in response to any method other than BIND and VISIT. A 401 response MUST contain a SChal header field.6.11.47.8.4 403 A 403 response indicates the user is not authorized to perform the action.6.11.57.8.5 415 A 415 response indicates the SEND request contained a MIME content-type that is not understood by the receiver.6.11.67.8.6 426 A 426 response indicates that the request is only allowed over TLS protected connections. Open Issue: Do we need to make 426 extensible to support other types of protection? 7.8.7 481 A 481 response indicates that no session exists for the connection.6.11.77.8.8 500 A 500 response indicates that a relay was unable to deliver a SEND request to the target.6.11.87.8.9 506 A 506 response indicates that a VISIT request occurred in which the S-URL indicates a session that is already associated with another connection. A 506 response MUST NOT be returned in response to any method other than VISIT.6.127.9 Header Field Descriptions This section summarizes the various header fields. MSRP header fields Campbell, et al. Expires December 29, 2003 [Page 33] Internet-Draft SIMPLE IM Sessions June 2003 are single valued; that is, they MUST NOT occur more than once in a particular request or response.6.12.17.9.1 TR-ID The TR-ID header field contains a transaction identifier used to map a response to the corresponding request. A TR-ID value MUST be unique among all values used by a given endpoint inside a given session. MSRP elements MUST NOT assume any additional semantics for TR-ID.6.12.27.9.2 Exp The Exp header field specifies when the state associated with a BINDor VISITrequest willexpire.expire, if no successful VISIT request has been received.. The value is specified as an integer number of seconds from the time the request is received. BINDand Campbell, et al. Expires November 20, 2003 [Page 30] Internet-Draft SIMPLE IM Sessions May 2003 VISITrequests MUST contain this header field. Furthermore, successful responses to BINDor VISITrequestsmustMUST also contain the Exp header. The maximum value for the Exp header field is (2**32)-1 seconds. Exp has no meaning if it occurs in MSRP messages other than BINDand VISITrequests, and responses to those requests. MSRP compliant devices SHOULD NOT use Exp in other requests or responses, unless that usage is defined in an extension to this specification.6.12.37.9.3 CAuth The CAuth header field is used by a host endpoint to respond to offer digest authentication credentials to a relay, usually in response to a digest authentication challenge. CAuth SHOULD NOT be present in a request of any method other than BIND and VISIT. The CAuth credentials adhere to the following syntax: credentials = "Digest" digest-response digest-response = 1#( username | nonce | response | [ algorithm ] | [auth-param] ) username = "username" "=" username-value username-value = quoted-string response = "response" "=" request-digest request-digest = <"> 32LHEX <"> LHEX = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "a" | "b" | "c" | "d" | "e" | "f" Campbell, et al. Expires December 29, 2003 [Page 34] Internet-Draft SIMPLE IM Sessions June 2003 The meaning of each value is as follows: username: The user's account name. nonce: The nonce value copied from the challenge. response: A 32 hex digit string that proves user knowledge of the shared secret. algorithm: The algorithm value copied from the challenge. auth-param: Additional parameters for the sake of extensibility.Campbell, et al. Expires November 20, 2003 [Page 31] Internet-Draft SIMPLE IM Sessions May 2003 6.12.47.9.4 SChal The SChal header field is used by a relay to carry the challenge in a digest authentication attempt. Exactly one SChal header field MUST exist in a 401 response. The SChal header MUST NOT be used in any message except for a 401 response. The SChal header field value is made up of a challenge according to the following syntax: challenge= digest-scheme SP digest-challenge digest-scheme = "Digest" digest-challenge = 1#( nonce | [ algorithm ] | [auth-param] ) nonce = "nonce" "=" nonce-value nonce-value = quoted-string algorithm = "algorithm" "=" ("MD5""SHA1" | token ) The meaning of each value is as follows: digest scheme: A token to identify the particular authentication scheme. For digest, the value MUST be "Digest." This token is present for the sake of extensibility. nonce: A server-specified string, which the relay SHOULD uniquely generate each time it sends a 401 response. This string SHOULD take the form of base64 or hexadecimal data, to avoid the presence of a double-quote character, which is not allowed. algorithm: A token indicating the algorithms to be used to generate the digest and checksum. This directive exists for the sake of extensibility; the only value defined by this document is"MD5". absence"SHA1". Absence of this directive indicates a value of"MD5." 6.12.5"SHA1". Campbell, et al. Expires December 29, 2003 [Page 35] Internet-Draft SIMPLE IM Sessions June 2003 7.9.5 Content-Type The Content-Type header field is used to indicate the MIME media type of the body. Content-Type MUST be present if a body is present.6.12.67.9.6 S-URL The S-URL header field is used to identify the session. The S-URI header field MUST be present in a BIND request, a successful response to a BIND request, or a VISIT request.7.8. ExamplesCampbell, et al. Expires November 20, 2003 [Page 32] Internet-Draft SIMPLE IM Sessions May 2003This section shows some example message flows for various common scenarios. The examples assume 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 examples, assume the offerer is sip:alice@atlanta.com and the answerer is sip:bob@biloxi.com. In any given MSRP message, an "xx" in the length field indicates the actual length of the rest of the message.7.18.1 No Relay In this scenario, the session goes directly between endpoints with no MSRP relays involved. Campbell, et al. Expires December 29, 2003 [Page 36] Internet-Draft SIMPLE IM Sessions June 2003 Alice Bob | | | | |(1) (SIP) INVITE | |----------------------->| |(2) (MSRP) VISIT | |<-----------------------| |(3) (MSRP) 200 OK | |----------------------->| |(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 session URL of msrp://alicepc.atlanta.com/ iau39 and listens for a connection on TCP port 7777.2.Alice->Bob (SIP): INVITE sip:bob@biloxi.com c=IN IP4 fillername m=message77779999 msrp/tcp text/plain a=direction:both a=session:msrp://alicepc.atlanta.com/iau39:77773. Bob->Alice: Open2. Bob opens a TCP connection toalicepc.atlanta.com:7777. 4.alicepc.atlanta.com:7777: Bob->Alice (MSRP): MSRP xx VISITS-URL: msrp://alicepc.atlanta.com/iau39:7777S-URL:msrp://alicepc.atlanta.com/iau39:7777 Tr-ID: sie09sExp:600 5.Campbell, et al. Expires December 29, 2003 [Page 37] Internet-Draft SIMPLE IM Sessions June 2003 3. Alice->Bob (MSRP): MSRP xx 200 OK Tr-ID: sie09s Exp:3006.4. Bob->Alice (SIP): 200 OK c=IN IP4 ignorefield m=message77779999 msrp/tcp text/plain a=direction:active7.5. Alice->Bob (SIP): ACK8.6. Alice->Bob (MSRP):Campbell, et al. Expires November 20, 2003 [Page 33] Internet-Draft SIMPLE IM Sessions May 2003MSRP xx SEND TR-ID: 123 Content-Type: "text/plain" Hi, I'm Alice!9.7. Bob->Alice (MSRP): MSRP xx 200 OK TR-ID: 12310.8. Bob->Alice (MSRP): MSRP xx SEND TR-ID: 456 Content-Type: "text/plain" Hi, Alice! I'm Bob!11.9. Alice->Bob (MSRP): MSRP xx 200 OK TR-ID: 45612.10. Alice->Bob (SIP): BYE13.Alice invalidates session and drops connection.14.Campbell, et al. Expires December 29, 2003 [Page 38] 11. Bob invalidates local state for the session.15.Bob->Alice (SIP): 200 OK7.28.2 Single Relay This scenario introduces an MSRP relay at relay.atlanta.com. Alice Relay Bob | | | | | | |(1) (MSRP) BIND | | |----------------------->| | |(2) (MSRP) 200 OK | | |<-----------------------| | |(3) (SIP) INVITE | | |------------------------------------------------>| | |(4) (MSRP) VISIT | | |<-----------------------| | |(5) (MSRP) 200 OK | | |----------------------->| |(6) (SIP) 200 OK | | |<------------------------------------------------| |(7) (SIP) ACK | | |------------------------------------------------>| |(8) (MSRP) SEND | | |----------------------->| | | |(9) (MSRP) SEND | | |----------------------->| | |(10) (MSRP) 200 OK | | |<-----------------------| |(11) (MSRP) 200 OK | | |<-----------------------| | | |(12) (MSRP) SEND | | |<-----------------------| |(13) (MSRP) SEND | | |<-----------------------| | |(14) (MSRP) 200 OK | | |----------------------->| | | |(15) (MSRP) 200 OK | | |----------------------->| |(16) (SIP) BYE | | |------------------------------------------------>| |(17) (MSRP) BIND | | |----------------------->| | |(18) (MSRP) 200 OK | | |<-----------------------| | |(19) (SIP) 200 OK | | Campbell, et al. Expires December 29, 2003 [Page 39] Internet-Draft SIMPLE IM Sessions June 2003 |<------------------------------------------------| | | | | | | 1. Alice->Relay (MSRP): Alice opens a connection to the relay, and sends the following: MSRP xx BINDS-URL: msrp://relay.atlanta.comS-URL:msrp://relay.atlanta.com TR-ID: 321 Exp:600Campbell, et al. Expires November 20, 2003 [Page 34] Internet-Draft SIMPLE IM Sessions May 20032. Relay->Alice (MSRP): MSRP xx 200 OK TR-ID: 321 S-URL: msrp://relay.atlanta.com:7777/iau39 Exp:300 3. Alice->Bob (SIP): INVITE sip:bob@biloxi.com c=IN IP4 dummyvalue m=message77779999 msrp/tcp text/plain a=direction:passive a=session:msrp://relay.atlanta.com:7777/iau39 4. Bob->Alice: Open connection to relay.atlanta.com:7777.5.Bob->Relay (MSRP): MSRP xx VISIT S-URL:msrp://relay.atlanta.com:7777/iau39 TR-ID: msrp:sie09sExp:500 6.5. Relay->Bob (MSRP): MSRP xx 200 OK TR-ID: sie09s Exp:3007.6. Bob->Alice (SIP): 200 OK Campbell, et al. Expires December 29, 2003 [Page 40] Internet-Draft SIMPLE IM Sessions June 2003 c=IN IP4nobodybutchickensnobodybutuschickens m=message77779999 msrp/tcp text/plain a=direction:active8.7. Alice->Bob (SIP): ACK9.8. Alice->Relay (MSRP): MSRP xx SEND TR-ID: 123 Content-Type: "text/plain" Hi, I'm Alice!Campbell, et al. Expires November 20, 2003 [Page 35] 10.9. Relay->Bob (MSRP): MSRP xx SEND TR-ID: 123 Content-Type: "text/plain" Hi, I'm Alice!11.10. Bob->Relay (MSRP): MSRP xx 200 OK TR-ID: 12312.11. Relay->Alice (MSRP): MSRP xx 200 OK TR-ID: 12313.12. Bob->Relay (MSRP): MSRP xx SEND TR-ID: 456 Content-Type:"text/plain" Hi, Alice! I'm Bob!14.13. Relay->Alice (MSRP): MSRP xx SEND TR-ID: 456 Campbell, et al. Expires December 29, 2003 [Page 41] Internet-Draft SIMPLE IM Sessions June 2003 Content-Type: "text/plain" Hi, Alice! I'm Bob!15.14. Alice->relay (MSRP): MSRP xx 200 OK TR-ID: 45616.15. Relay->Bob (MSRP): MSRP xx 200 OK TR-ID: 456Campbell, et al. Expires November 20, 2003 [Page 36] Internet-Draft SIMPLE IM Sessions May 2003 17.16. Alice->Bob (SIP): BYE18.17. Alice->Relay (MSRP): MSRP xx BIND S-URL: msrp://relay.atlanta.com:7777/iau39 TR-ID: 42 Exp:019.18. Relay->Alice (MSRP):(relayRelay invalidates sessionstate)state. MSRP xx 200 OKTR-ID: 42 Exp:0 20. Bob invalidates local state for the session. 21. Bob->Alice (SIP):TR-ID: 42 Exp:0 19. Bob invalidates local state for the session. Bob->Alice (SIP): 200 OK 8.3 Two Relays In this scenario, both Alice and Bob are each required by local policy to route all sessions through a different local relay. Alice AtlantaRelay BiloxiRelay Bob | | | | | | | | Campbell, et al. Expires December 29, 2003 [Page 42] Internet-Draft SIMPLE IM Sessions June 2003 |(1) (MSRP) BIND | | |------------->| | | |(2) (MSRP) 200 OK | | |<-------------| | | |(3) (SIP) INVITE | | |------------------------------------------->| | | |(4) (MSRP) VISIT | | |<-------------| | |(5) (MSRP) VISIT | | |<-------------| | | |(6) (MSRP) 200 OK | | |------------->| | | | |(7) (MSRP) 200 OK | | |------------->| |(8) (SIP) 200 OK | | |<-------------------------------------------| |(9) (SIP) ACK | | | |------------------------------------------->| |(10) (MSRP) SEND | | |------------->| | | | |(11) (MSRP) SEND | | |------------->| | | | |(12) (MSRP) SEND | | |------------->| | | |(13) (MSRP) 200 OK | | |<-------------| | |(14) (MSRP) 200 OK | | |<-------------| | |(15) (MSRP) SEND | | |<-------------| | | |(16) (SIP) BYE| | | |------------------------------------------->| |(17) (MSRP) BIND | | |------------->| | | |(18) (MSRP) 200 OK | | |<-------------| | | |(19) (SIP) 200 OK7.3 Two Relays In this scenario, both Alice and Bob are each required by local policy to route all sessions through a different local relay.| | |<-------------------------------------------| | | | | | | | | 1. Alice->AtlantaRelay (MSRP): Alice opens a connection totheher relay, and sends the following: MSRP xx BIND S-URL: msrp://relay.atlanta.com TR-ID: 321 Campbell, et al. Expires December 29, 2003 [Page 43] Internet-Draft SIMPLE IM Sessions June 2003 Exp:600 2. AtlantaRelay->Alice (MSRP): MSRP xx 200 OK TR-ID: 321 S-URL: msrp://relay.atlanta.com:7777/iau39 Exp:600 3. Alice->Bob (SIP): INVITE sip:bob@biloxi.com c=IN IP4 blahblahblah m=message77779999 msrp/tcp text/plainCampbell, et al. Expires November 20, 2003 [Page 37] Internet-Draft SIMPLE IM Sessions May 2003a=session:msrp://relay.atlanta.com:7777/iau39 a=direction:passive 4. Bob determines that, due to local policy, he must connect through his ownproxy. 5.relay. Bob->BiloxiRelay (MSRP): Bob opens a connection to his relay, and sends the following: MSRP xx VISIT S-URL: msrp://relay.atlanta.com:7777/iau39 TR-ID: 934Exp:600 6.5. BiloxiRelay->AtlantaRelay (MSRP): BiloxiRelay resolves the URL, opens a connection to relay.atlanta.com:7777, and sends the following: MSRP xx VISIT S-URL: msrp://relay.atlanta.com:7777/iau39 TR-ID: 934Exp:600 7.6. AtlantaRelay->BiloxiRelay(MSRP): MSRP xx 200 OK TR-ID: 934Exp:600 8.7. BiloxiRelay->Bob(MSRP): MSRP xx 200 OK Campbell, et al. Expires December 29, 2003 [Page 44] Internet-Draft SIMPLE IM Sessions June 2003 TR-ID: 934Exp:600 9.8. Bob->Alice (SIP): 200 OK c=IN IP4 stuff m=message77779999 msrp/tcp text/plain a=direction: active10.9. Alice->Bob (SIP): ACKCampbell, et al. Expires November 20, 2003 [Page 38] 11.10. Alice->AtlantaRelay (MSRP): MSRP xx SEND TR-ID: 123 Content-Type: "text/plain" Hi, I'm Alice!12.11. AtlantaRelay ->BiloxiRelay (MSRP): MSRP xx SEND TR-ID: 123 Content-Type: "text/plain" Hi, I'm Alice!13.12. BiloxiRelay->Bob (MSRP): MSRP xx SEND TR-ID: 123 Content-Type: "text/plain" Hi, I'm Alice!14.13. Bob->BiloxiRelay (MSRP): MSRP xx 200 OK TR-ID: 12315.14. BiloxiRelay->AtlantaRelay (MSRP): MSRP xx 200 OK TR-ID: 12316.Campbell, et al. Expires December 29, 2003 [Page 45] Internet-Draft SIMPLE IM Sessions June 2003 15. AtlantaRelay->Alice (MSRP): MSRP xx 200 OK TR-ID: 12317.16. Alice->Bob (SIP): BYE18.17. Alice->AtlantaRelay (MSRP): MSRP xx BIND S-URL: msrp://relay.atlanta.com:7777/iau39 TR-ID: 42 Exp:0 18. Relay->Alice (MSRP): Relay invalidates session state. MSRP xx 200 OK TR-ID: 42 Exp:0 19. Bob->Alice (SIP): 200 OK 9. IANA Considerations 9.1 MSRP Port MSRP uses TCP port XYX, to be determined by IANA after this document is approved for publication. Usage of this value is described in Section 7.1 9.2 MSRP URL Schemes This document defines the URL schemes of "msrp" and "msrps". 9.2.1 Syntax See Section 7.1. 9.2.2 Character Encoding See Section 7.1. Campbell, et al. Expires December 29, 2003 [Page 46] Internet-Draft SIMPLE IM Sessions June 2003 9.2.3 Intended Usage See Section 7.1. 9.2.4 Protocols The Message Session Relay Protocol (MSRP). 9.2.5 Security Considerations See Section 10. 9.2.6 Relevant Publications RFCXXXX [Note to RFC Editor: Please replace RFCXXXX in the above paragraph with the actual number assigned to this document. 9.3 SDP Parameters This document registers the following SDP parameters in the sdp-parameters registry: 9.3.1 Direction Attribute-name: direction Long-form Attribute Name Direction Type: Media level Subject to Charset Attribute No Purpose and Appropriate Values See Section 6.2. 9.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 Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page39]47] Internet-Draft SIMPLE IM SessionsMayJune 2003Exp:0 19. Relay->Alice (MSRP): (relay invalidates session state) MSRP xx 200 OK TR-ID: 42 Exp:0 20. Bob->Alice (SIP): 200 OK 8. IANAPurpose and Appropriate Values See Section 6.3. 10. Security ConsiderationsTo Do. Do we needThere are a number of security considerations for MSRP, some of which are mentioned elsewhere in this document. This section discusses those further, and introduces some new ones. 10.1 TLS and the MSRPS Scheme All MSRP devices must support TLS, with at least the TLS_RSA_WITH_AES_128_CBC_SHA [8] cipher suite. Other cipher suites MAY be supported. MSRP does not define a separate TCP port for TLS connections. This means that all MSRP server devices, that is, all devices that listen for TCP connections, MUST be prepared to handle both TLS and plain text connections on the same port. When a device accepts a TCP connection, it MUST watch for the TLS handshake messages to determine if a particular connection uses TLS. If the first data received is not part of a TLS handshake request, the device ceases to watch for the TLS handshake and begins normal MSRP processing. An MSRP device MAY refuse to accept a given request over a non-TLS connection by returning a 426 response, after which it MUST either immediately close the connection, or begin watching for a TLS handshake request as it would if it had just accepted a connection. MSRP devices acting in the role of TCP client MAY perform a TLS handshake either immediately upon connection, or immediately after receiving a 426 response. They MUST NOT attempt to upgrade to TLS at any other time. Allowing clients to upgrade at any time would require the server device toregister URL schemescheck every single request to determine if it is an MSRP request orSDP a-line attributes? 9. Security Considerations There areanumber of security considerationsTLS handshake request. The specified approach only requires this check on the initial data received on a connection, or on data received immediately after a 426 response. In both cases, the receiver will have to peek ahead in the received data stream to look forMSRP, somethe TLS, then read again from the start once the presence or absence ofwhich are mentioned elsewhere in this document. This section discusses those further, and introduces some new ones. 9.1 The MSRPS SchemeTLS has been determined. The MSRPS URI scheme indicates that all hops in an MSRP session MUST be protected with TLS. Ensuring this implies some additional rules.An MSRPA relay MUSTNOTreturn an MSRPS URLin the S-URL header field in a responseto a BIND requestunless the BIND request itself was received over a TLS protected session. A VISIT request for an MSRPS URL MUST be sent over a TLS protected connection. If a visiting relay receives a VISIT request for an MSRPS URL, the connection to the hosting device MUST also be protected. There has been controversy on whether an MSRPS scheme is really needed, since there is a small limit to the total number of hops in an MSRP session. However, a mechanism is required to inform the visitor to use TLS in the first place. We could have used an SDP a-line attribute for this. However, there also needs to be a mechanism for a hosting relay to tell the host endpoint to request the visitor use TLS. The MSRPS scheme seems to best fit all of these requirements. Open Issue: There is also some controversyif the request arrived overhowTLSshould be used with MSRP. The changesand included a MSRPS URI inthis draft version make it possiblethe S-URI header field. The relay MAY return an MSRPS URI to any BIND request that arrives Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page40]48] Internet-Draft SIMPLE IM SessionsMayJune 2003for relays to act as tunnels, where the TLS handshake is end-to-end. This is much the same way that TLS is handled by HTTPS proxies. However, this usage requires at least one endpointover TLS, but MUST NOT return an MSRP URI tohaveaTLS server certificate, which mayBIND request that does notbe likely. Another approach is to make TLS usage hop-by-hop. When at least onearrive over TLS. If a relayis used, onlyreceives a BIND request with an MSRPS S-URI, over a non-TLS connection, it MUST reject therelays would need server certificates. Even if we support end-to-end TLS, werequest with a 426 response. A relay maystill needinsist on always using MSRPS by returning away426 tospecify hop-by-hop TLS, because since end-to-end TLS would delay the TLS handshake until _after_ the BINDany bind received over an unprotected connection, andVISIT requests, thesealways returning MSRPS URLs to BIND requestswould notover protected connections. A VISIT request for an MSRPS URL MUST beprotected. 9.2sent over a TLS protected connection. If a visiting relay receives a VISIT request for an MSRPS URL over an unprotected connection, it MUST reject the request with a 426 response. 10.2 Sensitivity of the Session URL The URL of a MSRP session is used by the visiting endpoint to identify itself to the hosting device, regardless of whether the session is directly hosted by the host endpoint, or is hosted by a relay. If an attacker were able to acquire session URL, either by guessing it or by eavesdropping, there is a window of opportunity in which the attacker could hijack the session by sending a VISIT request to the host device before the true visiting endpoint. Because of this sensitivity, the session URL SHOULD be constructed in a way to make it difficult to guess, and should be sufficiently random so that it is unlikely to be reused. All mechanisms used to transport the session URL to the visitor and back to the host SHOULD be protected from eavesdroppers and man-in-the-middle attacks. Therefore an MSRP device MUST support the use of TLS for at least the VISIT request, which by extension indicates the endpoint MUST support the use of TLS for all MSRP messages. Further, MSRP connections SHOULD actually be protected with TLS. Further, an MSRP endpoint MUST be capable of using the security features of the signaling protocol in order to protect the SDP exchange and SHOULD actually use them on all such exchanges. End-to-end protection schemes SHOULD be preferred over hop-by-hop schemes for protection of the SDP exchange.9.310.3 End to End Protection of IMs Instant messages can contain very sensitive information. As a result, as specified in RFC 2779 [3], instant messaging protocols need to provide for encryption, integrity and authentication of instant messages. Therefore MSRP endpoints MUST support the end-to-end encryption and integrity of bodies sent via SEND requests usingCMSSecure MIME (S/MIME) [7]. Note that while each protected body could use separate keying material, this is inefficient in that it requires an independent public key operation for each message. Endpoints wishing to invoke Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page41]49] Internet-Draft SIMPLE IM SessionsMayJune 2003 end-to-end protection of message sessions SHOULD exchange symmetric keys in SDP k-lines, and use secret key encryption on for each MSRP message. When symmetric keys are present in the SDP, the offer-answer exchange MUST be protected from eavesdropping and tampering using the appropriate facilities of the signaling protocol. For example, ifthe signaling protocol is SIP, the SDP exchange MUST be protected using S/MIME. Open Issue: This subsection needs very close scrutiny for accuracy and security. In particular, do we need to say more aboutthe signaling protocol is SIP, the SDP exchange MUST be protected usingsecret key operations in CMS? 9.4S/MIME. 10.4 CPIM compatibility MSRP sessions may be gatewayed to other CPIM[16]compatible[17]compatible protocols. If this occurs, the gateway MUST maintain session state, and MUST translate between the MSRP session semantics and CPIM semantics that do not include a concept of sessions. Furthermore, when one endpoint of the session is a CPIM gateway, instant messages SHOULD be wrapped in "message/cpim" [5] bodies. Such a gateway MUST include "message/cpim" as the first entry in its SDP format list. MSRP endpoints sending instant messages to apeerpeer that has included 'message/cpim" as the first entry in the format list SHOULD encapsulate all instant message bodies in "message/cpim" wrappers. All MSRP endpoints SHOULD support the S/MIME features of that format. 10.5 PKI Considerations Several aspects of MSRP will benefit from being used in the context of a public key infrastructure. For example, the MSRPS scheme allows, and even encourages, TLS connections between endpoint devices. And while MSRP allows for a symmetric session key to protect all messages in a session, it is most likely that session key itself would be exchanged in a signaling protocol such as SIP. Since that key is extremely sensitive, its exchange would also need to be protected. In SIP, the preferred mechanism for this would be S/MIME, which would also benefit from a PKI. However, all of these features may be used without PKI. Each endpoint could instead use self signed certificates. This will, of course, be less convenient than with a PKI, in that there would be no certificate authority to act as a trusted introducer. Peers would be required to exchange certificates prior to securely communicating. Since, at least for the immediate future, any given MSRP implementation is likely to communicate with at least some peers that do not have a PKI available, MSRP implementations SHOULD support the use of self-signed certificates, and SHOULD support the ability to configure lists of trusted certificates. 11. Changes from Previous Draft Versions Campbell, et al. Expires December 29, 2003 [Page 50] Internet-Draft SIMPLE IM Sessions June 2003 This section to be deleted prior to publication as an RFC 11.1 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 hasincluded 'message/cpim"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 thefirst entry inhash for digest authentication. CMS usage replaced with S/MIME. TLS and MSRPS usage clarified. Session state timeout is now based on SEND activity, rather than BIND and VISIT refreshes. Default port added. Added sequence diagrams to theformat list SHOULD encapsulate all instantexample messagebodies in "message/cpim" wrappers. All MSRP endpoints SHOULD support the S/MIME featuresflows. Added discussion ofthat format. 10. Changes introducedself-signed certificates in the security considerations section. 11.2 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. Campbell, et al. Expires December 29, 2003 [Page 51] Internet-Draft SIMPLE IM Sessions June 2003 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. Determination of host and visitor roles now uses a direction attribute much like the one used in COMEDIA.Campbell, et al. Expires November 20, 2003 [Page 42] Internet-Draft SIMPLE IM Sessions May 2003Format 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.11. Changes introduced in11.3 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 bidirectionally 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. 12. Contributors The following people contributed substantially to this ongoing effort: Rohan Mahy Allison Mankin Jon Peterson Brian Rosen Dean Willis Adam Roach Cullen Jennings Campbell, et al. Expires December 29, 2003 [Page 52] Internet-Draft SIMPLE IM Sessions June 2003 Normative References [1] Handley, M. and V. Jacobson, "SDP: Session Description Protocol", RFC 2327, April 1998. [2] 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. and J. Vincent, "Instant Messaging /Campbell, et al. Expires November 20, 2003 [Page 43] Internet-Draft SIMPLE IM Sessions May 2003Presence Protocol Requirements", RFC 2779, February 2000. [4] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifiers (URL): Generic Syntax", RFC 2396, August 1998. [5] Atkins, D. and G. Klyne, "Common Presence and Instant Messaging 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]Housley, R., "CryptographicRamsdell, B., "S/MIME Version 3 MessageSyntax (CMS)",Specification", RFC3369, August 2002.2633, June 1999. [8]Rivest, R., "The MD5 Message-Digest Algorithm",Chown, P., ""Advanced Encryption Standard (AES) Ciphersuites for Transport Layer Security (TLS)", RFC1321, April 1992.3268, June 2002. [9] Eastlake, 3rd, D. and P. Jones, "US Secure Hash Algorithm 1 (SHA1)", RFC 3174, September 2001. Informational References[9][10] Campbell, B. and J. Rosenberg, "Session Initiation Protocol Extension for Instant Messaging", RFC 3428, September 2002.[10][11] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", RFC 1889, January 1996.[11][12] Mahy, R., Campbell, B., Sparks, R., Rosenberg, J., Petrie, D. and A. Johnston, "A Multi-party Application Framework for SIP", draft-ietf-sipping-cc-framework-02 (work in progress), May 2003.[12][13] Rosenberg, J., Peterson, J., Schulzrinne, H. and G. Camarillo, "Best Current Practices for Third Party Call Control in the Campbell, et al. Expires December 29, 2003 [Page 53] Internet-Draft SIMPLE IM Sessions June 2003 Session Initiation Protocol", draft-ietf-sipping-3pcc-03 (work in progress), March 2003.[13][14] Sparks, R. and A. Johnston, "Session Initiation Protocol Call Control - Transfer", draft-ietf-sipping-cc-transfer-01 (work in progress), February 2003.[14][15] Camarillo, G., Marshall, W. and J. Rosenberg, "Integration of Resource Management and Session Initiation Protocol (SIP)", RFC 3312, October 2002.[15][16] Peterson, J., "A Privacy Mechanism for the Session Initiation Protocol (SIP)", RFC 3323 , November 2002.Campbell, et al. Expires November 20, 2003 [Page 44] Internet-Draft SIMPLE IM Sessions May 2003 [16][17] Peterson, J., "A Common Profile for Instant Messaging (CPIM)", draft-ietf-impp-im-03 (work in progress), May 2003.[17][18] Yon, D., "Connection-Oriented Media Transport in SDP", draft-ietf-mmusic-sdp-comedia-05 (work in progress), March 2003.[18][19] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A. and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. Authors' Addresses Ben Campbell dynamicsoft 5100 Tennyson Parkway Suite 1200 Plano, TX 75024 EMail: bcampbell@dynamicsoft.com Jonathan Rosenberg dynamicsoft 600 Lanidex Plaza Parsippany, NJ 07054 EMail: jdrosen@dynamicsoft.com Campbell, et al. Expires December 29, 2003 [Page 54] Internet-Draft SIMPLE IM Sessions June 2003 Robert Sparks dynamicsoft 5100 Tennyson Parkway Suite 1200 Plano, TX 75024 EMail: rsparks@dynamicsoft.com Paul Kyzivat Cisco Systems Mail Stop LWL3/12/2 900 Chelmsford St. Lowell, MA 01851 EMail: pkyzivat@cisco.com Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page45]55] Internet-Draft SIMPLE IM SessionsMayJune 2003 Intellectual Property Statement The IETF takes no position regarding the validity or scope of any intellectual property 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; neither does it represent that it has made any effort to identify any such rights. Information on the IETF's procedures with respect to rights in standards-track and standards-related documentation can be found in BCP-11. Copies of claims of rights made available for publication 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 by implementors or users of this specification can be obtained from the IETF Secretariat. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please address the information to the IETF Executive Director. Full Copyright Statement Copyright (C) The Internet Society (2003). 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 purpose of developing 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. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page46]56] Internet-Draft SIMPLE IM SessionsMayJune 2003 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society. Campbell, et al. ExpiresNovember 20,December 29, 2003 [Page47]57] ----