idnits 2.17.1 draft-ietf-stox-presence-09.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (February 9, 2014) is 3729 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Outdated reference: A later version (-11) exists of draft-ietf-stox-core-09 Summary: 0 errors (**), 0 flaws (~~), 2 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group P. Saint-Andre 3 Internet-Draft &yet 4 Intended status: Standards Track A. Houri 5 Expires: August 13, 2014 IBM 6 J. Hildebrand 7 Cisco Systems, Inc. 8 February 9, 2014 10 Interworking between the Session Initiation Protocol (SIP) and the 11 Extensible Messaging and Presence Protocol (XMPP): Presence 12 draft-ietf-stox-presence-09 14 Abstract 16 This document defines a bi-directional protocol mapping for the 17 exchange of presence information between the Session Initiation 18 Protocol (SIP) and the Extensible Messaging and Presence Protocol 19 (XMPP). 21 Status of This Memo 23 This Internet-Draft is submitted in full conformance with the 24 provisions of BCP 78 and BCP 79. 26 Internet-Drafts are working documents of the Internet Engineering 27 Task Force (IETF). Note that other groups may also distribute 28 working documents as Internet-Drafts. The list of current Internet- 29 Drafts is at http://datatracker.ietf.org/drafts/current/. 31 Internet-Drafts are draft documents valid for a maximum of six months 32 and may be updated, replaced, or obsoleted by other documents at any 33 time. It is inappropriate to use Internet-Drafts as reference 34 material or to cite them other than as "work in progress." 36 This Internet-Draft will expire on August 13, 2014. 38 Copyright Notice 40 Copyright (c) 2014 IETF Trust and the persons identified as the 41 document authors. All rights reserved. 43 This document is subject to BCP 78 and the IETF Trust's Legal 44 Provisions Relating to IETF Documents 45 (http://trustee.ietf.org/license-info) in effect on the date of 46 publication of this document. Please review these documents 47 carefully, as they describe your rights and restrictions with respect 48 to this document. Code Components extracted from this document must 49 include Simplified BSD License text as described in Section 4.e of 50 the Trust Legal Provisions and are provided without warranty as 51 described in the Simplified BSD License. 53 Table of Contents 55 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 56 2. Intended Audience . . . . . . . . . . . . . . . . . . . . . . 3 57 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 58 4. Subscriptions to Presence Information . . . . . . . . . . . . 4 59 4.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 60 4.2. XMPP to SIP . . . . . . . . . . . . . . . . . . . . . . . 5 61 4.2.1. Establishing a Presence Subscription . . . . . . . . 5 62 4.2.2. Refreshing a Presence Subscription . . . . . . . . . 9 63 4.2.3. Cancelling a Presence Subscription . . . . . . . . . 10 64 4.3. SIP to XMPP . . . . . . . . . . . . . . . . . . . . . . . 11 65 4.3.1. Establishing a Presence Subscription . . . . . . . . 11 66 4.3.2. Refreshing a Presence Subscription . . . . . . . . . 14 67 4.3.3. Cancelling a Presence Subscription . . . . . . . . . 16 68 5. Notifications of Presence Information . . . . . . . . . . . . 16 69 5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 16 70 5.2. XMPP to SIP . . . . . . . . . . . . . . . . . . . . . . . 17 71 5.3. SIP to XMPP . . . . . . . . . . . . . . . . . . . . . . . 22 72 6. Requests for Presence Information . . . . . . . . . . . . . . 24 73 6.1. XMPP to SIP . . . . . . . . . . . . . . . . . . . . . . . 24 74 6.2. SIP to XMPP . . . . . . . . . . . . . . . . . . . . . . . 25 75 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 76 8. Security Considerations . . . . . . . . . . . . . . . . . . . 25 77 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 78 9.1. Normative References . . . . . . . . . . . . . . . . . . 26 79 9.2. Informative References . . . . . . . . . . . . . . . . . 27 80 Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 27 81 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 83 1. Introduction 85 In order to help ensure interworking between presence systems that 86 conform to the instant message / presence requirements [RFC2779], it 87 is important to clearly define protocol mappings between such 88 systems. Within the IETF, work has proceeded on two presence 89 technologies: 91 o Various extensions to the Session Initiation Protocol ([RFC3261]) 92 for presence, in particular [RFC3856] 94 o The Extensible Messaging and Presence Protocol (XMPP), which 95 consists of a formalization of the core XML streaming protocols 96 developed originally by the Jabber open-source community; the 97 relevant specifications are [RFC6120] for the XML streaming layer 98 and [RFC6121] for basic presence and instant messaging extensions 100 One approach to helping ensure interworking between these protocols 101 is to map each protocol to the abstract semantics described in 102 [RFC3860]; although that is the approach taken by both [RFC3922] and 103 [I-D.ietf-simple-cpim-mapping], to the best of our knowledge that 104 approach has never been implemented. The approach taken in this 105 document is to directly map semantics from one protocol to another 106 (i.e., from SIP/SIMPLE to XMPP and vice-versa), since that is how 107 existing systems solve the interworking problem. 109 The architectural assumptions underlying such direct mappings are 110 provided in [I-D.ietf-stox-core], including mapping of addresses and 111 error conditions. The mappings specified in this document cover 112 basic presence functionality. Mapping of more advanced functionality 113 (e.g., so-called "rich presence") is out of scope for this document. 115 2. Intended Audience 117 The documents in this series are intended for use by software 118 developers who have an existing system based on one of these 119 technologies (e.g., SIP), and would like to enable communication from 120 that existing system to systems based on the other technology (e.g., 121 XMPP). We assume that readers are familiar with the core 122 specifications for both SIP [RFC3261] and XMPP [RFC6120], with the 123 base document for this series [I-D.ietf-stox-core], and with the 124 following presence-related specifications: 126 o A Presence Event Package for the Session Initiation Protocol 127 [RFC3856] 129 o Presence Information Data Format (PIDF) [RFC3863] 131 o Extensible Messaging and Presence Protocol: Instant Messaging and 132 Presence [RFC6121] 134 o SIP-Specific Event Notification [RFC6665] 136 3. Terminology 138 A number of terms used here (user, contact, subscription, 139 notification, etc.) are explained in [RFC3261], [RFC3856], [RFC6120], 140 and [RFC6121]. This document uses some, but not all, of the terms 141 defined in the Model for Presence and Instant Messaging [RFC2778]. 143 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 144 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 145 "OPTIONAL" in this document are to be interpreted as described in 146 [RFC2119]. 148 4. Subscriptions to Presence Information 150 4.1. Overview 152 Both XMPP and presence-aware SIP systems enable entities (often but 153 not necessarily human users) to subscribe to the presence of other 154 entities. XMPP presence subscriptions are specified in [RFC6121]. 155 Presence subscriptions using a SIP event package for presence are 156 specified in [RFC3856]. 158 As described in [RFC6121], XMPP presence subscriptions are managed 159 using XMPP presence stanzas of type "subscribe", "subscribed", 160 "unsubscribe", and "unsubscribed". The main subscription states are: 162 o "none" (neither the user nor the contact is subscribed to the 163 other's presence information) 165 o "from" (the user has a subscription from the contact) 167 o "to" (the user has a subscription to the contact's presence 168 information) 170 o "both" (both user and contact are subscribed to each other's 171 presence information) 173 As described in [RFC3856], SIP presence subscriptions are managed 174 through the use of SIP SUBSCRIBE events sent from a SIP user agent to 175 an intended recipient who is most generally referenced by a Presence 176 URI of the form but who might be referenced by a 177 SIP or SIPS URI of the form or . 178 In practice, 'pres' URIs are rarely used, which is the examples in 179 this document use 'sip' URIs. 181 The subscription models underlying XMPP and SIP differ mainly in the 182 fact that XMPP presence subscriptions are long-lived (indeed 183 permanent if not explicitly cancelled, so that a subscription need 184 never be refreshed during any given presence "session"), whereas SIP 185 presence subscriptions are short-lived (the default time-to-live of a 186 SIP presence subscription is 3600 seconds, as specified in 187 Section 6.4 of [RFC3856], so that a subscription needs to be 188 explicitly refreshed if it will have the appearance of being 189 permanent or even of lasting as for the duration of a presence 190 "session"). This disparity has implications for the handling of 191 subscription cancellations in either direction and, from the SIP 192 side, subscription refreshes. 194 4.2. XMPP to SIP 196 4.2.1. Establishing a Presence Subscription 198 The following diagram illustrates the protocol flow for establishing 199 a presence subscription from an XMPP user to a SIP user, as further 200 explained in the text and examples after the diagram. 202 XMPP XMPP XMPP-to-SIP SIP-to-XMPP SIP SIP 203 User Server Gateway Gateway Server User 204 | | | | | | 205 | (F1) XMPP | | | | | 206 | subscribe | | | | | 207 |---------->| | | | | 208 | | (F2) XMPP | | | | 209 | | subscribe | | | | 210 | |----------->| | | | 211 | | | (F3) SIP | | | 212 | | | SUBSCRIBE | | | 213 | | |------------->| | | 214 | | | | (F4) SIP | | 215 | | | | SUBSCRIBE | | 216 | | | |----------->| | 217 | | | | | (F5) SIP | 218 | | | | | SUBSCRIBE | 219 | | | | |---------->| 220 | | | | | (F6) SIP | 221 | | | | | 200 OK | 222 | | | | (F7) SIP |<----------| 223 | | | | 200 OK | (F8) SIP | 224 | | | |<-----------| NOTIFY | 225 | | | | |<----------| 226 | | | | (F9) SIP | | 227 | | | | NOTIFY | | 228 | | | |<-----------| | 229 | | | | (F10) SIP | | 230 | | | | 200 OK | | 231 | | | (F12) XMPP |----------->| | 232 | | | subscribed | | (F11) SIP | 233 | | |<-------------| | 200 OK | 234 | | (F13) XMPP | | |---------->| 235 | | subscribed | (F15) XMPP | | | 236 | |<-----------| presence | | | 237 | (F14) XMPP| |<-------------| | | 238 | subscribed| (F16) XMPP | | | | 239 |<----------| presence | | | | 240 | |<-----------| | | | 241 | (F17) XMPP| | | | | 242 | presence | | | | | 243 |<----------| | | | | 245 An XMPP user (e.g., juliet@example.com) initiates a subscription by 246 sending a subscription request to a contact (e.g., 247 romeo@example.net), and the contact either accepts or declines the 248 request. If the contact accepts the request, the user will have a 249 subscription to the contact's presence information until (1) the user 250 unsubscribes or (2) the contact cancels the subscription. The 251 subscription request is encapsulated in a presence stanza of type 252 "subscribe": 254 Example 1: XMPP user subscribes to SIP contact (F1) 256 | 260 Upon receiving such a presence stanza, the XMPP server to which 261 Juliet has connected needs to determine the identity of the 262 domainpart in the 'to' address, which it does by following the 263 procedures explained in Section 5 of [I-D.ietf-stox-core]. If the 264 domain is a SIP domain, the XMPP server will hand off the presence 265 stanza to an associated XMPP-SIP gateway or connection manager that 266 natively communicates with presence-aware SIP servers. 268 The XMPP-SIP gateway is then responsible for translating the XMPP 269 subscription request into a SIP SUBSCRIBE request addressed from the 270 XMPP user to the SIP user: 272 Example 2: SIP transformation of XMPP subscription request (F3) 274 | SUBSCRIBE sip:romeo@example.net SIP/2.0 275 | Via: SIP/2.0/TCP x2s.example.com;branch=z9hG4bKna998sk 276 | From: ;tag=ffd2 277 | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C 278 | Event: presence 279 | Max-Forwards: 70 280 | CSeq: 123 SUBSCRIBE 281 | Contact: 282 | Accept: application/pidf+xml 283 | Expires: 3600 284 | Content-Length: 0 286 Once the SIP-XMPP gateway has passed the SIP SUBSCRIBE off to the SIP 287 server and the SIP server has delivered the SIP SUBSCRIBE to the SIP 288 user (F4 and F5, no examples shown), the SIP user then would send a 289 response indicating acceptance of the subscription request: 291 Example 3: SIP accepts subscription request (F6) 293 | SIP/2.0 200 OK 294 | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk 295 | From: ;tag=ffd2 296 | To: ;tag=j89d 297 | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C 298 | CSeq: 234 SUBSCRIBE 299 | Contact: 300 | Expires: 3600 301 | Content-Length: 0 303 In accordance with [RFC6665], the XMPP-SIP gateway SHOULD consider 304 the subscription state to be "neutral" until it receives a NOTIFY 305 message. Therefore the SIP user or SIP-XMPP gateway at the SIP 306 user's domain SHOULD immediately send a NOTIFY message containing a 307 "Subscription-State" header whose value contains the string "active" 308 (see Section 5). 310 Example 4: SIP user sends presence notification (F7) 312 | NOTIFY sip:192.0.2.1 SIP/2.0 313 | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk 314 | From: ;tag=yt66 315 | To: ;tag=bi54 316 | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C 317 | Event: presence 318 | Subscription-State: active;expires=499 319 | Max-Forwards: 70 320 | CSeq: 8775 NOTIFY 321 | Contact: 322 | Content-Type: application/pidf+xml 323 | Content-Length: 193 324 | 325 | 326 | 328 | 329 | 330 | open 331 | away 332 | 333 | 334 | 336 In response, the presence-aware SIP-XMPP gateway would send a 200 OK 337 to the SIP user (not shown here since it is not translated into an 338 XMPP stanza). 340 Upon receiving the first NOTIFY with a subscription state of active, 341 the XMPP-SIP gateway MUST generate a presence stanza of type 342 "subscribed": 344 Example 5: XMPP user receives acknowledgement from SIP contact (F14) 346 | 350 As described under Section 5, the gateway MUST also generate a 351 presence notification addressed to the XMPP user: 353 Example 6: XMPP user receives presence notification from SIP contact 354 (F17) 356 | 359 4.2.2. Refreshing a Presence Subscription 361 It is the responsibility of the XMPP-SIP gateway to set the value of 362 the "Expires" header and to periodically renew the subscription on 363 the SIMPLE side of the gateway so that the subscription appears to be 364 permanent to the XMPP user. For example, the XMPP-SIP gateway SHOULD 365 send a new SUBSCRIBE request to the SIP user whenever the XMPP user 366 initiates a presence session with the XMPP server by sending initial 367 presence to its XMPP server. The XMPP-SIP gateway also SHOULD send a 368 new SUBSCRIBE request to the SIP user whenever the SIP presence 369 subscription is scheduled to expire during the XMPP user's active 370 presence session. 372 The rules regarding SIP SUBSCRIBE requests for the purpose of 373 establishing and refreshing a presence subscription are provided in 374 [RFC6665]. Those rules also apply to XMPP-SIP gateways. 375 Furthermore, an XMPP-SIP gateway MUST consider the XMPP subscription 376 to be permanently cancelled (and so inform the XMPP user) if it 377 receives a SIP response of 403, 489, or 603. By contrast, it is 378 appropriate to consider a SIP response of 423 or 481 to be a 379 transient error, and to maintain the long-lived XMPP presence 380 subscription. [RFC6665] explains more detailed considerations about 381 the handing of SIP responses in relation to subscription requests and 382 refreshes. 384 Finally, see the Security Considerations (Section 8) of this document 385 for important information and requirements regarding the security 386 implications of subscription refreshes. 388 4.2.3. Cancelling a Presence Subscription 390 The following diagram illustrates the protocol flow for cancelling an 391 XMPP user's presence subscription to a SIP user, as further explained 392 in the text and examples after the diagram. 394 XMPP XMPP XMPP-to-SIP SIP-to-XMPP SIP SIP 395 User Server Gateway Gateway Server User 396 | | | | | | 397 | (F18) XMPP| | | | | 398 |unsubscribe| | | | | 399 |---------->| | | | | 400 | | (F19) XMPP | | | | 401 | | unsubscribe| | | | 402 | |----------->| | | | 403 | | | (F20) SIP | | | 404 | | | SUBSCRIBE | | | 405 | | | Expires: 0 | | | 406 | | |------------->| | | 407 | | | | (F21) SIP | | 408 | | | | SUBSCRIBE | | 409 | | | | Expires: 0 | | 410 | | | |----------->| | 411 | | | | | (F22) SIP | 412 | | | | | SUBSCRIBE | 413 | | | | | Expires: 0| 414 | | | | |---------->| 415 | | | | | (F23) SIP | 416 | | | | | 200 OK | 417 | | | | |<----------| 418 | | | | (F24) SIP | | 419 | | | | 200 OK | | 420 | | | |<-----------| | 421 | | | (F25) XMPP | | | 422 | | | unsubscribed | | | 423 | | |<-------------| | | 424 | | (F26) XMPP | | | | 425 | |unsubscribed| | | | 426 | |<-----------| | | | 427 | (F27) XMPP| | | | | 428 | unsub'd | | | | | 429 |<----------| | | | | 430 | | | | | | 432 At any time after subscribing, the XMPP user can unsubscribe from the 433 contact's presence. This is done by sending a presence stanza of 434 type "unsubscribe": 436 Example 7: XMPP user unsubscribes from SIP contact (F18) 438 | 442 The XMPP-SIP gateway is responsible for translating the unsubscribe 443 command into a SIP SUBSCRIBE request with the "Expires" header set to 444 a value of zero: 446 Example 8: SIP transformation of XMPP unsubscribe (F20) 448 | SUBSCRIBE sip:romeo@example.net SIP/2.0 449 | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk 450 | From: ;tag=j89d 451 | Call-ID: 9D9F00DF-FCA9-4E7E-B970-80B638D5218A 452 | Event: presence 453 | Max-Forwards: 70 454 | CSeq: 789 SUBSCRIBE 455 | Contact: 456 | Accept: application/pidf+xml 457 | Expires: 0 458 | Content-Length: 0 460 Upon sending the transformed unsubscribe, the XMPP-SIP gateway SHOULD 461 send a presence stanza of type "unsubscribed" addressed to the XMPP 462 user: 464 Example 9: XMPP user receives unsubscribed notification (F27) 466 | 470 4.3. SIP to XMPP 472 4.3.1. Establishing a Presence Subscription 474 The following diagram illustrates the protocol flow for establishing 475 a presence subscription from a SIP user to an XMPP user, as further 476 explained in the text and examples after the diagram. 478 SIP SIP SIP-to-XMPP XMPP-to-SIP XMPP XMPP 479 User Server Gateway Gateway Server User 480 | | | | | | 481 | (F28) SIP | | | | | 482 | SUBSCRIBE | | | | | 483 |---------->| | | | | 484 | | (F29) SIP | | | | 485 | | SUBSCRIBE | | | | 486 | |----------->| | | | 487 | | | (F30) XMPP | | | 488 | | | subscribe | | | 489 | | |------------->| | | 490 | | | | (F31) XMPP | | 491 | | | | subscribe | | 492 | | | |----------->| | 493 | | | | | (F32) XMPP| 494 | | | | | subscribe | 495 | | | | |---------->| 496 | | | | | (F33) XMPP| 497 | | | | | subscribed| 498 | | | | |<----------| 499 | | | | (F34) XMPP | | 500 | | | | subscribed | | 501 | | | |<-----------| | 502 | | | (F35) SIP | | | 503 | | | 200 OK | | | 504 | | |<-------------| | | 505 | | (F36) SIP | | | | 506 | | 200 OK | | | | 507 | |<-----------| | | | 508 | (F37) SIP | | | | | 509 | 200 OK | | | | | 510 |<----------| | | | | 511 | | | | | | 513 A SIP user initiates a subscription to a contact's presence 514 information by sending a SIP SUBSCRIBE request to the contact. The 515 following is an example of such a request: 517 Example 10: SIP user subscribes to XMPP contact (F28) 519 | SUBSCRIBE sip:juliet@example.com SIP/2.0 520 | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk 521 | From: ;tag=xfg9 522 | Call-ID: AA5A8BE5-CBB7-42B9-8181-6230012B1E11 523 | Event: presence 524 | Max-Forwards: 70 525 | CSeq: 263 SUBSCRIBE 526 | Contact: 527 | Accept: application/pidf+xml 528 | Content-Length: 0 530 Notice that the "Expires" header was not included in the SUBSCRIBE 531 request; this means that the default value of 3600 (i.e., 3600 532 seconds = 1 hour) applies. 534 Upon receiving the SUBSCRIBE, the SIP server needs to determine the 535 identity of the domain portion of the Request-URI or To header, which 536 it does by following the procedures explained in Section 5 of 537 [I-D.ietf-stox-core]. If the domain is an XMPP domain, the SIP 538 server will hand off the SUBSCRIBE to an associated SIP-XMPP gateway 539 or connection manager that natively communicates with XMPP servers. 541 The SIP-XMPP gateway is then responsible for translating the 542 SUBSCRIBE into an XMPP subscription request addressed from the SIP 543 user to the XMPP user: 545 Example 11: XMPP transformation of SIP SUBSCRIBE (F30) 547 | 551 In accordance with [RFC6121], once it receives the stanza from the 552 XMPP-SIP gateway, the XMPP user's server MUST deliver the presence 553 subscription request to the XMPP user (or, if a subscription already 554 exists in the XMPP user's roster, the XMPP server SHOULD auto-reply 555 with a presence stanza of type 'subscribed'). 557 If the XMPP user approves the subscription request, the XMPP server 558 then MUST return a presence stanza of type "subscribed" addressed 559 from the XMPP user to the SIP user. The XMPP-SIP gateway is 560 responsible for translating the presence stanza of type "subscribed" 561 into a SIP 200 OK response. 563 If the XMPP user declines the subscription request, the XMPP server 564 then MUST return a presence stanza of type "unsubscribed" addressed 565 from the XMPP user to the SIP user and the XMPP-SIP gateway MUST 566 transform that stanza into an empty SIP NOTIFY message with a 567 Subscription-State of "terminated" and a reason of "rejected": 569 Example 12: Subscription request rejected 571 | NOTIFY sip:192.0.2.2 SIP/2.0 572 | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk 573 | From: ;tag=ur93 574 | To: ;tag=pq72 575 | Call-ID: AA5A8BE5-CBB7-42B9-8181-6230012B1E11 576 | Event: presence 577 | Subscription-State: terminated;reason=rejected 578 | Max-Forwards: 70 579 | CSeq: 232 NOTIFY 580 | Contact: 581 | Content-Type: application/pidf+xml 582 | Content-Length: 0 584 4.3.2. Refreshing a Presence Subscription 586 For as long as a SIP user is online and interested in receiving 587 presence notifications from the XMPP contact, the user's SIP user 588 agent is responsible for periodically refreshing the subscription by 589 sending an updated SUBSCRIBE request with an appropriate value for 590 the Expires header. In response, the presence-aware SIP-XMPP gateway 591 MUST send a SIP NOTIFY to the user agent (per [RFC6665]); if the 592 gateway has meaningful information about the availability state of 593 the XMPP user (e.g., obtained from the core presence session in the 594 XMPP server) then the NOTIFY MUST communicate that information (e.g., 595 by including a PIDF body [RFC3863] with the relevant data), whereas 596 if the gateway does not have meaningful information about the 597 availability state of the XMPP user then the NOTIFY MUST be empty as 598 allowed by [RFC6665]. 600 Once the SIP user ends its presence session, it is the responsibility 601 of the presence-aware SIP-XMPP gateway to properly handle the 602 difference between short-lived SIP presence subscriptions and long- 603 lived XMPP presence subscriptions. The gateway has two options when 604 the SIP user's subscription expires: 606 o Cancel the subscription (i.e., treat it as temporary) and send an 607 XMPP presence stanza of type "unsubscribe" to the XMPP contact; 608 this honors the SIP semantic but will seem strange to the XMPP 609 contact (since it will appear that the SIP user has cancelled a 610 long-lived subscription). 612 o Maintain the subscription (i.e., treat it as long-lived) and (1) 613 send a SIP NOTIFY request to the SIP user containing a PIDF 614 document specifying that the XMPP contact now has a basic status 615 of "closed", including a Subscription-State of "terminated" with a 616 reason of "timeout" and (2) send an XMPP presence stanza of type 617 "unavailable" to the XMPP contact; this violates the letter of the 618 SIP semantic but will seem more natural to the XMPP contact. 620 Which of these options a presence-aware SIP-XMPP gateway chooses is 621 up to the implementation. 623 If the implementation chooses the first option, the protocol 624 generated would be as follows: 626 Example 13: XMPP handling of temporary subscription expiry 628 | 632 If the implementation chooses the second option, the protocol 633 generated would be as follows: 635 Example 14: SIP handling of long-lived subscription expiry 637 | NOTIFY sip:192.0.2.2 SIP/2.0 638 | Via: SIP/2.0/TCP s2x.example.net;branch=z9hG4bKna998sk 639 | From: ;tag=ur93 640 | To: ;tag=pq72 641 | Call-ID: 2B44E147-3B53-45E4-9D48-C051F3216D14 642 | Event: presence 643 | Subscription-State: terminated;reason=timeout 644 | Max-Forwards: 70 645 | CSeq: 232 NOTIFY 646 | Contact: 647 | Content-Type: application/pidf+xml 648 | Content-Length: 194 649 | 650 | 651 | 653 | 654 | 655 | closed 656 | 657 | 658 | 659 Example 15: XMPP handling of long-lived subscription expiry 661 | 665 4.3.3. Cancelling a Presence Subscription 667 At any time, the SIP user can cancel the subscription by sending a 668 SUBSCRIBE message whose "Expires" header is set to a value of zero 669 ("0"): 671 Example 16: SIP user cancels subscription 673 | SUBSCRIBE sip:juliet@example.com SIP/2.0 674 | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk 675 | From: ;tag=yt66 676 | Call-ID: 717B1B84-F080-4F12-9F44-0EC1ADE767B9 677 | Event: presence 678 | Max-Forwards: 70 679 | CSeq: 8775 SUBSCRIBE 680 | Contact: 681 | Expires: 0 682 | Content-Length: 0 684 As above, upon receiving such a request, a presence-aware SIP-XMPP 685 gateway is responsible for doing one of the following: 687 o Cancel the subscription (i.e., treat it as temporary) and send an 688 XMPP presence stanza of type "unsubscribe" to the XMPP contact. 690 o Maintain the subscription (i.e., treat it as long-lived) and (1) 691 send a SIP NOTIFY request to the SIP user containing a PIDF 692 document specifying that the XMPP contact now has a basic status 693 of "closed", (2) send a SIP SUBSCRIBE request to the SIP user with 694 an "Expires" header set to a value of "0" (zero) when it receives 695 XMPP presence of type "unavailable" from the XMPP contact, and (3) 696 send an XMPP presence stanza of type "unavailable" to the XMPP 697 contact. 699 5. Notifications of Presence Information 701 5.1. Overview 703 Both XMPP and presence-aware SIP systems enable entities (often but 704 not necessarily human users) to send presence notifications to other 705 entities. At its most basic, the term "presence" refers to 706 information about an entity's "on/off" availability for communication 707 on a network. Often, this basic concept is supplemented by 708 information that further specifies the entity's context or status 709 while available for communication; these availability states commonly 710 include "away" and "do not disturb". Some systems and protocols 711 extend the concepts of presence and availability even further and 712 refer to any relatively ephemeral information about an entity as a 713 kind of presence; categories of such "extended presence" include 714 geographical location (e.g., GPS coordinates), user mood (e.g., 715 grumpy), user activity (e.g., walking), and ambient environment 716 (e.g., noisy). In this document, we focus on the "least common 717 denominator" of network availability only, although future documents 718 might address broader notions of presence, including availability 719 states and extended presence. 721 [RFC6121] defines how XMPP presence stanzas can indicate availability 722 (via absence of a 'type' attribute) or lack of availability (via a 723 'type' attribute with a value of "unavailable"). SIP presence using 724 a SIP event package for presence is specified in [RFC3856]. 726 As described in [RFC6121], XMPP presence information about an entity 727 is communicated by means of an XML stanza sent over an 728 XML stream. In this document we will assume that such a presence 729 stanza is sent from an XMPP client to an XMPP server over an XML 730 stream negotiated between the client and the server, and that the 731 client is controlled by a human user. In general, XMPP presence is 732 sent by the user to the user's server and then broadcast to all 733 entities who are subscribed to the user's presence information. 735 As described in [RFC3856], presence information about an entity is 736 communicated by means of a SIP NOTIFY event sent from a SIP user 737 agent to an intended recipient who is most generally referenced by an 738 Presence URI of the form but who might be 739 referenced by a SIP or SIPS URI of the form or 740 . 742 This document addresses basic presence or network availability only, 743 not the various extensions to SIP and XMPP for "rich presence", such 744 as [RFC4480], [XEP-0107], and [XEP-0108]. 746 5.2. XMPP to SIP 748 When Juliet interacts with her XMPP client to modify her presence 749 information (or when her client automatically updates her presence 750 information, e.g. via an "auto-away" feature), her client generates 751 an XMPP stanza. The syntax of the stanza, 752 including required and optional elements and attributes, is defined 753 in [RFC6121]. The following is an example of such a stanza: 755 Example 17: XMPP user sends presence notification 757 | 759 Upon receiving such a stanza, the XMPP server to which Juliet has 760 connected broadcasts it to all subscribers who are authorized to 761 receive presence notifications from Juliet (this is similar to the 762 SIP NOTIFY method). For each subscriber, broadcasting the presence 763 notification involves either delivering it to a local recipient (if 764 the hostname in the subscriber's address matches one of the hostnames 765 serviced by the XMPP server) or attempting to route it to the foreign 766 domain that services the hostname in the subscriber's address. Thus 767 the XMPP server needs to determine the identity of the domainpart in 768 the 'to' address, which it does by following the procedures discussed 769 in [I-D.ietf-stox-core]. If the domain is a SIP domain, the XMPP 770 server will hand off the presence stanza to an associated XMPP-SIP 771 gateway or connection manager that natively communicates with 772 presence-aware SIP servers (F2, no example shown). 774 The XMPP-SIP gateway is then responsible for translating the XMPP 775 presence stanza into a SIP NOTIFY request and included PIDF document 776 from the XMPP user to the SIP user. 778 Example 18: SIP transformation of XMPP presence notification 780 | NOTIFY sip:192.0.2.2 SIP/2.0 781 | Via: SIP/2.0/TCP x2s.example.com;branch=z9hG4bKna998sk 782 | From: ;tag=gh19 783 | To: ;tag=yt66 784 | Contact: ;gr=balcony 785 | Call-ID: 2B44E147-3B53-45E4-9D48-C051F3216D14 786 | Event: presence 787 | Subscription-State: active;expires=599 788 | Max-Forwards: 70 789 | CSeq: 157 NOTIFY 790 | Contact: 791 | Content-Type: application/pidf+xml 792 | Content-Length: 192 793 | 794 | 795 | 797 | 798 | 799 | open 800 | away 801 | 802 | 803 | 805 The mapping of XMPP syntax elements to SIP syntax elements SHOULD be 806 as shown in the following table. (Mappings for elements not 807 mentioned are undefined.) 808 Table 1: Presence syntax mapping from XMPP to SIP 810 +-----------------------------+---------------------------+ 811 | XMPP Element or Attribute | SIP Header or PIDF Data | 812 +-----------------------------+---------------------------+ 813 | stanza | "Event: presence" (1) | 814 +-----------------------------+---------------------------+ 815 | XMPP resource identifer | tuple 'id' attribute (2) | 816 +-----------------------------+---------------------------+ 817 | from | From | 818 +-----------------------------+---------------------------+ 819 | id | CSeq (3) | 820 +-----------------------------+---------------------------+ 821 | to | To | 822 +-----------------------------+---------------------------+ 823 | type | basic status (4) (5) | 824 +-----------------------------+---------------------------+ 825 | xml:lang | Content-Language | 826 +-----------------------------+---------------------------+ 827 | | priority for tuple (6) | 828 +-----------------------------+---------------------------+ 829 | | no mapping (7) | 830 +-----------------------------+---------------------------+ 831 | | | 832 +-----------------------------+---------------------------+ 834 Note the following regarding these mappings: 836 1. Only an XMPP presence stanza that lacks a 'type' attribute or 837 whose 'type' attribute has a value of "unavailable" SHOULD be 838 mapped by an XMPP-SIP gateway to a SIP NOTIFY request, since 839 those are the only presence stanzas that represent notifications. 841 2. The PIDF schema defines the tuple 'id' attribute as having a 842 datatype of "xs:ID"; because this datatype is more restrictive 843 than the "xs:string" datatype for XMPP resourceparts (in 844 particular, a number is not allowed as the first character of an 845 ID), it is RECOMMENDED to prepend the resourcepart with "ID-" or 846 some other alphabetic string when mapping from XMPP to SIP. 848 3. In practice, often XMPP presence stanzas do not include the 'id' 849 attribute. 851 4. Because the lack of a 'type' attribute indicates that an XMPP 852 entity is available for communications, the gateway SHOULD map 853 that information to a PIDF status of "open". Because a 854 'type' attribute with a value of "unavailable" indicates that an 855 XMPP entity is not available communications, the gateway SHOULD 856 map that information to a PIDF status of "closed". 858 5. When the XMPP-SIP gateway receives XMPP presence of type 859 "unavailable" from the XMPP contact, it SHOULD (1) send a SIP 860 NOTIFY request to the SIP user containing a PIDF document 861 specifying that the XMPP contact now has a basic status of 862 "closed" and (2) send a SIP SUBSCRIBE request to the SIP user 863 with an "Expires" header set to a value of "0" (zero). 865 6. The value of the XMPP element is an integer between 866 -128 and +127, whereas the the value of the PIDF 867 element's 'priority' attribute is a decimal number from zero to 868 one inclusive, with a maximum of three decimal places. If the 869 value of the XMPP element is negative, an XMPP-SIP 870 gateway MUST NOT map the value. If an XMPP-SIP gateway maps 871 positive values, it SHOULD treat XMPP priority 0 as PIDF priority 872 0 and XMPP priority 127 as PIDF priority 1, mapping intermediate 873 values appropriately so that they are unique (e.g., XMPP priority 874 1 to PIDF priority 0.007, XMPP priority 2 to PIDF priority 0.015, 875 and so on up through mapping XMPP priority 126 to PIDF priority 876 0.992; note that this is an example only, and that the exact 877 mapping is up to the implementation). 879 7. Some implementations support custom extensions to encapsulate 880 this information; however, there is no need to standardize a PIDF 881 extension for this purpose, since PIDF is already extensible and 882 thus the element can be included directly, qualified by 883 the 'jabber:client' namespace in the PIDF XML. The examples in 884 this document illustrate this usage, which is RECOMMENDED. The 885 most useful values are likely "away" and "dnd", although note 886 that the latter value merely means "busy" and does not imply that 887 a server or client ought to block incoming traffic while the user 888 is in that state. 890 8. Some implementations support custom extensions to encapsulate 891 detailed information about availability; however, there is no 892 need to standardize a PIDF extension for this purpose, since PIDF 893 is already extensible and thus the element (qualified by 894 the 'jabber:client' namespace) can be included directly in the 895 PIDF XML. The examples in this document illustrate this usage, 896 which is RECOMMENDED. The most useful values are likely "away" 897 and "dnd", although note that the latter value merely means 898 "busy" and does not imply that a server or client ought to block 899 incoming traffic while the user is in that state. Naturally, a 900 gateway can choose to translate a custom extension into an 901 established value of the element [RFC6121], or translate 902 a element into a custom extension that the gateway knows 903 is supported by the user agent of the intended recipient. 904 Unfortunately, this behavior does not guarantee that information 905 will not be lost; to help prevent information loss, a gateway 906 ought to include both the element and the custom 907 extension if the gateway cannot suitably translate the custom 908 value into a value. 910 5.3. SIP to XMPP 912 When Romeo changes his presence, his SIP user agent generates a SIP 913 NOTIFY request for any active subscriptions. The syntax of the 914 NOTIFY request is defined in [RFC3856]. The following is an example 915 of such a request: 917 Example 19: SIP user sends presence notification 919 | NOTIFY sip:192.0.2.1 SIP/2.0 920 | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk 921 | From: ;tag=yt66 922 | To: ;tag=bi54 923 | Contact: ;gr=orchard 924 | Call-ID: C33C6C9D-0F4A-42F9-B95C-7CE86B526B5B 925 | Event: presence 926 | Subscription-State: active;expires=499 927 | Max-Forwards: 70 928 | CSeq: 8775 NOTIFY 929 | Contact: 930 | Content-Type: application/pidf+xml 931 | Content-Length: 193 932 | 933 | 934 | 936 | 937 | 938 | closed 939 | 940 | 941 | 943 Upon receiving the NOTIFY, the SIP server needs to determine the 944 identity of the domain portion of the Request-URI or To header, which 945 it does by following the procedures discussed in 946 [I-D.ietf-stox-core]. If the domain is an XMPP domain, the SIP 947 server will hand off the SUBSCRIBE to an associated SIP-XMPP gateway 948 or connection manager that natively communicates with XMPP servers. 950 The SIP-XMPP gateway is then responsible for translating the NOTIFY 951 into an XMPP presence stanza addressed from the SIP user to the XMPP 952 user: 954 Example 20: XMPP transformation of SIP presence notification 956 | 960 The mapping of SIP syntax elements to XMPP syntax elements SHOULD be 961 as shown in the following table. (Mappings for elements not 962 mentioned are undefined.) 964 Table 2: Presence syntax mapping from SIP to XMPP 966 +---------------------------+-----------------------------+ 967 | SIP Header or PIDF Data | XMPP Element or Attribute | 968 +---------------------------+-----------------------------+ 969 | basic status | type (1) | 970 +---------------------------+-----------------------------+ 971 | Content-Language | xml:lang | 972 +---------------------------+-----------------------------+ 973 | CSeq | id (2) | 974 +---------------------------+-----------------------------+ 975 | From | from | 976 +---------------------------+-----------------------------+ 977 | priority for tuple | (3) | 978 +---------------------------+-----------------------------+ 979 | To | to | 980 +---------------------------+-----------------------------+ 981 | | | 982 +---------------------------+-----------------------------+ 983 | | (4) | 984 +---------------------------+-----------------------------+ 986 Note the following regarding these mappings: 988 1. A PIDF basic status of "open" SHOULD be mapped to no 'type' 989 attribute, and a PIDF basic status of "closed" SHOULD be mapped 990 to a 'type' attribute whose value is "unavailable". 992 2. This mapping is OPTIONAL. 994 3. See the notes following Table 1 of this document regarding 995 mapping of presence priority. 997 4. If a SIP implementation supports the element (qualified 998 by the 'jabber:client' namespace) as a PIDF extension for 999 availability status as described in the notes following Table 1 1000 of this document, the SIP-XMPP gateway is responsible for 1001 including that element in the XMPP presence notification. 1003 6. Requests for Presence Information 1005 Both SIP and XMPP provide methods for requesting presence information 1006 about another entity. 1008 6.1. XMPP to SIP 1010 In XMPP, a request for presence information is completed by sending a 1011 presence stanza of type "probe": 1013 Example 21: XMPP server sends presence probe on behalf of XMPP user 1015 | 1019 Note: As described in [RFC6121], presence probes are used by XMPP 1020 servers to request presence on behalf of XMPP users; XMPP clients are 1021 discouraged from sending presence probes since retrieving presence is 1022 a service that servers provide. 1024 An XMPP-SIP gateway would transform the presence probe into its SIP 1025 equivalent, which is a SUBSCRIBE request with an Expires header value 1026 of zero: 1028 Example 22: SIP transformation of XMPP presence probe 1030 | SUBSCRIBE sip:romeo@example.net SIP/2.0 1031 | Via: SIP/2.0/TCP x2s.example.com;branch=z9hG4bKna998sk 1032 | From: ;tag=ffd2 1033 | Call-ID: 5BCF940D-793D-43F8-8972-218F7F4EAA8C 1034 | Event: presence 1035 | Max-Forwards: 70 1036 | CSeq: 123 SUBSCRIBE 1037 | Contact: 1038 | Accept: application/pidf+xml 1039 | Expires: 0 1040 | Content-Length: 0 1042 As described in [RFC3856], this cancels any subscription but causes a 1043 NOTIFY to be sent to the subscriber, just as a presence probe does 1044 (the transformation rules for presence notifications have been 1045 previously described in this document). 1047 6.2. SIP to XMPP 1049 In SIP, a request for presence information is effectively completed 1050 by sending a SUBSCRIBE with an Expires header value of zero: 1052 Example 23: SIP user sends presence request 1054 | SUBSCRIBE sip:juliet@example.com SIP/2.0 1055 | Via: SIP/2.0/TCP simple.example.net;branch=z9hG4bKna998sk 1056 | From: ;tag=yt66 1057 | Call-ID: 717B1B84-F080-4F12-9F44-0EC1ADE767B9 1058 | Event: presence 1059 | Max-Forwards: 70 1060 | CSeq: 8775 SUBSCRIBE 1061 | Contact: 1062 | Expires: 0 1063 | Content-Length: 0 1065 When honoring the long-lived semantics of an XMPP presence 1066 subscription, a presence-aware SIP-XMPP gateway SHOULD translate such 1067 a SIP request into a presence stanza of type 'probe' if it does not 1068 already have presence information about the subscribee: 1070 Example 24: XMPP transformation of SIP presence request 1072 | 1076 7. IANA Considerations 1078 This document makes no requests of IANA. 1080 8. Security Considerations 1082 Detailed security considerations for presence protocols are given in 1083 [RFC2779], for SIP-based presence in [RFC3856] (see also [RFC3261]), 1084 and for XMPP-based presence in [RFC6121] (see also [RFC6120]). 1086 The mismatch between long-lived XMPP presence subscriptions and 1087 short-lived SIP presence subscriptions introduces the possibility of 1088 an amplification attack launched from the XMPP network against a SIP 1089 presence server (since each long-lived XMPP presence subscription 1090 would typically result in multiple subscription refresh requests on 1091 the SIP side of a gateway). Therefore, access to an XMPP-SIP gateway 1092 SHOULD be restricted in various ways; among other things, only an 1093 XMPP service that carefully controls account provisioning and 1094 provides effective methods for the administrators to control the 1095 behavior of registered users ought to host such a gateway (e.g., not 1096 a service that offers open account registration) and a gateway ought 1097 to be associated only with a single domain or trust realm (e.g., a 1098 gateway hosted at simple.example.com ought to allow only users within 1099 the example.com domain to access the gateway, not users within 1100 example.org, example.net, or any other domain). If a SIP presence 1101 server receives communications through an XMPP-SIP gateway from users 1102 who are not associated with a domain that is so related to the 1103 hostname of the gateway, it SHOULD (based on local service 1104 provisioning) refuse to service such users or refuse to receive 1105 traffic from with the gateway. As a futher check, whenever an XMPP- 1106 SIP gateway seeks to refresh an XMPP user's long-lived subscription 1107 to a SIP user's presence, it MUST first send an XMPP 1108 stanza of type "probe" from the address of the gateway to the "bare 1109 JID" (user@domain.tld) of the XMPP user, to which the user's XMPP 1110 server MUST respond in accordance with [RFC6121]; this puts an equal 1111 burden on the XMPP server as on the SIP server. 1113 9. References 1115 9.1. Normative References 1117 [I-D.ietf-stox-core] 1118 Saint-Andre, P., Houri, A., and J. Hildebrand, 1119 "Interworking between the Session Initiation Protocol 1120 (SIP) and the Extensible Messaging and Presence Protocol 1121 (XMPP): Core", draft-ietf-stox-core-09 (work in progress), 1122 December 2013. 1124 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1125 Requirement Levels", BCP 14, RFC 2119, March 1997. 1127 [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, 1128 A., Peterson, J., Sparks, R., Handley, M., and E. 1129 Schooler, "SIP: Session Initiation Protocol", RFC 3261, 1130 June 2002. 1132 [RFC3856] Rosenberg, J., "A Presence Event Package for the Session 1133 Initiation Protocol (SIP)", RFC 3856, August 2004. 1135 [RFC3863] Sugano, H., Fujimoto, S., Klyne, G., Bateman, A., Carr, 1136 W., and J. Peterson, "Presence Information Data Format 1137 (PIDF)", RFC 3863, August 2004. 1139 [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence 1140 Protocol (XMPP): Core", RFC 6120, March 2011. 1142 [RFC6121] Saint-Andre, P., "Extensible Messaging and Presence 1143 Protocol (XMPP): Instant Messaging and Presence", RFC 1144 6121, March 2011. 1146 [RFC6665] Roach, A., "SIP-Specific Event Notification", RFC 6665, 1147 July 2012. 1149 9.2. Informative References 1151 [I-D.ietf-simple-cpim-mapping] 1152 Rosenberg, J. and B. Campbell, "CPIM Mapping of SIMPLE 1153 Presence and Instant Messaging", draft-ietf-simple-cpim- 1154 mapping-01 (work in progress), June 2002. 1156 [RFC2778] Day, M., Rosenberg, J., and H. Sugano, "A Model for 1157 Presence and Instant Messaging", RFC 2778, February 2000. 1159 [RFC2779] Day, M., Aggarwal, S., and J. Vincent, "Instant Messaging 1160 / Presence Protocol Requirements", RFC 2779, February 1161 2000. 1163 [RFC3860] Peterson, J., "Common Profile for Instant Messaging 1164 (CPIM)", RFC 3860, August 2004. 1166 [RFC3922] Saint-Andre, P., "Mapping the Extensible Messaging and 1167 Presence Protocol (XMPP) to Common Presence and Instant 1168 Messaging (CPIM)", RFC 3922, October 2004. 1170 [RFC4480] Schulzrinne, H., Gurbani, V., Kyzivat, P., and J. 1171 Rosenberg, "RPID: Rich Presence Extensions to the Presence 1172 Information Data Format (PIDF)", RFC 4480, July 2006. 1174 [XEP-0107] 1175 Saint-Andre, P. and R. Meijer, "User Mood", XSF XEP 0107, 1176 October 2008. 1178 [XEP-0108] 1179 Meijer, R. and P. Saint-Andre, "User Activity", XSF XEP 1180 0108, October 2008. 1182 Appendix A. Acknowledgements 1184 The authors wish to thank the following individuals for their 1185 feedback: Chris Christou, Fabio Forno, Adrian Georgescu, Philipp 1186 Hancke, Saul Ibarra Corretge, Markus Isomaki, Olle Johansson, Paul 1187 Kyzivat, Salvatore Loreto, Michael Lundberg, Daniel-Constantin 1188 Mierla, and Tory Patnoe. 1190 Dave Crocker provided helpful and detailed feedback on behalf of the 1191 Applications Area Directorate. 1193 Ben Laurie performed a review on behalf of the Security Directorate, 1194 resulting in improvements to the security considerations. 1196 During IESG review, Pete Resnick caught several oversights in the 1197 document with regard to interoperability. 1199 The authors gratefully acknowledge the assistance of Markus Isomaki 1200 and Yana Stamcheva as the working group chairs and Gonzalo Camarillo 1201 as the sponsoring Area Director. 1203 Some text in this document was borrowed from [RFC3922]. 1205 Peter Saint-Andre wishes to acknowledge Cisco Systems, Inc., for 1206 supporting his work on earlier versions of this document while he was 1207 employed there. 1209 Authors' Addresses 1211 Peter Saint-Andre 1212 &yet 1214 Email: ietf@stpeter.im 1216 Avshalom Houri 1217 IBM 1218 Rorberg Building, Pekris 3 1219 Rehovot 76123 1220 Israel 1222 Email: avshalom@il.ibm.com 1224 Joe Hildebrand 1225 Cisco Systems, Inc. 1226 1899 Wynkoop Street, Suite 600 1227 Denver, CO 80202 1228 USA 1230 Email: jhildebr@cisco.com