| < draft-ietf-simple-im-00.txt | draft-ietf-simple-im-01.txt > | |||
|---|---|---|---|---|
| Internet Engineering Task Force J. Rosenberg | Internet Engineering Task Force J. Rosenberg | |||
| Internet-Draft D. Willis | Internet-Draft D. Willis | |||
| Expires: October 11, 2001 R. Sparks | Expires: January 16, 2002 R. Sparks | |||
| B. Campbell | B. Campbell | |||
| dynamicsoft | dynamicsoft | |||
| H. Schulzrinne | H. Schulzrinne | |||
| J. Lennox | J. Lennox | |||
| Columbia University | Columbia University | |||
| C. Huitema | C. Huitema | |||
| B. Aboba | B. Aboba | |||
| D. Gurle | D. Gurle | |||
| Microsoft Corporation | Microsoft Corporation | |||
| D. Oran | D. Oran | |||
| Cisco Systems | Cisco Systems | |||
| April 12, 2001 | July 18, 2001 | |||
| SIP Extensions for Instant Messaging | SIP Extensions for Instant Messaging | |||
| draft-ietf-simple-im-00 | draft-ietf-simple-im-01 | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
| all provisions of Section 10 of RFC2026. | all provisions of Section 10 of RFC2026. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as | other groups may also distribute working documents as | |||
| Internet-Drafts. | Internet-Drafts. | |||
| skipping to change at page 1, line 43 ¶ | skipping to change at page 1, line 43 ¶ | |||
| months and may be updated, replaced, or obsoleted by other documents | months and may be updated, replaced, or obsoleted by other documents | |||
| at any time. It is inappropriate to use Internet-Drafts as reference | at any time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on October 11, 2001. | This Internet-Draft will expire on January 16, 2002. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2001). All Rights Reserved. | Copyright (C) The Internet Society (2001). All Rights Reserved. | |||
| Abstract | Abstract | |||
| This document defines a SIP extension (a single new method) that | This document defines a SIP extension (a single new method) that | |||
| supports Instant Messaging (IM). | supports Instant Messaging (IM). | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Changes Introduced in draft-ietf-simple-im-00 . . . . . . 4 | 2. Changes Introduced in draft-ietf-simple-im-01 . . . . . . . 3 | |||
| 3. Changes Introduced in draft-rosenberg-impp-im-01 . . . . . 5 | 3. Changes Introduced in draft-ietf-simple-im-00 . . . . . . . 4 | |||
| 4. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. Changes Introduced in draft-rosenberg-impp-im-01 . . . . . . 4 | |||
| 5. Overview of Operation . . . . . . . . . . . . . . . . . . 5 | 5. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 6. The MESSAGE request . . . . . . . . . . . . . . . . . . . 6 | 6. Overview of Operation . . . . . . . . . . . . . . . . . . . 4 | |||
| 6.1 Method Definition . . . . . . . . . . . . . . . . . . . . 6 | 7. The MESSAGE request . . . . . . . . . . . . . . . . . . . . 5 | |||
| 6.2 UAC processing of initial MESSAGE request . . . . . . . . 8 | 7.1 Method Definition . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 6.3 Finding the next hop . . . . . . . . . . . . . . . . . . . 9 | 7.2 UAC processing of MESSAGE request . . . . . . . . . . . . . 7 | |||
| 6.4 Proxy processing of MESSAGE requests . . . . . . . . . . . 9 | 7.3 Finding the next hop . . . . . . . . . . . . . . . . . . . . 8 | |||
| 6.5 UAS processing of MESSAGE requests . . . . . . . . . . . . 10 | 7.4 Proxy processing of MESSAGE requests . . . . . . . . . . . . 8 | |||
| 6.6 UAS processing of initial MESSAGE response . . . . . . . . 10 | 7.5 UAS processing of MESSAGE requests . . . . . . . . . . . . . 9 | |||
| 6.7 Subsequent MESSAGE requests . . . . . . . . . . . . . . . 11 | 7.6 UAS processing of MESSAGE response . . . . . . . . . . . . . 9 | |||
| 6.8 Supporting multiple message destinations . . . . . . . . . 11 | 8. Caller Preferences . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.9 Caller Preferences . . . . . . . . . . . . . . . . . . . . 12 | 9. Mapping to CPIM . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.10 Security . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 9.1 Mapping SIP Requests to CPIM . . . . . . . . . . . . . . . . 10 | |||
| 6.10.1 Privacy . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 9.2 Mapping CPIM Responses to SIP . . . . . . . . . . . . . . . 11 | |||
| 6.10.2 Message Integrity and Authenticity . . . . . . . . . . . . 13 | 9.3 Mapping CPIM operations to SIP . . . . . . . . . . . . . . . 11 | |||
| 6.10.3 Outbound authentication . . . . . . . . . . . . . . . . . 13 | 9.4 Mapping SIP responses to CPIM . . . . . . . . . . . . . . . 11 | |||
| 6.10.4 Replay Prevention . . . . . . . . . . . . . . . . . . . . 14 | 9.5 URL Scheme Mapping . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 7. Congestion Control . . . . . . . . . . . . . . . . . . . . 14 | 10. Security . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 8. Example Messages . . . . . . . . . . . . . . . . . . . . . 14 | 10.1 Privacy . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 9. Open Issues . . . . . . . . . . . . . . . . . . . . . . . 17 | 10.2 Outbound authentication . . . . . . . . . . . . . . . . . . 12 | |||
| 9.1 Must a MESSAGE actually include a message? . . . . . . . . 17 | 10.3 Replay Prevention . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 9.2 Should support for message/cpim be mandatory in all UAs? . 18 | 11. Congestion Control . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 9.3 message/cpim and the Accept header . . . . . . . . . . . . 18 | 12. Example Messages . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 9.4 Message Sessions . . . . . . . . . . . . . . . . . . . . . 18 | 13. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 9.5 What would a body in a 200 OK to a MESSAGE mean? . . . . . 18 | 13.1 Must a MESSAGE actually include a message? . . . . . . . . . 14 | |||
| 9.6 The im: URL and RFC2543 proxies and registrars . . . . . . 19 | 13.2 The im: URL and RFC2543 proxies and registrars . . . . . . . 15 | |||
| 9.7 Providing im: URL in Contact headers . . . . . . . . . . . 19 | 13.3 Providing im: URL in Contact headers . . . . . . . . . . . . 15 | |||
| 9.8 Congestion control . . . . . . . . . . . . . . . . . . . . 19 | 13.4 Congestion control . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 9.9 Mapping to CPIM . . . . . . . . . . . . . . . . . . . . . 19 | 13.5 Mapping to CPIM . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . 19 | 14. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| References . . . . . . . . . . . . . . . . . . . . . . . . 20 | References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . 21 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 17 | |||
| A. Requirements Evaluation . . . . . . . . . . . . . . . . . 23 | A. Requirements Evaluation . . . . . . . . . . . . . . . . . . 19 | |||
| Full Copyright Statement . . . . . . . . . . . . . . . . . 27 | Full Copyright Statement . . . . . . . . . . . . . . . . . . 23 | |||
| 1. Introduction | 1. Introduction | |||
| This document defines an extension to SIP (RFC2543 [2]) to support | This document defines an extension to SIP (RFC2543 [2]) to support | |||
| Instant Messaging. | Instant Messaging. | |||
| Instant messaging is defined as the exchange of content between a | Instant messaging is defined as the exchange of content between a | |||
| set of participants in real time. Generally, the content is short | set of participants in real time. Generally, the content is short | |||
| textual messages, although that need not be the case. Generally, the | textual messages, although that need not be the case. Generally, the | |||
| messages that are exchanged are not stored, but this also need not | messages that are exchanged are not stored, but this also need not | |||
| skipping to change at page 3, line 49 ¶ | skipping to change at page 3, line 49 ¶ | |||
| implemented into a single client application. | implemented into a single client application. | |||
| Along a similar vein, the mechanisms needed in an IM protocol are | Along a similar vein, the mechanisms needed in an IM protocol are | |||
| very similar to those needed to establish an interactive session - | very similar to those needed to establish an interactive session - | |||
| rapid delivery of small content to a user at their current location, | rapid delivery of small content to a user at their current location, | |||
| which may, in general, be dynamically changing as the user moves. | which may, in general, be dynamically changing as the user moves. | |||
| The similarity of needed function implies that existing solutions | The similarity of needed function implies that existing solutions | |||
| for initiation of sessions (namely, the Session Initiation Protocol | for initiation of sessions (namely, the Session Initiation Protocol | |||
| (SIP) [2]) is an ideal base on which to build an IM protocol. | (SIP) [2]) is an ideal base on which to build an IM protocol. | |||
| 2. Changes Introduced in draft-ietf-simple-im-00 | 2. Changes Introduced in draft-ietf-simple-im-01 | |||
| This version removes the idea of implicit sessions created by | ||||
| MESSAGE requests. MESSAGE requests are now completely stateless in | ||||
| themselves. | ||||
| The version also some open issues: Bodies are not allowed in | ||||
| responses; an Accept header on a 415 response includes body types | ||||
| nested inside message/cpim bodies, all IM UAs MUST be able to | ||||
| receive message/cpim. | ||||
| This draft introduces a new section for CPIM mapping. The authors | ||||
| expect this section will need further work to complete. | ||||
| 3. Changes Introduced in draft-ietf-simple-im-00 | ||||
| The draft name changed to reflect its status as a SIMPLE working | The draft name changed to reflect its status as a SIMPLE working | |||
| group item. This version introduces no other changes. | group item. This version introduces no other changes. | |||
| 3. Changes Introduced in draft-rosenberg-impp-im-01 | 4. Changes Introduced in draft-rosenberg-impp-im-01 | |||
| This submission serves to track transition of the work on a SIP | This submission serves to track transition of the work on a SIP | |||
| implementation of IM to the newly formed SIMPLE working group. It | implementation of IM to the newly formed SIMPLE working group. It | |||
| endeavors to capture the progress made in IMPP since the original | endeavors to capture the progress made in IMPP since the original | |||
| submission (in particular, including the im: URL and the | submission (in particular, including the im: URL and the | |||
| message/cpim body) and detail a set of open issues for the SIMPLE | message/cpim body) and detail a set of open issues for the SIMPLE | |||
| working group to address. | working group to address. | |||
| To support those goals, a great deal of the background and | To support those goals, a great deal of the background and | |||
| motivation material in the original text has been shortened or | motivation material in the original text has been shortened or | |||
| removed. | removed. | |||
| 4. Terminology | 5. Terminology | |||
| Most of the terminology used here is defined in RFC2778 [4]. | Most of the terminology used here is defined in RFC2778 [4]. | |||
| However, we duplicate some of the terminology from SIP in order to | However, we duplicate some of the terminology from SIP in order to | |||
| clarify this document: | clarify this document: | |||
| User Agent (UA): A UA is a piece of software which is capable of | User Agent (UA): A UA is a piece of software which is capable of | |||
| initiating requests, and of responding to requests. | initiating requests, and of responding to requests. | |||
| User Agent Server (UAS): A UAS is the component of a UA which | User Agent Server (UAS): A UAS is the component of a UA which | |||
| receives requests, and responds to them. | receives requests, and responds to them. | |||
| User Agent Client (UAC): A UAC is the component of a UA which sends | User Agent Client (UAC): A UAC is the component of a UA which sends | |||
| requests, and receives responses. | requests, and receives responses. | |||
| Registrar: A registrar is a SIP server which can receive and | Registrar: A registrar is a SIP server which can receive and | |||
| process REGISTER requests. These requests are used to construct | process REGISTER requests. These requests are used to construct | |||
| address bindings. | address bindings. | |||
| 5. Overview of Operation | 6. Overview of Operation | |||
| When one user wishes to send an instant message to another, the | When one user wishes to send an instant message to another, the | |||
| sender formulates and issues a SIP request using the new MESSAGE | sender formulates and issues a SIP request using the new MESSAGE | |||
| method defined by this document. The request URI of this request | method defined by this document. The request URI of this request | |||
| will normally be the im: URL of the party to whom the message is | will normally be the im: URL of the party to whom the message is | |||
| directed (see CPIM [15]), but can also be a normal SIP URL. The body | directed (see CPIM [15]), but can also be a normal SIP URL. The body | |||
| of the request will contain the message to be delivered. This body | of the request will contain the message to be delivered. This body | |||
| can be of any MIME type, including "message/cpim" [16]. | can be of any MIME type, including "message/cpim" [16]. | |||
| The request may traverse a set of SIP proxies using a variety of | The request may traverse a set of SIP proxies using a variety of | |||
| transport mechanism (UDP, TCP, even SCTP [5]) before reaching its | transport mechanism (UDP, TCP, even SCTP [5]) before reaching its | |||
| destination. The destination for each hop is located using the | destination. The destination for each hop is located using the | |||
| address resolution rules detailed in the CPIM and SIP specifications | address resolution rules detailed in the CPIM and SIP specifications | |||
| (see Section 6 for more detail). During traversal, each proxy may | (see Section 7 for more detail). During traversal, each proxy may | |||
| rewrite the request URI based on available routing information. | rewrite the request URI based on available routing information. | |||
| Provisional and final responses to the request will be returned to | Provisional and final responses to the request will be returned to | |||
| the sender as with any other SIP request. Normally, a 200 OK | the sender as with any other SIP request. Normally, a 200 OK | |||
| response will be generated by the user agent of the request's final | response will be generated by the user agent of the request's final | |||
| recipient. Note that this indicates that the user agent accepted the | recipient. Note that this indicates that the user agent accepted the | |||
| message, not that the user has seen it. | message, not that the user has seen it. | |||
| Groups of messages in a common thread may be associated by keeping | MESSAGE requests do not create any implied session. They do not in | |||
| them in the same session as identified by the combination of the To, | themselves establish a call leg, or any concept of call state. SIP | |||
| From and Call-ID headers. Other potential means of grouping messages | proxies may not record-route MESSAGE requests. | |||
| are discussed below. | ||||
| It is possible that a proxy may fork a MESSAGE request based on its | ||||
| available routing mechanism. This draft proposes a mechanism that | ||||
| takes advangage of this, delivering messages in a session to | ||||
| multiple endpoints until one sends a message back. After that, all | ||||
| remaining messages in the session are delivered to the responding | ||||
| agent. | ||||
| 6. The MESSAGE request | 7. The MESSAGE request | |||
| This section defines the syntax and semantics of this extension. | This section defines the syntax and semantics of this extension. | |||
| 6.1 Method Definition | 7.1 Method Definition | |||
| This specification defines a new SIP method, MESSAGE. The BNF for | This specification defines a new SIP method, MESSAGE. The BNF for | |||
| this method is: | this method is: | |||
| Message = "MESSAGE" | Message = "MESSAGE" | |||
| As with all other methods, the MESSAGE method name is case | As with all other methods, the MESSAGE method name is case | |||
| sensitive. | sensitive. | |||
| Tables 1 and 2 extend Tables 4 and 5 of SIP by adding an additional | Tables 1 and 2 extend Tables 4 and 5 of SIP by adding an additional | |||
| column, defining the headers that can be used in MESSAGE requests | column, defining the headers that can be used in MESSAGE requests | |||
| and responses. | and responses. | |||
| where enc. e-e MESSAGE | where enc. e-e MESSAGE | |||
| __________________________________________ | __________________________________________ | |||
| Accept R e o | Accept R e - | |||
| Accept 415 e o | Accept 415 e o | |||
| Accept-Encoding R e o | Accept-Encoding R e o | |||
| Accept-Encoding 415 e o | Accept-Encoding 415 e o | |||
| Accept-Language R e o | Accept-Language R e o | |||
| Accept-Language 415 e o | Accept-Language 415 e o | |||
| Allow 200 e o | Allow 200 e o | |||
| Allow 405 e m | Allow 405 e m | |||
| Authorization R e o | Authorization R e o | |||
| Authorization r e o | Authorization r e o | |||
| Call-ID gc n e m | Call-ID gc n e m | |||
| Contact R e m | Contact R e - | |||
| Contact 2xx e o | Contact 2xx e - | |||
| Contact 3xx e o | Contact 3xx e o | |||
| Contact 485 e o | Contact 485 e o | |||
| Content-Encoding e e o | Content-Encoding e e o | |||
| Content-Length e e m | Content-Length e e m | |||
| Content-Type e e * | Content-Type e e * | |||
| CSeq gc n e m | CSeq gc n e m | |||
| Date g e o | Date g e o | |||
| Encryption g n e o | Encryption g n e o | |||
| Expires g e o | Expires g e o | |||
| From gc n e m | From gc n e m | |||
| skipping to change at page 7, line 10 ¶ | skipping to change at page 7, line 10 ¶ | |||
| Max-Forwards R n e o | Max-Forwards R n e o | |||
| Organization g c h o | Organization g c h o | |||
| Table 1: Summary of header fields, A--O | Table 1: Summary of header fields, A--O | |||
| where enc. e-e MESSAGE | where enc. e-e MESSAGE | |||
| ________________________________________________________ | ________________________________________________________ | |||
| Priority R c e o | Priority R c e o | |||
| Proxy-Authenticate 407 n h o | Proxy-Authenticate 407 n h o | |||
| Proxy-Authorization R n h o | Proxy-Authorization R n h o | |||
| Proxy-Require R n h o | Proxy-Require R n h o | |||
| Record-Route R h o | Record-Route R h - | |||
| Record-Route 2xx,401,484 h o | Record-Route 2xx,401,484 h - | |||
| Require R e o | Require R e o | |||
| Retry-After R c e - | Retry-After R c e - | |||
| Retry-After 404,413,480,486 c e o | Retry-After 404,413,480,486 c e o | |||
| 500,503 c e o | 500,503 c e o | |||
| 600,603 c e o | 600,603 c e o | |||
| Response-Key R c e o | Response-Key R c e o | |||
| Route R h o | Route R h o | |||
| Server r c e o | Server r c e o | |||
| Subject R c e o | Subject R c e o | |||
| Timestamp g e o | Timestamp g e o | |||
| skipping to change at page 7, line 35 ¶ | skipping to change at page 7, line 35 ¶ | |||
| Via gc(2) n e m | Via gc(2) n e m | |||
| Warning r e o | Warning r e o | |||
| WWW-Authenticate R c e o | WWW-Authenticate R c e o | |||
| WWW-Authenticate 401 c e o | WWW-Authenticate 401 c e o | |||
| (1): copied with possible addition of tag | (1): copied with possible addition of tag | |||
| (2): UAS removes first Via header field | (2): UAS removes first Via header field | |||
| Table 2: Summary of header fields, P--Z | Table 2: Summary of header fields, P--Z | |||
| A MESSAGE request MAY (Open Issue Section 9.1) contain a body, using | A MESSAGE request MAY (Open Issue Section 13.1) contain a body, | |||
| the standard MIME headers to identify the content. | using the standard MIME headers to identify the content. | |||
| Unless stated otherwise in this document, the protocol for emitting | Unless stated otherwise in this document, the protocol for emitting | |||
| and responding to a MESSAGE request is identical to that for a BYE | and responding to a MESSAGE request is identical to that for a BYE | |||
| request as defined in [2]. The behavior of SIP entities not | request as defined in [2]. The behavior of SIP entities not | |||
| implementing the MESSAGE (or any other unknown) method is explicitly | implementing the MESSAGE (or any other unknown) method is explicitly | |||
| defined in [2]. | defined in [2]. | |||
| 6.2 UAC processing of initial MESSAGE request | 7.2 UAC processing of MESSAGE request | |||
| A MESSAGE request MUST contain a To, From, Call-ID, CSeq, Via, | A MESSAGE request MUST contain a To, From, Call-ID, CSeq, Via, and | |||
| Content-Length, and Contact header, formatted as specified in [2]. | Content-Length, formatted as specified in [2]. | |||
| All UAs MUST be prepared to send and receive MESSAGE requests with a | All UAs MUST be prepared to send and receive MESSAGE requests with a | |||
| body of type text/plain. All UAs wishing to provide the end to end | body of type text/plain. They MUST be prepared to receive | |||
| security mechanisms defined in CPIM MUST be prepared to send and | message/cpim body types, and MAY choose to send message/cpim body | |||
| receive MESSAGE requests with a body type of message/cpim. All UAs | types. | |||
| implementing MESSAGE SHOULD provide the end to end security | ||||
| mechanisms defined in CPIM (Open Issue Section 9.2). | ||||
| MESSAGE requests MAY contain an Accept header listing the allowable | ||||
| MIME types which may be sent in the response, or in subsequent | ||||
| requests in the reverse direction. The absence of the Accept header | ||||
| implies that the only allowed MIME type is text/plain. This | ||||
| simplifies operation in small devices, such as wireless appliances, | ||||
| which will generally only have support for text, but still allows | ||||
| any other MIME type to be used if both sides support it. (Open Issue | ||||
| Section 9.3) | ||||
| A UAC MAY send a MESSAGE request within an existing SIP call, | A UAC MAY send a MESSAGE request within an existing SIP call, | |||
| established with an INVITE. In this case, the MESSAGE request is | established with an INVITE. In this case, the MESSAGE request is | |||
| processed identically to the INFO method [9]. The only difference is | processed identically to the INFO method [9]. The only difference is | |||
| that a MESSAGE request is assumed to be for the purpose of instant | that a MESSAGE request is assumed to be for the purpose of instant | |||
| messaging as part of the call, whereas INFO is less specific. | messaging as part of the call, whereas INFO is less specific. | |||
| A UAC MAY associate sequential MESSAGEs in a common thread by | MESSAGE requests do not imply any sort of association or session on | |||
| constructing them with common To, From, and Call-ID headers and | their own. User Agents MUST not insert contact headers into MESSAGE | |||
| increasing CSeq values. (Open Issue Section 9.4) | requests. | |||
| 6.3 Finding the next hop | A UA SHOULD NOT attempt to associate REQUEST messages with each | |||
| other in any way, unless those messages are part of a call leg | ||||
| established through other means. | ||||
| 7.3 Finding the next hop | ||||
| The mechanism used to determine the next hop destination for a SIP | The mechanism used to determine the next hop destination for a SIP | |||
| MESSAGE request is detailed in [15] and [2]. Briefly, for the URL | MESSAGE request is detailed in [15] and [2]. Briefly, for the URL | |||
| im:user@host, | im:user@host, | |||
| 1. The UA makes a DNS SRV [12] query for _im._sip.host. If any RRs | 1. The UA makes a DNS SRV [12] query for _im._sip.host. If any RRs | |||
| are returned, they determine the next hop. Otherwise: | are returned, they determine the next hop. Otherwise: | |||
| 2. The UA makes a DNS SRV query for _sip.host. If any RRs are | 2. The UA makes a DNS SRV query for _sip.host. If any RRs are | |||
| returned, they determine the next hop. Otherwise: | returned, they determine the next hop. Otherwise: | |||
| 3. The UA makes a DNS A query for host. If any records are | 3. The UA makes a DNS A query for host. If any records are | |||
| returned, they determine the address of the next hop. The | returned, they determine the address of the next hop. The | |||
| desination port is determined from the input URL (if the input | destination port is determined from the input URL (if the input | |||
| was an im: URL, the request is sent to the default SIP port of | was an im: URL, the request is sent to the default SIP port of | |||
| 5060). | 5060). | |||
| For sip: URLs, the UA starts at step 2. | For sip: URLs, the UA starts at step 2. | |||
| 6.4 Proxy processing of MESSAGE requests | 7.4 Proxy processing of MESSAGE requests | |||
| Proxies route requests with method MESSAGE the same as they would | Proxies route requests with method MESSAGE the same as they would | |||
| any other SIP request (proxy routing in SIP does not depend on the | any other SIP request (proxy routing in SIP does not depend on the | |||
| method). Note that the MESSAGE request MAY fork; this allows for | method). Note that the MESSAGE request MAY fork; this allows for | |||
| delivery of the message to several possible terminals where the user | delivery of the message to several possible terminals where the user | |||
| might be. | might be. | |||
| Proxies MUST NOT create call state based on MESSAGE requests alone. | ||||
| Proxies MUST NOT insert record-route headers. If a route header is | ||||
| present in the request, a proxy MUST honor it. | ||||
| If a MESSAGE request hits a proxy that uses registrations to route | If a MESSAGE request hits a proxy that uses registrations to route | |||
| requests, but no registration exists for the target user in the | requests, but no registration exists for the target user in the | |||
| request-URI, the request is rejected with a 404 (Not Found). | request-URI, the request is rejected with a 404 (Not Found). | |||
| Proxies MAY have access rules which prohibit the transmission of | Proxies MAY have access rules which prohibit the transmission of | |||
| instant messages based on certain criteria. Typically, this criteria | instant messages based on certain criteria. Typically, this criteria | |||
| will be based on the identity of the sender of the instant messages. | will be based on the identity of the sender of the instant messages. | |||
| Establishment of this criteria in the proxy is outside the scope of | Establishment of this criteria in the proxy is outside the scope of | |||
| this extension. We anticipate that such access controls will often | this extension. We anticipate that such access controls will often | |||
| be controlled through web pages accessible by users, mitigating the | be controlled through web pages accessible by users, mitigating the | |||
| need for standardization of a protocol for defining access rules. | need for standardization of a protocol for defining access rules. | |||
| 6.5 UAS processing of MESSAGE requests | 7.5 UAS processing of MESSAGE requests | |||
| As specified in RFC 2543, if a UAS receives a request with a body of | As specified in RFC 2543, if a UAS receives a request with a body of | |||
| type it does not understand, it MUST respond with a 415 (Unsupported | type it does not understand, it MUST respond with a 415 (Unsupported | |||
| Media Type) containing an Accept header listing those types which | Media Type) containing an Accept header listing those types which | |||
| are acceptable. (This brings up Open Issue Section 9.3 again) | are acceptable. This list SHOULD also include types acceptable | |||
| nested within a message/cpim body. | ||||
| Servers MAY reject requests (using a 413 response code) that are too | Servers MAY reject requests (using a 413 response code) that are too | |||
| long, where too long is a matter of local configuration. All servers | long, where too long is a matter of local configuration. All servers | |||
| MUST accept requests which are up to 1184 bytes in length. | MUST accept requests which are up to 1184 bytes in length. | |||
| 1184 = minimum IPv6 guaranteed length (1280 bytes) minus UDP (8 | 1184 = minimum IPv6 guaranteed length (1280 bytes) minus UDP (8 | |||
| bytes) minus IPSEC (48 bytes) minus layer one encapsulation (40 | bytes) minus IPSEC (48 bytes) minus layer one encapsulation (40 | |||
| bytes). | bytes). | |||
| A UAS receiving a MESSAGE request SHOULD respond with a final | A UAS receiving a MESSAGE request SHOULD respond with a final | |||
| response immediately. A 200 OK is sent if the request is acceptable. | response immediately. A 200 OK is sent if the request is acceptable. | |||
| Note, however, that the UAS is not obliged to display the message to | Note, however, that the UAS is not obliged to display the message to | |||
| the user either before or after responding with a 200 OK. A 200 | the user either before or after responding with a 200 OK. A 200 | |||
| class response to a MESSAGE request MAY contain a body, but this | class response to a MESSAGE request MUST NOT contain a body. | |||
| will often not be the case, since these responses are generated | ||||
| automatically. (Open Issue Section 9.5) | ||||
| Like any other SIP request, an IM MAY be redirected, or otherwise | Like any other SIP request, an IM MAY be redirected, or otherwise | |||
| responded to with any SIP response code. Note that a 200 OK response | responded to with any SIP response code. Note that a 200 OK response | |||
| to a MESSAGE request does not mean the user has read the message. | to a MESSAGE request does not mean the user has read the message. | |||
| A UAS which is, in fact, a message relay, storing the message and | A UAS which is, in fact, a message relay, storing the message and | |||
| forwarding it later on, or forwarding it into a non-SIP domain, | forwarding it later on, or forwarding it into a non-SIP domain, | |||
| SHOULD return a 202 (Accepted) response indicating that the message | SHOULD return a 202 (Accepted) response indicating that the message | |||
| was accepted, but end to end delivery has not been guaranteed. | was accepted, but end to end delivery has not been guaranteed. | |||
| 6.6 UAS processing of initial MESSAGE response | 7.6 UAS processing of MESSAGE response | |||
| A 200 OK response to an initial IM may contain Record-Route headers. | ||||
| If present, these MUST be used to construct a Route header for use | ||||
| in subsequent requests for the same call-leg (defined as the | ||||
| combination of remote address, local address, and Call-ID), using | ||||
| the process described in Section 6.29 of SIP [2] as if the request | ||||
| were INVITE. Note that per Section 6.8 the 200 OK response may not | ||||
| contain a Contact header. | ||||
| A 400 or 500 class response indicates that the message was not | A 400 or 500 class response indicates that the message was not | |||
| delivered successfully. A 600 response means it was delivered | delivered successfully. A 600 response means it was delivered | |||
| successfully, but refused. | successfully, but refused. | |||
| 6.7 Subsequent MESSAGE requests | A UAS MUST NOT insert a contact header into a 200 class response. | |||
| Any subsequent MESSAGEs in a session (see Section 9.4 follow the | ||||
| path established by the Route headers computed by the UA. The CSeq | ||||
| header MUST be larger than a CSeq header used in a previous request | ||||
| for the same call leg. Is is strongly RECOMMENDED that the CSeq | ||||
| number be computed as described in Section 6.17 of SIP, using a | ||||
| clock. This allows for the CSeq to increment without requiring the | ||||
| UA to store the previous CSeq values. | ||||
| 6.8 Supporting multiple message destinations | ||||
| A UAS MAY include a Contact in a 200 class response. Including a | ||||
| Contact header enables end to end messaging, which is good for | ||||
| efficiency. However, it rules out the possibility of effectively | ||||
| supporting more than one terminal which can handle IM | ||||
| simultaneously. | ||||
| This odd but seemingly innocuous requirement enables a very | ||||
| important feature. If a user is connected at several hosts, an | ||||
| initial IM will fork, and arrive at each. Each UAS responds with | ||||
| a 200 OK immediately, one of which is arbitrarily forwarded | ||||
| upstream towards the UAC. If another IM is sent for the same | ||||
| call-leg, we still wish for this IM to fork, since we still don't | ||||
| know where the user is currently residing. This information is | ||||
| known when the user sends an IM in the reverse direction. This IM | ||||
| will contain a Contact, and when it arrives at the originator of | ||||
| the initial MESSAGE, will update the Route so that now IMs are | ||||
| delivered only to that one host where the user is residing. | ||||
| A UAS constructs a set of Route headers from the Record-Route and | ||||
| Contact headers in the MESSAGE request, as per the procedure defined | ||||
| in [10]. | ||||
| MESSAGE requests for an established IM session MUST contain a Tag in | ||||
| the From field. Responses to an IM SHOULD contain a tag in the To | ||||
| field. This represents a slightly different operation than for | ||||
| INVITE. When a user sends an INVITE, they will receive a 200 OK with | ||||
| a tag. Requests in the reverse direction then contain that tag, and | ||||
| that tag only, in the From field. Here, the response to IM will | ||||
| contain a tag in the To field, and a MESSAGE will contain a tag in | ||||
| the From field. However, the UA may receive MESSAGE requests with | ||||
| tags in the From field that do not match the tag in the 200 OK | ||||
| received to the initial IM. This is because only a single 200 OK is | ||||
| returned to a MESSAGE request, as opposed to multiple 200 OK for | ||||
| INVITE. Thus, the UA MUST be prepared to receive MESSAGEs with many | ||||
| different tags, each from a different PUA. | ||||
| A UAS MUST be prepared to update the Route is has stored for an IM | ||||
| session with a Contact received in a request, if that Contact is | ||||
| different from one previously received, or if there was no Contact | ||||
| previously. | ||||
| 6.9 Caller Preferences | 8. Caller Preferences | |||
| User agents SHOULD add the "methods" tag defined in the caller | User agents SHOULD add the "methods" tag defined in the caller | |||
| preference specification [8] to Contact headers with SIP URLs placed | preference specification [8] to Contact headers with SIP URLs placed | |||
| in REGISTER requests, indicating support for the MESSAGE method. | in REGISTER requests, indicating support for the MESSAGE method. | |||
| Other elements of caller preferences MAY be supported. For example: | Other elements of caller preferences MAY be supported. For example: | |||
| REGISTER sip:dynamicsoft.com SIP/2.0 | REGISTER sip:dynamicsoft.com SIP/2.0 | |||
| Via: SIP/2.0/UDP mypc.dynamicsoft.com | Via: SIP/2.0/UDP mypc.dynamicsoft.com | |||
| To: sip:jdrosen@dynamicsoft.com | To: sip:jdrosen@dynamicsoft.com | |||
| From: sip:jdrosen@dynamicsoft.com | From: sip:jdrosen@dynamicsoft.com | |||
| Call-ID: asidhasd@1.2.3.4 | Call-ID: asidhasd@1.2.3.4 | |||
| CSeq: 39 REGISTER | CSeq: 39 REGISTER | |||
| Contact: sip:jdrosen@im-pc.dynamicsoft.com;methods="MESSAGE" | Contact: sip:jdrosen@im-pc.dynamicsoft.com;methods="MESSAGE" | |||
| Content-Length: 0 | Content-Length: 0 | |||
| Registrar/proxies which wish to offer IM service SHOULD implement | Registrar/proxies which wish to offer IM service SHOULD implement | |||
| the proxy processing defined in the caller preferences specification | the proxy processing defined in the caller preferences specification | |||
| [8]. | [8]. | |||
| 6.10 Security | 9. Mapping to CPIM | |||
| 9.1 Mapping SIP Requests to CPIM | ||||
| The CPIM draft[15] describes an abstract set of Instant Messaging | ||||
| operations that all instant messaging services must map to to insure | ||||
| interoperability. This section describes the mapping between SIP | ||||
| instant messaging and CPIM. | ||||
| The SIP MESSAGE request maps to the CPIM message operation, which | ||||
| requires the parameters of source, destination, transID, and the | ||||
| message to be sent. | ||||
| The From header maps to the source parameter, in the case of | ||||
| unauthenticated MESSAGE requests. However, a CPIM compliant gateway | ||||
| SHOULD authenticate the message request. If the request is in fact | ||||
| authenticated, then the source parameter MUST be the authenticated | ||||
| credentials of the sender. | ||||
| The requestURI maps to the destination parameter. | ||||
| The transID mapping needs further discussion (Open Issue Section | ||||
| 13.5.) It must contain enough information to identify the | ||||
| transaction state at a CPIM gateway, so that the correct SIP | ||||
| response can be generated. | ||||
| The message to be sent maps to the body of the MESSAGE request. If | ||||
| the body has a MIME type of message/cpim, it SHOULD be sent as is. | ||||
| Any other mime-types MUST be embedded into a message/cpim body part. | ||||
| If a gateway UAS cannot determine the results of the message | ||||
| operation in a short time, it MUST return a 202 accepted response. | ||||
| 9.2 Mapping CPIM Responses to SIP | ||||
| CPIM specifies the response types of success, failure, and | ||||
| indeterminate. A success response maps to a 200 OK message. An | ||||
| indeterminate response maps to a 202 Accepted response. The mapping | ||||
| for failure needs further discussion. (Open Issue Section 13.5) | ||||
| 9.3 Mapping CPIM operations to SIP | ||||
| When a gateway maps a CPIM message operation to SIP, it MUST | ||||
| generate a MESSAGE request. The request URI and the To header MUST | ||||
| both contain the URL from the CPIM destination parameter. The From | ||||
| header SHOULD contain the URL from the source parameter. The message | ||||
| MUST copied into the body unchanged. Otherwise, the MESSAGE request | ||||
| is generated using normal SIP. The gateway UAC MUST keep enough | ||||
| transaction state to be able to determine the transID from the SIP | ||||
| response. | ||||
| 9.4 Mapping SIP responses to CPIM | ||||
| Then the gateway UAC receives a response to a MESSAGE request, it | ||||
| determines the CPIM response according to the following rules: A 202 | ||||
| response maps to "undetermined." Any other 200 class response maps | ||||
| to "success." Any 400, 500, and 600 class response maps to | ||||
| "failure". 100 class responses MUST be consumed by the gateway UAC. | ||||
| 300 class responses SHOULD be acted upon by the gateway UAC | ||||
| according to normal SIP rules. | ||||
| 9.5 URL Scheme Mapping | ||||
| Mapping of URLs between URL schemes needs further discussion.(Open | ||||
| Issue Section 13.5) This is likely to be controlled by local policy | ||||
| at least to some degree. | ||||
| 10. Security | ||||
| End-to-end security concerns for instant messaging were a primary | End-to-end security concerns for instant messaging were a primary | |||
| driving force behind the creation of message/cpim [16]. Applications | driving force behind the creation of message/cpim [16]. Applications | |||
| needing end-to-end security should study that work carefully. | needing end-to-end security should study that work carefully. | |||
| SIP provides numerous security mechanisms which can be utilized in | SIP provides numerous security mechanisms which can be utilized in | |||
| addition to those made available through the use of message/cpim. | addition to those made available through the use of message/cpim. | |||
| 6.10.1 Privacy | 10.1 Privacy | |||
| In order to enhance privacy of instant messages, it is RECOMMENDED | In order to enhance privacy of instant messages, it is RECOMMENDED | |||
| that between network servers (proxies to proxies, proxies to | that between network servers (proxies to proxies, proxies to | |||
| redirect servers), transport mode ESP [6] or TLS is used to encrypt | redirect servers), transport mode ESP [6] or TLS is used to encrypt | |||
| all traffic. Coupled with persistent connections, this makes it | all traffic. Coupled with persistent connections, this makes it | |||
| impossible for eavesdroppers on non-UA connections to determine when | impossible for eavesdroppers on non-UA connections to determine when | |||
| a particular user has even sent an IM, let alone what the content | a particular user has even sent an IM, let alone what the content | |||
| is. Of course, the content of unencrypted IMs are exposed to | is. Of course, the content of unencrypted IMs are exposed to | |||
| proxies. | proxies. | |||
| Between a UAC and its local proxy, TLS [11] is RECOMMENDED. | Between a UAC and its local proxy, TLS [11] is RECOMMENDED. | |||
| Similarly, TLS SHOULD be used between a proxy and the UAS receiving | Similarly, TLS SHOULD be used between a proxy and the UAS receiving | |||
| the IM. The proxy can determine whether TLS is supported by the | the IM. The proxy can determine whether TLS is supported by the | |||
| receiving client based on the transport parameter in the Contact | receiving client based on the transport parameter in the Contact | |||
| header of its registration. If that registration contains the token | header of its registration. If that registration contains the token | |||
| "tls" as transport, it implies that the UAS supports TLS. (Open | "tls" as transport, it implies that the UAS supports TLS. (Open | |||
| issue Section 9.7) | issue Section 13.3) | |||
| Furthermore, we allow for the Contact header in the MESSAGE request | ||||
| to contain TLS as a transport. The Contact header is used to route | ||||
| subsequent messages between a pair of entities. It defines the | ||||
| address and transport used to communicate with the user agent for | ||||
| subsequent requests in the reverse direction. If no proxies insert | ||||
| Record-Route headers, the recipient of the original IM, when it | ||||
| wishes to send an IM back, will use the Contact header, and | ||||
| establish a direct TLS connection for the remainder of the IM | ||||
| communications. If a proxy does Record-Route, the situation is | ||||
| different. When the recipient of the original IM (call this | ||||
| participant B) sends an IM back to the originator of the original IM | ||||
| (call this participant A), this will be sent to the proxy closest to | ||||
| B which inserted Record- Route. This proxy, in turn, sends the | ||||
| request to the proxy before it which Record-Routed. The first proxy | ||||
| after A which inserted Record- Route will then use TLS to contact A. | ||||
| Since we suspect that most proxies will not insert Record-Route into | ||||
| instant messages, efficient, secure, direct IM will occur | ||||
| frequently. | ||||
| If encrypted message/cpim bodies are not available, sensitive data | If encrypted message/cpim bodies are not available, sensitive data | |||
| may be protected from being observed by intermediate proxies by | may be protected from being observed by intermediate proxies by | |||
| using SIP encryption for the transmission of MESSAGE requests. SIP | using SIP encryption for the transmission of MESSAGE requests. SIP | |||
| supports PGP based encryption, which does not require the | supports PGP based encryption, which does not require the | |||
| establishment of a session key for encryption of messages within a | establishment of a session key for encryption of messages within a | |||
| session (basically, a new session key is established for each | session (basically, a new session key is established for each | |||
| message as part of the PGP encryption). | message as part of the PGP encryption). | |||
| 6.10.2 Message Integrity and Authenticity | 10.2 Outbound authentication | |||
| In addition to the integrity and authenticity protections offered | ||||
| through message/cpim, SIP provides PGP based authentication and | ||||
| message integrity checks (both challenge-response and normal | ||||
| signatures), as well as http basic and digest authentication. | ||||
| 6.10.3 Outbound authentication | ||||
| When local proxies are used for transmission of outbound messages, | When local proxies are used for transmission of outbound messages, | |||
| proxy authentication is RECOMMENDED. This is useful to verify the | proxy authentication is RECOMMENDED. This is useful to verify the | |||
| identity of the originator, and prevent spoofing and spamming at the | identity of the originator, and prevent spoofing and spamming at the | |||
| originating network. | originating network. | |||
| 6.10.4 Replay Prevention | 10.3 Replay Prevention | |||
| To prevent the replay of old SIP requests, all signed MESSAGE | To prevent the replay of old SIP requests, all signed MESSAGE | |||
| requests and responses SHOULD contain a Date header covered by the | requests and responses SHOULD contain a Date header covered by the | |||
| message signature. Any message with a date older than several | message signature. Any message with a date older than several | |||
| minutes in the past, or which is more than several minutes in the | minutes in the past, or which is more than several minutes in the | |||
| future, SHOULD be answered with a 400 (Incorrect Date or Time) | future, SHOULD be answered with a 400 (Incorrect Date or Time) | |||
| message, unless such messages arrive repeatedly from the same | message, unless such messages arrive repeatedly from the same | |||
| source, in which case they MAY be discarded without sending a | source, in which case they MAY be discarded without sending a | |||
| response. Obviously, this replay attack prevention mechanism does | response. Obviously, this replay attack prevention mechanism does | |||
| not work for devices without clocks. | not work for devices without clocks. | |||
| Furthermore, all signed SIP MESSAGE requests MUST contain a Call-ID | Furthermore, all signed SIP MESSAGE requests MUST contain a Call-ID | |||
| and CSeq header covered by the message signature. A user agent MAY | and CSeq header covered by the message signature. A user agent MAY | |||
| store a list of Call-ID values, and for each, the higest CSeq seen | store a list of Call-ID values, and for each, the highest CSeq seen | |||
| within that Call-ID. Any message that arrives for a Call-ID that | within that Call-ID. Any message that arrives for a Call-ID that | |||
| exists, whose CSeq is lower than the highest seen so far, is | exists, whose CSeq is lower than the highest seen so far, is | |||
| discarded. | discarded. | |||
| Finally, challenge-response authentication MAY be used to prevent | Finally, challenge-response authentication MAY be used to prevent | |||
| replay protection. | replay protection. | |||
| 7. Congestion Control | 11. Congestion Control | |||
| (Open Issue Section 9.8) Discussion needs to take place to populate | (Open Issue Section 13.4) Discussion needs to take place to populate | |||
| this section. | this section. | |||
| 8. Example Messages | 12. Example Messages | |||
| An example message flow is shown in Figure 1. The message flow shows | An example message flow is shown in Figure 1. The message flow shows | |||
| an initial IM sent from User 1 to User 2, both users in the same | an initial IM sent from User 1 to User 2, both users in the same | |||
| domain, "domain", through a single proxy. A second IM, sent in | domain, "domain", through a single proxy. | |||
| response, flows directly from User 2 to User 1. | ||||
| | F1 MESSAGE | | | | F1 MESSAGE | | | |||
| |--------------------> | F2 MESSAGE | | |--------------------> | F2 MESSAGE | | |||
| | | ----------------------->| | | | ----------------------->| | |||
| | | | | | | | | |||
| | | F3 200 OK | | | | F3 200 OK | | |||
| | | <-----------------------| | | | <-----------------------| | |||
| | F4 200 OK | | | | F4 200 OK | | | |||
| |<-------------------- | | | |<-------------------- | | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| | | | | | | | | |||
| | | F5 MESSAGE | | ||||
| | <--------------------|------------------------ | | ||||
| | | | | ||||
| | F6 200 OK | | | ||||
| | ---------------------|-----------------------> | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| | | | | ||||
| User 1 Proxy User 2 | User 1 Proxy User 2 | |||
| Figure 1: Example Message Flow | Figure 1: Example Message Flow | |||
| Message F1 looks like: | Message F1 looks like: | |||
| MESSAGE im:user2@domain.com SIP/2.0 | MESSAGE im:user2@domain.com SIP/2.0 | |||
| Via: SIP/2.0/UDP user1pc.domain.com | Via: SIP/2.0/UDP user1pc.domain.com | |||
| From: im:user1@domain.com | From: im:user1@domain.com | |||
| To: im:user2@domain.com | To: im:user2@domain.com | |||
| Contact: sip:user1@user1pc.domain.com | ||||
| Call-ID: asd88asd77a@1.2.3.4 | Call-ID: asd88asd77a@1.2.3.4 | |||
| CSeq: 1 MESSAGE | CSeq: 1 MESSAGE | |||
| Content-Type: text/plain | Content-Type: text/plain | |||
| Content-Length: 18 | Content-Length: 18 | |||
| Watson, come here. | Watson, come here. | |||
| User1 forwards this message to the server for domain.com (discovered | User1 forwards this message to the server for domain.com (discovered | |||
| through the combination of SRV and A record processing described in | through the combination of SRV and A record processing described in | |||
| Section 6.3 , using UDP. The proxy receives this request, and | Section 7.3 , using UDP. The proxy receives this request, and | |||
| recognizes that it is the server for domain.com. It looks up user2 | recognizes that it is the server for domain.com. It looks up user2 | |||
| in its database (built up through registrations), and finds a | in its database (built up through registrations), and finds a | |||
| binding from im:user2@domain.com to sip:user2@user2pc.domain.com. It | binding from im:user2@domain.com to sip:user2@user2pc.domain.com. It | |||
| forwards the request to user2, and does not insert a Record-Route | forwards the request to user2. The resulting message, F2, looks | |||
| header. The resulting message, F2, looks like: | like: | |||
| MESSAGE sip:user2@domain.com SIP/2.0 | MESSAGE sip:user2@domain.com SIP/2.0 | |||
| Via: SIP/2.0/UDP proxy.domain.com | Via: SIP/2.0/UDP proxy.domain.com | |||
| Via: SIP/2.0/UDP user1pc.domain.com | Via: SIP/2.0/UDP user1pc.domain.com | |||
| From: im:user1@domain.com | From: im:user1@domain.com | |||
| To: im:user2@domain.com | To: im:user2@domain.com | |||
| Contact: sip:user1@user1pc.domain.com | ||||
| Call-ID: asd88asd77a@1.2.3.4 | Call-ID: asd88asd77a@1.2.3.4 | |||
| CSeq: 1 MESSAGE | CSeq: 1 MESSAGE | |||
| Content-Type: text/plain | Content-Type: text/plain | |||
| Content-Length: 18 | Content-Length: 18 | |||
| Watson, come here. | Watson, come here. | |||
| The message is received by user2, displayed, and a response is | The message is received by user2, displayed, and a response is | |||
| generated, message F3, and sent to the proxy: | generated, message F3, and sent to the proxy: | |||
| SIP/2.0 200 OK | SIP/2.0 200 OK | |||
| Via: SIP/2.0/UDP proxy.domain.com | Via: SIP/2.0/UDP proxy.domain.com | |||
| Via: SIP/2.0/UDP user1pc.domain.com | Via: SIP/2.0/UDP user1pc.domain.com | |||
| From: im:user1@domain.com | From: im:user1@domain.com | |||
| To: im:user2@domain.com;tag=ab8asdasd9 | To: im:user2@domain.com;tag=ab8asdasd9 | |||
| Contact: sip:user2@user1pc.domain.com | ||||
| Call-ID: asd88asd77a@1.2.3.4 | Call-ID: asd88asd77a@1.2.3.4 | |||
| CSeq: 1 MESSAGE | CSeq: 1 MESSAGE | |||
| Content-Length: 0 | Content-Length: 0 | |||
| Note that most of the header fields are simply reflected in the | Note that most of the header fields are simply reflected in the | |||
| response. The proxy receives this response, strips off the top Via, | response. The proxy receives this response, strips off the top Via, | |||
| and forwards to the address in the next Via, user1pc.domain.com, the | and forwards to the address in the next Via, user1pc.domain.com, the | |||
| result being message F4: | result being message F4: | |||
| SIP/2.0 200 OK | SIP/2.0 200 OK | |||
| Via: SIP/2.0/UDP user1pc.domain.com | Via: SIP/2.0/UDP user1pc.domain.com | |||
| From: im:user1@domain.com | From: im:user1@domain.com | |||
| To: im:user2@domain.com;tag=ab8asdasd9 | To: im:user2@domain.com;tag=ab8asdasd9 | |||
| Call-ID: asd88asd77a@1.2.3.4 | Call-ID: asd88asd77a@1.2.3.4 | |||
| CSeq: 1 MESSAGE | CSeq: 1 MESSAGE | |||
| Content-Length: 0 | Content-Length: 0 | |||
| Now, user2 wishes to send an IM to user1, message F5. As there are | 13. Open Issues | |||
| no Record-Routes in the original IM, it can simply send the IM | ||||
| directly to the address in the Contact header. Note how the To and | ||||
| From fields are now reversed from the response it sent in message | ||||
| F4: | ||||
| MESSAGE sip:user1@user1pc.domain.com SIP/2.0 | ||||
| Via: SIP/2.0/UDP user2pc.domain.com | ||||
| To: im:user1@domain.com | ||||
| From: im:user2@domain.com;tag=ab8asdasd9 | ||||
| Contact: sip:user2@user2pc.domain.com | ||||
| Call-ID: asd88asd77a@1.2.3.4 | ||||
| CSeq: 1 MESSAGE | ||||
| Content-Type: multipart/signed; boundary=next; | ||||
| MDALG=SHA-1; type=application/pkcs7 | ||||
| Content-Length: <however many bytes that is below> | ||||
| --next | ||||
| Content-Type: message/cpim | ||||
| From: <im:user2@domain.com> | ||||
| To: <im:user1@domain.com> | ||||
| Date: 2001-02-28T01:20:00-06:00 | ||||
| Content-Type: text/plain | ||||
| My name is User2, not Watson. | ||||
| --next | ||||
| Content-Type: application/pkcs7 | ||||
| (signature stuff) | ||||
| : | ||||
| --next-- | ||||
| This is sent directly to user1, who responds with a 200 OK in | ||||
| message F6: | ||||
| SIP/2.0 200 OK | ||||
| Via: SIP/2.0/UDP user2pc.domain.com | ||||
| To: im:user1@domain.com;tag=2c09sj3sd9 | ||||
| From: im:user2@domain.com;tag=ab8asdasd9 | ||||
| Call-ID: asd88asd77a@1.2.3.4 | ||||
| CSeq: 1 MESSAGE | ||||
| Content-Length: 0 | ||||
| 9. Open Issues | ||||
| 9.1 Must a MESSAGE actually include a message? | 13.1 Must a MESSAGE actually include a message? | |||
| Section 6 specifies that a MESSAGE MAY contain a MIME body. Should | Section 7 specifies that a MESSAGE MAY contain a MIME body. Should | |||
| this be MUST? Does it make sense to have a MESSAGE with no body? | this be MUST? Does it make sense to have a MESSAGE with no body? | |||
| 9.2 Should support for message/cpim be mandatory in all UAs? | 13.2 The im: URL and RFC2543 proxies and registrars | |||
| Section 6 requires that UAs implementing MESSAGE support text/plain | ||||
| bodies as the lowest common denominator. Should this be message/cpim | ||||
| instead? Any UA wishing to support end-end signing or encryption of | ||||
| messages passing across simple/apex/prim boundaries MUST support | ||||
| message/cpim. If, however, end-end security is not desired, clients | ||||
| and messaging can be made a little lighter by not including the | ||||
| message/cpim wrapper. An unsigned message/cpim body can be created | ||||
| from messages from those clients when crossing a boundary that | ||||
| requires one. | ||||
| 9.3 message/cpim and the Accept header | ||||
| Do we need text to make it clear that a UA should indicate the mime | ||||
| types it supports _inside_ a message/cpim body as well as supporting | ||||
| message/cpim? | ||||
| 9.4 Message Sessions | ||||
| Several implementations of the -00 version of this draft grouped | ||||
| messages in a common thread by placing them in a "call-leg" (common | ||||
| To, From, and Call-ID). The first message sent or received in a | ||||
| thread established the leg. This has provided enough information to | ||||
| allow user interfaces to present separate threads in separate | ||||
| dialogs. There is some concern that there is no way to formally | ||||
| terminate this "call-leg". | ||||
| The -00 version noded that there is state at the UA associated with | ||||
| this notion of session, encapsulated in the Call-ID, Route headers, | ||||
| and CSeq numbers. A UA MAY terminate this session at any time, | ||||
| including after each MESSAGE. No messaging is required to terminate | ||||
| it. Any associated state with the session is simply discarded. The | ||||
| idempotency of SIP requests will ensure that if one side (side A) | ||||
| discards session state, and the other (side B) does not, a message | ||||
| from side B will appear as a new IM, and standard processing will | ||||
| reconstitute the session on side A. | ||||
| o Should we define a way to use INVITE/BYE to surround a group of | ||||
| MESSAGE requests that are part of a logical session? | ||||
| 9.5 What would a body in a 200 OK to a MESSAGE mean? | ||||
| Section 6.5 states "A 200 class response to a MESSAGE request MAY | ||||
| contain a body, but this will often not be the case, since these | ||||
| responses are generated automatically." If one were to appear, what | ||||
| would it mean? | ||||
| 9.6 The im: URL and RFC2543 proxies and registrars | ||||
| What are the implications of an im: URL showing up in the request | What are the implications of an im: URL showing up in the request | |||
| URI in a MESSAGE request received by an RFC2543 proxy, or the To: | URI in a MESSAGE request received by an RFC2543 proxy, or the To: | |||
| header of a REGISTER request received by an RFC2543 registrar? | header of a REGISTER request received by an RFC2543 registrar? | |||
| 9.7 Providing im: URL in Contact headers | 13.3 Providing im: URL in Contact headers | |||
| What are the ramifications of a UA providing an im: URL in a | What are the ramifications of a UA providing an im: URL in a | |||
| Contact: header for a REGISTER method, or a MESSAGE method? For the | Contact: header for a REGISTER method, or a MESSAGE method? For the | |||
| forseeable future, most SIP endpoints aren't going to have SRV | forseeable future, most SIP endpoints aren't going to have SRV | |||
| records of the form _im._sip.host or even _sip.host pointing to | records of the form _im._sip.host or even _sip.host pointing to | |||
| them. Falling back to A records in that case seems to preclude the | them. Falling back to A records in that case seems to preclude the | |||
| use of non-UDP transports. | use of non-UDP transports. | |||
| 9.8 Congestion control | 13.4 Congestion control | |||
| Per the amendments made to the SIMPLE charter by the IESG prior to | Per the amendments made to the SIMPLE charter by the IESG prior to | |||
| approval, congestion control needs attention. In particular the | approval, congestion control needs attention. In particular the | |||
| requirements of BCP 41 must be met by this extension. Specifying the | requirements of BCP 41 must be met by this extension. Specifying the | |||
| use of transport protocols with congestion control built in, | use of transport protocols with congestion control built in, | |||
| particularly with the recommendation of reuse of connections, is an | particularly with the recommendation of reuse of connections, is an | |||
| option. The question is when can we use those that don't (UDP) and | option. The question is when can we use those that don't (UDP) and | |||
| what needs to be done in addition to what SIP already does in that | what needs to be done in addition to what SIP already does in that | |||
| case. Among other things, this interacts with Section 9.7 | case. Among other things, this interacts with Section 13.3 | |||
| 9.9 Mapping to CPIM | 13.5 Mapping to CPIM | |||
| This document needs to detail the mapping of this extension onto | This version offers a first cut at describing CPIM mapping. However, | |||
| CPIM. | the entire subject needs further discussion. How do we map SIP | |||
| transactions to CPIM "transID?" What is the correct SIP response | ||||
| code for a CPIM failure response? How do we handle mapping between | ||||
| URL schema at a gateway? Do we need to describe gateway timing | ||||
| issues? | ||||
| 10. Acknowledgements | 14. Acknowledgments | |||
| The authors would like to thank the following people for their | The authors would like to thank the following people for their | |||
| support of the concept of SIP for IM, support for this work, and for | support of the concept of SIP for IM, support for this work, and for | |||
| their useful comments and insights: | their useful comments and insights: | |||
| Jon Peterson Level(3) Communications | Jon Peterson Level(3) Communications | |||
| Sean Olson Ericsson | Sean Olson Ericsson | |||
| Adam Roach Ericsson | Adam Roach Ericsson | |||
| Billy Biggs University of Waterloo | Billy Biggs University of Waterloo | |||
| Stuart Barkley UUNet | Stuart Barkley UUNet | |||
| skipping to change at page 20, line 18 ¶ | skipping to change at page 17, line 29 ¶ | |||
| draft-ietf-impp-cpim-01 (work in progress), February 2001. | draft-ietf-impp-cpim-01 (work in progress), February 2001. | |||
| [16] Atkins, D. and G. Klyne, "Common Presence and Instant | [16] Atkins, D. and G. Klyne, "Common Presence and Instant | |||
| Messaging Message Format", draft-ietf-impp-cpim-msgfmt-00 | Messaging Message Format", draft-ietf-impp-cpim-msgfmt-00 | |||
| (work in progress), February 2001. | (work in progress), February 2001. | |||
| Authors' Addresses | Authors' Addresses | |||
| Jonathan Rosenberg | Jonathan Rosenberg | |||
| dynamicsoft | dynamicsoft | |||
| 200 Executive Drive | 72 Eagle Rock Avenue | |||
| Suite 120 | First Floor | |||
| West Orange, NJ 07052 | East Hanover, NJ 07936 | |||
| email: jdrosen@dynamicsoft.com | email: jdrosen@dynamicsoft.com | |||
| Dean Willis | Dean Willis | |||
| dynamicsoft | dynamicsoft | |||
| 5100 Tennyson Parkway | 5100 Tennyson Parkway | |||
| Suite 1200 | Suite 1200 | |||
| Plano, TX 75024 | Plano, TX 75024 | |||
| email: dwillis@dynamicsoft.com | email: dwillis@dynamicsoft.com | |||
| Robert J. Sparks | Robert J. Sparks | |||
| dynamicsoft | dynamicsoft | |||
| 5100 Tennyson Parkway | 5100 Tennyson Parkway | |||
| Suite 1200 | Suite 1200 | |||
| Plano, TX 75024 | Plano, TX 75024 | |||
| email: rsparks@dynamicsoft.com | email: rsparks@dynamicsoft.com | |||
| Ben Campbell | ||||
| Ben Cambpell | ||||
| dynamicsoft | dynamicsoft | |||
| 5100 Tennyson Parkway | 5100 Tennyson Parkway | |||
| Suite 1200 | Suite 1200 | |||
| Plano, TX 75024 | Plano, TX 75024 | |||
| email: bcampbell@dynamicsoft.com | email: bcampbell@dynamicsoft.com | |||
| Henning Schulzrinne | Henning Schulzrinne | |||
| Columbia University | Columbia University | |||
| M/S 0401 | M/S 0401 | |||
| 1214 Amsterdam Ave. | 1214 Amsterdam Ave. | |||
| New York, NY 10027-7003 | New York, NY 10027-7003 | |||
| email: schulzrinne@cs.columbia.edu | email: schulzrinne@cs.columbia.edu | |||
| Jonathan Lennox | Jonathan Lennox | |||
| Columbia University | Columbia University | |||
| End of changes. 62 change blocks. | ||||
| 330 lines changed or deleted | 201 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||