idnits 2.17.1 draft-levy-sip-diversion-11.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** You're using the IETF Trust Provisions' Section 6.b License Notice from 12 Sep 2009 rather than the newer Notice from 28 Dec 2009. (See https://trustee.ietf.org/license-info/) 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 : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) ** There are 30 instances of too long lines in the document, the longest one being 5 characters in excess of 72. == There are 57 instances of lines with non-RFC2606-compliant FQDNs in the document. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 269 has weird spacing: '... where enc. ...' == Line 394 has weird spacing: '...cursing non-r...' == Line 560 has weird spacing: '...cursing non-r...' == Line 739 has weird spacing: '...cursing non-r...' == Line 923 has weird spacing: '...cursing non-r...' -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (February 2, 2010) is 5197 days in the past. Is this intentional? Checking references for intended status: Historic ---------------------------------------------------------------------------- -- Looks like a reference, but probably isn't: '1' on line 1548 -- Looks like a reference, but probably isn't: '2' on line 1560 -- Looks like a reference, but probably isn't: '3' on line 1571 -- Looks like a reference, but probably isn't: '4' on line 1586 -- Looks like a reference, but probably isn't: '5' on line 1600 -- Looks like a reference, but probably isn't: '6' on line 1608 -- Looks like a reference, but probably isn't: '7' on line 1621 -- Looks like a reference, but probably isn't: '8' on line 1630 -- Looks like a reference, but probably isn't: '9' on line 1642 -- Looks like a reference, but probably isn't: '10' on line 1651 -- Looks like a reference, but probably isn't: '11' on line 1663 -- Looks like a reference, but probably isn't: '12' on line 1674 == Unused Reference: 'RFC3261' is defined on line 2128, but no explicit reference was found in the text Summary: 3 errors (**), 0 flaws (~~), 8 warnings (==), 14 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group S. Levy 3 Internet-Draft Cisco Systems 4 Intended status: Historic M. Mohali, Ed. 5 Expires: August 6, 2010 Orange Labs 6 February 2, 2010 8 Diversion Indication in SIP 9 draft-levy-sip-diversion-11 11 Abstract 13 This RFC, which contains the text of an Internet Draft that was 14 submitted originally to the SIP Working Group, is being published now 15 for the historical record and to provide a reference for later 16 Informational RFCs. The original Abstract follows. 18 This document proposes an extension to the Session Initiation 19 Protocol (SIP). This extension provides the ability for the called 20 SIP user agent to identify from whom the call was diverted and why 21 the call was diverted. 22 The extension defines a general header, Diversion, which conveys the 23 diversion information from other SIP user agents and proxies to the 24 called user agent. 25 This extension allows enhanced support for various features, 26 including Unified Messaging, Third-Party Voicemail, and Automatic 27 Call Distribution (ACD). SIP user agents and SIP proxies which 28 receive diversion information may use this as supplemental 29 information for feature invocation decisions. 31 Requirements Language 33 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 34 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 35 document are to be interpreted as described in [RFC2119]. 37 Status of this Memo 39 This Internet-Draft is submitted to IETF in full conformance with the 40 provisions of BCP 78 and BCP 79. 42 Internet-Drafts are working documents of the Internet Engineering 43 Task Force (IETF), its areas, and its working groups. Note that 44 other groups may also distribute working documents as Internet- 45 Drafts. 47 Internet-Drafts are draft documents valid for a maximum of six months 48 and may be updated, replaced, or obsoleted by other documents at any 49 time. It is inappropriate to use Internet-Drafts as reference 50 material or to cite them other than as "work in progress." 52 The list of current Internet-Drafts can be accessed at 53 http://www.ietf.org/ietf/1id-abstracts.txt. 55 The list of Internet-Draft Shadow Directories can be accessed at 56 http://www.ietf.org/shadow.html. 58 This Internet-Draft will expire on August 6, 2010. 60 Copyright Notice 62 Copyright (c) 2010 IETF Trust and the persons identified as the 63 document authors. All rights reserved. 65 This document is subject to BCP 78 and the IETF Trust's Legal 66 Provisions Relating to IETF Documents 67 (http://trustee.ietf.org/license-info) in effect on the date of 68 publication of this document. Please review these documents 69 carefully, as they describe your rights and restrictions with respect 70 to this document. Code Components extracted from this document must 71 include Simplified BSD License text as described in Section 4.e of 72 the Trust Legal Provisions and are provided without warranty as 73 described in the BSD License. 75 Table of Contents 77 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 78 2. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 5 79 3. Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . 5 80 4. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 81 4.1. When is the Diversion header used? . . . . . . . . . . . . 6 82 5. Extension syntax . . . . . . . . . . . . . . . . . . . . . . . 6 83 6. Detailed semantics . . . . . . . . . . . . . . . . . . . . . . 7 84 6.1. UAS Behavior . . . . . . . . . . . . . . . . . . . . . . . 7 85 6.2. UAC Behavior . . . . . . . . . . . . . . . . . . . . . . . 7 86 6.3. Redirect Server Behavior . . . . . . . . . . . . . . . . . 7 87 6.4. Proxy Server Behavior . . . . . . . . . . . . . . . . . . 8 88 6.4.1. Proxy Logic for Diversion header . . . . . . . . . . . 8 89 7. Examples using Diversion header . . . . . . . . . . . . . . . 8 90 7.1. Call Forward Unconditional . . . . . . . . . . . . . . . . 9 91 7.1.1. Network Call Forward Unconditional, P2 recursing . . . 9 92 7.1.2. Network Call Forward Unconditional, P1 93 non-recursing P2 non-recursing . . . . . . . . . . . . 9 94 7.1.3. Network Call Forward Unconditional, P1 recursing 95 P2 non-recursing . . . . . . . . . . . . . . . . . . . 10 96 7.1.4. Endpoint Call Forward Unconditional, P1 recursing 97 P2 non-recursing . . . . . . . . . . . . . . . . . . . 11 98 7.2. Call Forward on Busy . . . . . . . . . . . . . . . . . . . 12 99 7.2.1. Network Call Forward on Busy, P2 recursing . . . . . . 12 100 7.2.2. Network Call Forward on Busy, P1 non-recursing P2 101 non-recursing . . . . . . . . . . . . . . . . . . . . 13 102 7.2.3. Network Call Forward on Busy, P1 recursing P2 103 non-recursing . . . . . . . . . . . . . . . . . . . . 14 104 7.2.4. Endpoint Call Forward on Busy, P1 recursing P2 105 non-recursing . . . . . . . . . . . . . . . . . . . . 15 106 7.3. Call Forward on No-Answer . . . . . . . . . . . . . . . . 16 107 7.3.1. Network Call Forward on No-Answer, P2 recursing . . . 17 108 7.3.2. Network Call Forward on No-Answer, P1 109 non-recursing P2 non-recursing . . . . . . . . . . . . 17 110 7.3.3. Network Call Forward on No Answer, P1 recursing P2 111 non-recursing . . . . . . . . . . . . . . . . . . . . 18 112 7.3.4. Endpoint Call Forward on No-Answer, P1 recursing, 113 P2 non-recursing B non-recursing . . . . . . . . . . . 19 114 7.4. Call Forward on Unavailable . . . . . . . . . . . . . . . 20 115 7.4.1. Network Call Forward on Unavailable, P2 recursing . . 21 116 7.4.2. Network Call Forward on Unavailable, P1 117 non-recursing P2 non-recursing . . . . . . . . . . . . 21 118 7.4.3. Network Call Forward on Unavailable, P1 recursing 119 P2 non-recursing . . . . . . . . . . . . . . . . . . . 23 120 7.5. Multiple Diversions . . . . . . . . . . . . . . . . . . . 23 121 7.5.1. Call Forward Unconditional and Call Forward Busy . . . 24 122 7.5.2. Call Forward Unconditional and Call Forward No 123 Answer . . . . . . . . . . . . . . . . . . . . . . . . 26 124 8. Security Considerations . . . . . . . . . . . . . . . . . . . 27 125 9. Further Examples . . . . . . . . . . . . . . . . . . . . . . . 27 126 9.1. Night Service/Automatic Call Distribution (ACD) using 127 Diversion header . . . . . . . . . . . . . . . . . . . . . 27 128 9.2. Voicemail Service using Diversion header . . . . . . . . . 35 129 9.3. Q&A on alternative approaches . . . . . . . . . . . . . . 39 130 10. Mapping ISUP/ISDN Redirection information to SIP Diversion 131 header . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 132 10.1. Mapping ISUP/ISDN Diversion Reason codes . . . . . . . . . 40 133 10.2. Mapping ISUP Redirection information to SIP Diversion 134 header . . . . . . . . . . . . . . . . . . . . . . . . . . 40 135 10.2.1. ISUP Definitions . . . . . . . . . . . . . . . . . . . 41 136 10.2.2. ISUP parameters . . . . . . . . . . . . . . . . . . . 41 137 10.2.3. ISUP to SIP translation . . . . . . . . . . . . . . . 42 138 10.2.4. SIP to ISUP translation . . . . . . . . . . . . . . . 42 139 10.2.5. Example of ISUP to SIP translation . . . . . . . . . . 42 140 10.2.6. Example of SIP to ISUP translation . . . . . . . . . . 43 141 10.3. Mapping ISDN Redirection information to SIP Diversion 142 header . . . . . . . . . . . . . . . . . . . . . . . . . . 44 143 10.3.1. ISDN Definitions . . . . . . . . . . . . . . . . . . . 44 144 10.3.2. ISDN parameters . . . . . . . . . . . . . . . . . . . 44 145 10.3.3. ISDN to SIP translation . . . . . . . . . . . . . . . 45 146 10.3.4. SIP to ISDN translation . . . . . . . . . . . . . . . 46 147 10.3.5. Example of ISDN to SIP translation . . . . . . . . . . 46 148 10.3.6. Example of SIP to ISDN translation . . . . . . . . . . 47 149 10.4. Information loss in SIP to ISUP/ISDN translation . . . . . 48 150 10.4.1. Loss of diversion URI information . . . . . . . . . . 48 151 10.4.2. Loss of diversion reason information . . . . . . . . . 48 152 10.4.3. Loss of diversion counter information . . . . . . . . 49 153 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 49 154 12. Acknowlegements . . . . . . . . . . . . . . . . . . . . . . . 49 155 13. Normative References . . . . . . . . . . . . . . . . . . . . . 49 156 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 49 158 1. Introduction 160 This RFC, which contains the text of an Internet Draft that was 161 submitted originally to the SIP Working Group, is being published now 162 for the historical record and to provide a reference for later 163 Informational RFCs. 165 In the legacy telephony network, redirection information is passed 166 through the network in ISDN/ISUP signaling messages. This 167 information is used by various service providers and business 168 applications to support enhanced features for the end user. 169 An analogous mechanism of providing redirection information would 170 enable such enhanced features for SIP users. 171 The Diversion header allows implementation of feature logic based on 172 from whom the call was diverted. 173 Version 06 (and forward) of the draft adds support for privacy and 174 screening information. 176 2. Definitions 178 diversion: 179 A change to the ultimate destination endpoint of a request. A change 180 in the Request-URI of a request that was not caused by a routing 181 decision. This is also sometimes called a deflection or redirection. 182 A diversion can occur when the "user" portion of the Request-URI is 183 changed for a reason other than expansion or translation. 184 A diversion can occur when only the "host" portion of the Request-URI 185 has changed if the change was due to a non-routing decision. 187 divertor: 188 The entity which diverted the call. 190 recursing: 191 A SIP proxy or user agent which handles a received or internally 192 generated 3xx response by forking new request(s) itself. 194 non-recursing: 195 A SIP proxy or user agent which handles a received or internally 196 generated 3xx response by forwarding it upstream. 198 3. Abbreviations 200 CFUNC: Call Forward Unconditional 201 CFTOD: Call Forward Time-of-Day 202 CFB: Call Forward on Busy 203 CFNA: Call Forward on No Answer 204 CFUNV: Call Forward Unavailable 205 ACD: Automatic Call Distribution 207 4. Overview 209 In order to implement certain third-party features such as third- 210 party voicemail and Automatic Call Distribution (ACD) applications, 211 diversion information needs to be given to the called third-party so 212 that he may respond to the caller intelligently. 213 In these situations, the party receiving a diverted call needs 214 answers for two questions: 215 Question 1: From whom was the request diverted? 216 Question 2: Why was the request diverted? 218 This document proposes usage of the Diversion header to answer these 219 questions for the party receiving the diverted call. 220 Insertion of the previous Request-URI (before the diversion occurred) 221 into the Diversion header answers question 1. 222 Insertion of the "reason" tag into the Diversion header (by the 223 divertor) answers question 2. 225 4.1. When is the Diversion header used? 227 The Diversion header SHOULD be added when a SIP proxy server, SIP 228 redirect server, or SIP user agent changes the ultimate endpoint 229 which will receive the call. 230 Diversion information SHOULD NOT be added for normal call routing 231 changes to the Request-URI. Thus, the Diversion header is not added 232 when features such as speed dial change the Request-URI. 233 When a diversion occurs, a Diversion header SHOULD be added to the 234 forwarded request or forwarded 3xx response. The Diversion header 235 MUST contain the Request-URI of the request prior to the diversion. 236 The Diversion header SHOULD contain a reason that the diversion 237 occurred. 238 Existing Diversion headers received in an incoming request MUST NOT 239 be removed or changed in forwarded requests. 240 Existing Diversion headers received in an incoming response MUST NOT 241 be removed or changed in the forwarded response. 242 A Diversion header is added when features such as call forwarding or 243 call deflection change the Request-URI. 245 5. Extension syntax 247 The syntax of the Diversion header is: 249 Diversion = "Diversion" ":" 1# (name-addr *( ";" diversion_params )) 250 diversion-params = diversion-reason | diversion-counter | 251 diversion-limit | diversion-privacy | 252 diversion-screen | diversion-extension 253 diversion-reason = "reason" "=" 254 ( "unknown" | "user-busy" | "no-answer" | 255 "unavailable" | "unconditional" | 256 "time-of-day" | "do-not-disturb" | 257 "deflection" | "follow-me" | 258 "out-of-service" | "away" | 259 token | quoted-string ) 260 diversion-counter = "counter" "=" 1*2DIGIT 261 diversion-limit = "limit" "=" 1*2DIGIT 262 diversion-privacy = "privacy" "=" ( "full" | "name" | 263 "uri" | "off" | token | quoted-string ) 264 diversion-screen = "screen" "=" ( "yes" | "no" | token | 265 quoted-string ) 266 diversion-extension = token ["=" (token | quoted-string)] 267 The following is an extension of tables 4 and 5 in [RFC3261]for the 268 Diversion header: 269 where enc. e-e ACK BYE CAN INV OPT REG 270 _____________________________________________________________ 271 Diversion R h - - - o - - 272 Diversion 3xx h - - - o - - 274 6. Detailed semantics 276 6.1. UAS Behavior 278 A SIP UAS which receives a request and returns a 3xx SHOULD add a 279 Diversion header containing the previous Request-URI and the reason 280 for the diversion. 282 6.2. UAC Behavior 284 A SIP UAC which receives a 3xx containing a Diversion header SHOULD 285 copy the Diversion header into each downstream forked request which 286 resulted from the 3xx. 288 6.3. Redirect Server Behavior 290 A SIP redirect server which receives a request and returns a 3xx 291 containing a Contact which diverts the request to a different 292 endpoint SHOULD add a Diversion header containing the Request-URI 293 from the incoming request and the reason for the diversion. 295 6.4. Proxy Server Behavior 297 A non-recursing SIP proxy which receives a 3xx containing a Diversion 298 header SHOULD forward the 3xx containing the Diversion header 299 upstream unchanged. 300 A SIP proxy which receives a request and invokes a feature which 301 changes the Request-URI of the forwarded request in order to divert 302 the request to a different endpoint SHOULD add a Diversion header 303 containing the Request-URI from the incoming request and the reason 304 for the diversion. 305 A SIP proxy which receives a request and returns a 3xx containing a 306 Contact which diverts the request to a different endpoint SHOULD add 307 a Diversion header containing the Request-URI from the incoming 308 request and the reason for the diversion. 310 6.4.1. Proxy Logic for Diversion header 311 if (pdu.is_request()) { 312 if (request-URI is changed due to a called feature) { 313 if (proxy.is_recursing()) { 314 Add the Diversion header (indicating the reason 315 that the call has been diverted) to 316 the downstream forwarded request(s). 317 } else { 318 Add the Diversion header (indicating the reason 319 that the call has been diverted) to 320 the upstream forwarded 3xx response. 321 } 322 } 323 } else if (pdu.is_response()) { 324 if (pdu.is_3xx()) { 325 if (proxy.is_recursing()) { 326 Copy Diversion header into forwarded INVITE(s). 327 } else { 328 Forward response upstream. 329 } 330 } 331 } 333 7. Examples using Diversion header 335 There are several implementations of call forwarding features that 336 can be implemented by either recursing or non-recursing SIP proxies 337 or SIP user agents. 338 A SIP proxy or user agent which generates or forwards 3xx's upstream 339 is non-recursing. A SIP proxy or user agent which handles received 340 (or internally generated) 3xx's itself is recursing. 341 The following examples illustrate usage of the Diversion header for 342 some of the variants of recursing and non-recursing proxies and user 343 agents. 345 7.1. Call Forward Unconditional 347 Usage of the Diversion header is shown below for several variant 348 implementations of Call Forward Unconditional. 350 7.1.1. Network Call Forward Unconditional, P2 recursing 352 In this message flow, the call would normally be routed to Bob@B. 353 However, Proxy 2 (P2) recursively implements Call Forward 354 Unconditional (CFUNC) to Carol@C. 355 +------------------------+ 356 | Bob@P2: CFUNC->Carol@C | 357 +------+-----------------+ 358 \ 359 \ 360 A P1 P2 B C 361 recursing 362 | | | | | 363 |--INV Bob@P1->| | | | 364 | | | | | 365 | |--INV Bob@P2->| | | 366 | | | | | 367 | | |--INVITE Carol@C------->| 368 | | | Diversion: Bob@P2 | 369 | | | ;reason=unconditional 370 | | | | | 371 | | |<-200-------------------| 372 | | | | | 373 | |<-200---------| | | 374 | | | | | 375 |<-200---------| | | | 376 | | | | | 377 |--ACK------------------------------------------------>| 378 | | | | | 379 | | | | | 381 7.1.2. Network Call Forward Unconditional, P1 non-recursing P2 non- 382 recursing 384 In this message flow, Proxy 2 (P2) non-recursively implements Call 385 Forward Unconditional (CFUNC) to Carol@C. Proxy 1 (P1) is non- 386 recursing. 388 +------------------------+ 389 | Bob@P2: CFUNC->Carol@C | 390 +------+-----------------+ 391 \ 392 \ 393 A P1 P2 B C 394 non-recursing non-recursing 395 | | | | | 396 |--INV Bob@P1->| | | | 397 | | | | | 398 | |--INV Bob@P2->| | | 399 | | | | | 400 | |<-302---------| | | 401 | | Contact: Carol@C | | 402 | | Diversion: Bob@P2 | | 403 | | ;reason=unconditional | | 404 | | | | | 405 | |--ACK-------->| | | 406 | | | | | 407 |<-302---------| | | | 408 | Contact: Carol@C | | | 409 | Diversion: Bob@P2 | | | 410 | ;reason=unconditional | | | 411 | | | | | 412 |--ACK-------->| | | | 413 | | | | | 414 |--INVITE Carol@C------------------------------------->| 415 | Diversion: Bob@P2 | | | 416 | ;reason=unconditional | | | 417 | | | | | 418 |<-200-------------------------------------------------| 419 | | | | | 420 |--ACK------------------------------------------------>| 421 | | | | | 422 | | | | | 424 7.1.3. Network Call Forward Unconditional, P1 recursing P2 non- 425 recursing 427 In this message flow, Proxy 2 (P2) non-recursively implements Call 428 Forward Unconditional (CFUNC) to Carol@C. Proxy 1 (P1) is recursing. 430 +------------------------+ 431 | Bob@P2: CFUNC->Carol@C | 432 +------+-----------------+ 433 \ 434 \ 435 A P1 P2 B C 436 recursing non-recursing 437 | | | | | 438 |--INV Bob@P1->| | | | 439 | | | | | 440 | |--INV Bob@P2->| | | 441 | | | | | 442 | |<-302---------| | | 443 | | Contact: Carol@C | | 444 | | Diversion: Bob@P2 | | 445 | | ;reason=unconditional | | 446 | | | | | 447 | |--ACK-------->| | | 448 | | | | | 449 | |--INVITE Carol@C---------------------->| 450 | | Diversion: Bob@P2 | | 451 | | ;reason=unconditional | | 452 | | | | | 453 | |<-200----------------------------------| 454 | | | | | 455 |<-200---------| | | | 456 | | | | | 457 |--ACK------------------------------------------------>| 458 | | | | | 459 | | | | | 461 7.1.4. Endpoint Call Forward Unconditional, P1 recursing P2 non- 462 recursing 464 In this message flow, user agent server B (B) non-recursively 465 implements Call Forward Unconditional (CFUNC) to Carol@C. Proxy 2 466 (P2) is non-recursing. Proxy 1 (P1) is recursing. 468 +-----------------------+ 469 | Bob@B: CFUNC->Carol@C | 470 +------+----------------+ 471 \ 472 \ 473 A P1 P2 B C 474 recursing non-recursing 475 | | | | | 476 |--INV Bob@P1->| | | | 477 | | | | | 478 | |--INV Bob@P2->| | | 479 | | |--INV Bob@B--->| | 480 | | | | | 481 | | |<-302----------| | 482 | | | Contact: Carol@C | 483 | | | Diversion: Bob@B | 484 | | | ;reason=unconditional 485 | | | | | 486 | | |--ACK--------->| | 487 | | | | | 488 | |<-302---------| | | 489 | | Contact: Carol@C | | 490 | | Diversion: Bob@B | | 491 | | ;reason=unconditional | | 492 | | | | | 493 | |--ACK-------->| | | 494 | | | | | 495 | |--INVITE Carol@C------------------------>| 496 | | Diversion: Bob@B | | 497 | | ;reason=unconditional | | 498 | | | | | 499 | |<-200------------------------------------| 500 | | | | | 501 |<-200---------| | | | 502 | | | | | 503 |--ACK-------------------------------------------------->| 504 | | | | | 505 | | | | | 507 7.2. Call Forward on Busy 509 Usage of the Diversion header is shown below for several variant 510 implementations of Call Forward on Busy. 512 7.2.1. Network Call Forward on Busy, P2 recursing 514 In this message flow, Proxy 2 (P2) recursively implements Call 515 Forward on Busy (CFB) to Carol@C. 517 +----------------------+ 518 | Bob@P2: CFB->Carol@C | 519 +------+---------------+ 520 \ 521 \ 522 A P1 P2 B C 523 recursing 524 | | | | | 525 |--INV Bob@P1->| | | | 526 | | | | | 527 | |--INV Bob@P2->| | | 528 | | | | | 529 | | |--INV Bob@B->| | 530 | | | | | 531 | | |<-486--------| | 532 | | | | | 533 | | |--ACK------->| | 534 | | | | | 535 | | |--INVITE Carol@C------->| 536 | | | Diversion: Bob@P2 | 537 | | | ;reason=user-busy | 538 | | | | | 539 | | |<-200-------------------| 540 | | | | | 541 | |<-200---------| | | 542 | | | | | 543 |<-200---------| | | | 544 | | | | | 545 |--ACK------------------------------------------------>| 546 | | | | | 547 | | | | | 549 7.2.2. Network Call Forward on Busy, P1 non-recursing P2 non-recursing 551 In this message flow, Proxy 2 (P2) non-recursively implements Call 552 Forward on Busy (CFB) to Carol@C. Proxy 1 (P1) is non-recursing. 554 +----------------------+ 555 | Bob@P2: CFB->Carol@C | 556 +------+---------------+ 557 \ 558 \ 559 A P1 P2 B C 560 non-recursing non-recursing 561 | | | | | 562 |--INV Bob@P1->| | | | 563 | | | | | 564 | |--INV Bob@P2->| | | 565 | | | | | 566 | | |--INV Bob@B->| | 567 | | | | | 568 | | |<-486--------| | 569 | | | | | 570 | | |--ACK------->| | 571 | | | | | 572 | |<-302---------| | | 573 | | Contact: Carol@C | | 574 | | Diversion: Bob@P2 | | 575 | | ;reason=user-busy | | 576 | | | | | 577 | |--ACK-------->| | | 578 | | | | | 579 |<-302---------| | | | 580 | Contact: Carol@C | | | 581 | Diversion: Bob@P2 | | | 582 | ;reason=user-busy | | | 583 | | | | | 584 |--ACK-------->| | | | 585 | | | | | 586 |--INVITE Carol@C------------------------------------->| 587 | Diversion: Bob@P2 | | | 588 | ;reason=user-busy | | | 589 | | | | | 590 |<-200-------------------------------------------------| 591 | | | | | 592 |--ACK------------------------------------------------>| 593 | | | | | 594 | | | | | 596 7.2.3. Network Call Forward on Busy, P1 recursing P2 non-recursing 598 In this message flow, Proxy 2 (P2) non-recursively implements Call 599 Forward on Busy (CFB) to Carol@C. Proxy 1 (P1) is recursing. 601 +----------------------+ 602 | Bob@P2: CFB->Carol@C | 603 +------+---------------+ 604 \ 605 \ 606 A P1 P2 B C 607 recursing non-recursing 608 | | | | | 609 |--INV Bob@P1->| | | | 610 | | | | | 611 | |--INV Bob@P2->| | | 612 | | | | | 613 | | |--INV Bob@B->| | 614 | | | | | 615 | | |<-486--------| | 616 | | | | | 617 | | |--ACK------->| | 618 | | | | | 619 | |<-302---------| | | 620 | | Contact: Carol@C | | 621 | | Diversion: Bob@P2 | | 622 | | ;reason=user-busy | | 623 | | | | | 624 | |--ACK-------->| | | 625 | | | | | 626 | |--INVITE Carol@C---------------------->| 627 | | Diversion: Bob@P2 | | 628 | | ;reason=user-busy | | 629 | | | | | 630 | |<-200----------------------------------| 631 | | | | | 632 |<-200---------| | | | 633 | | | | | 634 |--ACK------------------------------------------------>| 635 | | | | | 636 | | | | | 638 7.2.4. Endpoint Call Forward on Busy, P1 recursing P2 non-recursing 640 In this message flow, user agent server B (B) non-recursively 641 implements Call Forward on Busy (CFB) to Carol@C. Proxy 2 (P2) is 642 non-recursing. Proxy 1 (P1) is recursing. 644 +---------------------+ 645 | Bob@B: CFB->Carol@C | 646 +------+--------------+ 647 \ 648 \ 649 A P1 P2 B C 650 recursing non-recursing 651 | | | | | 652 |--INV Bob@P1->| | | | 653 | | | | | 654 | |--INV Bob@P2->| | | 655 | | | | | 656 | | |--INV Bob@B->| | 657 | | | | | 658 | | |<-302--------| | 659 | | | Contact: Carol@C | 660 | | | Diversion: Bob@B | 661 | | | ;reason=user-busy | 662 | | | | | 663 | | |--ACK------->| | 664 | | | | | 665 | |<-302---------| | | 666 | | Contact: Carol@C | | 667 | | Diversion: Bob@B | | 668 | | ;reason=user-busy | | 669 | | | | | 670 | |--ACK-------->| | | 671 | | | | | 672 | |--INVITE Carol@C---------------------->| 673 | | Diversion: Bob@B | | 674 | | ;reason-user-busy | | 675 | | | | | 676 | |<-200----------------------------------| 677 | | | | | 678 |<-200---------| | | | 679 | | | | | 680 |--ACK------------------------------------------------>| 681 | | | | | 682 | | | | | 684 7.3. Call Forward on No-Answer 686 Usage of the Diversion header is shown below for several variant 687 implementations of Call Forward on No-Answer. 689 7.3.1. Network Call Forward on No-Answer, P2 recursing 691 In this message flow, Proxy 2 (P2) recursively implements Call 692 Forward on No Answer (CFNA) to Carol@C. 693 +-----------------------+ 694 | Bob@P2: CFNA->Carol@C | 695 +------+----------------+ 696 \ 697 \ 698 A P1 P2 B C 699 recursing 700 | | | | | 701 |--INV Bob@P1->| | | | 702 | | | | | 703 | |--INV Bob@P2->| | | 704 | | | | | 705 | | |--INV Bob@B->| | 706 | | | | | 707 | | |<-180--------| | 708 | | | | | 709 | | | | | 710 | | | | | 711 | | timeout | | 712 | | |--INVITE Carol@C------->| 713 | | | Diversion: Bob@P2 | 714 | | | ;reason=no-answer | 715 | | | | | 716 | | |<-200-------------------| 717 | | | | | 718 | |<-200---------| | | 719 | | | | | 720 |<-200---------| | | | 721 | | | | | 722 |--ACK------------------------------------------------>| 723 | | | | | 724 | | | | | 726 7.3.2. Network Call Forward on No-Answer, P1 non-recursing P2 non- 727 recursing 729 In this message flow, Proxy 2 (P2) non-recursively implements Call 730 Forward on No Answer (CFNA) to Carol@C. Proxy 1 (P1) is non- 731 recursing. 733 +-----------------------+ 734 | Bob@P2: CFNA->Carol@C | 735 +------+----------------+ 736 \ 737 \ 738 A P1 P2 B C 739 non-recursing non-recursing 740 | | | | | 741 |--INV Bob@P1->| | | | 742 | | | | | 743 | |--INV Bob@P2->| | | 744 | | | | | 745 | | |--INV Bob@B->| | 746 | | | | | 747 | | |<-180--------| | 748 | | | | | 749 | | | | | 750 | | | | | 751 | | timeout | | 752 | |<-302---------| | | 753 | | Contact: Carol@C | | 754 | | Diversion: Bob@P2 | | 755 | | ;reason=no-answer | | 756 | | | | | 757 | |--ACK-------->| | | 758 | | | | | 759 |<-302---------| | | | 760 | Contact: Carol@C | | | 761 | Diversion: Bob@P2 | | | 762 | ;reason=no-answer | | | 763 | | | | | 764 |--ACK-------->| | | | 765 | | | | | 766 |--INVITE Carol@C------------------------------------->| 767 | Diversion: Bob@P2 | | | 768 | ;reason=no-answer | | | 769 | | | | | 770 |<-200-------------------------------------------------| 771 | | | | | 772 |--ACK------------------------------------------------>| 773 | | | | | 774 | | | | | 776 7.3.3. Network Call Forward on No Answer, P1 recursing P2 non-recursing 778 In this message flow, Proxy 2 (P2) non-recursively implements Call 779 Forward on No Answer (CFNA) to Carol@C. Proxy 1 (P1) is recursing. 781 +-----------------------+ 782 | Bob@P2: CFNA->Carol@C | 783 +------+----------------+ 784 \ 785 \ 786 A P1 P2 B C 787 recursing non-recursing 788 | | | | | 789 |--INV Bob@P1->| | | | 790 | | | | | 791 | |--INV Bob@P2->| | | 792 | | | | | 793 | | |--INV Bob@B->| | 794 | | | | | 795 | | |<-180--------| | 796 | | | | | 797 | | | | | 798 | | | | | 799 | | timeout | | 800 | |<-302---------| | | 801 | | Contact: Carol@C | | 802 | | Diversion: Bob@P2 | | 803 | | ;reason=no-answer | | 804 | | | | | 805 | |--ACK-------->| | | 806 | | | | | 807 | |--INVITE Carol@C---------------------->| 808 | | Diversion: Bob@P2 | | 809 | | ;reason=no-answer | | 810 | | | | | 811 | |<-200----------------------------------| 812 | | | | | 813 |<-200---------| | | | 814 | | | | | 815 |--ACK------------------------------------------------>| 816 | | | | | 817 | | | | | 819 7.3.4. Endpoint Call Forward on No-Answer, P1 recursing, P2 non- 820 recursing B non-recursing 822 In this message flow, user agent server B (B) non-recursively 823 implements Call Forward on No Answer (CFNA) to Carol@C. Proxy 2 (P2) 824 is non-recursing. Proxy 1 (P1) is recursing. 826 +----------------------+ 827 | Bob@B: CFNA->Carol@C | 828 +------+---------------+ 829 \ 830 \ 831 A P1 P2 B C 832 recursing non-recursing 833 | | | | | 834 |--INV Bob@P1->| | | | 835 | | | | | 836 | |--INV Bob@P2->| | | 837 | | | | | 838 | | |--INV Bob@B->| | 839 | | | | | 840 | | | | | 841 | | | | | 842 | | | timeout | 843 | | |<-302--------| | 844 | | | Contact: Carol@C | 845 | | | Diversion: Bob@B | 846 | | | ;reason=no-answer | 847 | | | | | 848 | | |--ACK------->| | 849 | | | | | 850 | |<-302---------| | | 851 | | Contact: Carol@C | | 852 | | Diversion: Bob@B | | 853 | | ;reason=no-answer | | 854 | | | | | 855 | |--ACK-------->| | | 856 | | | | | 857 | |--INVITE Carol@C---------------------->| 858 | | Diversion: Bob@B | | 859 | | ;reason-no-answer | | 860 | | | | | 861 | |<-200----------------------------------| 862 | | | | | 863 |<-200---------| | | | 864 | | | | | 865 |--ACK------------------------------------------------>| 866 | | | | | 867 | | | | | 869 7.4. Call Forward on Unavailable 871 Usage of the Diversion header is shown below for several variant 872 implementations of Call Forward on Unavailable. 874 7.4.1. Network Call Forward on Unavailable, P2 recursing 876 In this message flow, Proxy 2 (P2) recursively implements Call 877 Forward on Unavailable (CFUNV) to Carol@C. 878 +------------------------+ 879 | Bob@P2: CFUNV->Carol@C | 880 +------+-----------------+ 881 \ 882 \ 883 A P1 P2 B C 884 recursing 885 | | | | | 886 |--INV Bob@P1->| | | | 887 |<-100---------| | | | 888 | |--INV Bob@P2->| | | 889 | |<-100---------| | | 890 | | |--INV Bob@B->| | 891 | | |--INV Bob@B->| | 892 | | |--INV Bob@B->| | 893 | | | ... | | 894 | | |--INV Bob@B->| | 895 | | timeout | | 896 | | |--INVITE Carol@C------->| 897 | | | Diversion: Bob@P2 | 898 | | | ;reason=unavailable 899 | | | | | 900 | | |<-200-------------------| 901 | | | | | 902 | |<-200---------| | | 903 | | | | | 904 |<-200---------| | | | 905 | | | | | 906 |--ACK------------------------------------------------>| 907 | | | | | 908 | | | | | 910 7.4.2. Network Call Forward on Unavailable, P1 non-recursing P2 non- 911 recursing 913 In this message flow, Proxy 2 (P2) non-recursively implements Call 914 Forward on Unavailable (CFUNV) to Carol@C. Proxy 1 (P1) is non- 915 recursing. 917 +------------------------+ 918 | Bob@P2: CFUNV->Carol@C | 919 +------+-----------------+ 920 \ 921 \ 922 A P1 P2 B C 923 non-recursing non-recursing 924 | | | | | 925 |--INV Bob@P1->| | | | 926 | | | | | 927 | |--INV Bob@P2->| | | 928 | | | | | 929 | |<-100---------| | | 930 | | | | | 931 |<-100---------| | | | 932 | | |--INV Bob@B->| | 933 | | |--INV Bob@B->| | 934 | | |--INV Bob@B->| | 935 | | | ... | | 936 | | |--INV Bob@B->| | 937 | | timeout | | 938 | |<-302---------| | | 939 | | Contact: Carol@C | | 940 | | Diversion: Bob@P2 | | 941 | | ;reason=unavailable | | 942 | | | | | 943 | |--ACK-------->| | | 944 | | | | | 945 |<-302---------| | | | 946 | Contact: Carol@C | | | 947 | Diversion: Bob@P2 | | | 948 | ;reason=unavailable | | | 949 | | | | | 950 |--ACK-------->| | | | 951 | | | | | 952 |--INVITE Carol@C------------------------------------->| 953 | Diversion: Bob@P2 | | | 954 | ;reason=unavailable | | | 955 | | | | | 956 |<-200-------------------------------------------------| 957 | | | | | 958 |--ACK------------------------------------------------>| 959 | | | | | 960 | | | | | 962 7.4.3. Network Call Forward on Unavailable, P1 recursing P2 non- 963 recursing 965 In this message flow, Proxy 2 (P2) non-recursively implements Call 966 Forward on Unavailable (CFUNV) to Carol@C. Proxy 1 (P1) is recursing. 967 +------------------------+ 968 | Bob@P2: CFUNV->Carol@C | 969 +------+-----------------+ 970 \ 971 \ 972 A P1 P2 B C 973 recursing non-recursing 974 | | | | | 975 |--INV Bob@P1->| | | | 976 |<-100---------| | | | 977 | |--INV Bob@P2->| | | 978 | |<-100---------| | | 979 | | |--INV Bob@B->| | 980 | | |--INV Bob@B->| | 981 | | |--INV Bob@B->| | 982 | | | ... | | 983 | | |--INV Bob@B->| | 984 | | timeout | | 985 | |<-302---------| | | 986 | | Contact: Carol@C | | 987 | | Diversion: Bob@P2 | | 988 | | ;reason=unavailable | | 989 | | | | | 990 | |--ACK-------->| | | 991 | | | | | 992 | |--INVITE Carol@C---------------------->| 993 | | Diversion: Bob@P2 | | 994 | | ;reason=unavailable | | 995 | | | | | 996 | |<-200----------------------------------| 997 | | | | | 998 |<-200---------| | | | 999 | | | | | 1000 |--ACK------------------------------------------------>| 1001 | | | | | 1002 | | | | | 1004 7.5. Multiple Diversions 1006 Usage of the Diversion header when multiple diversions occur are 1007 shown the following two examples. 1009 7.5.1. Call Forward Unconditional and Call Forward Busy 1011 In this message flow, Proxy 2 (P2) implements Call Forward 1012 Unconditional (CFUNC) to Carol@C. C then implements Call Forward on 1013 Busy (CFB) to 5551234@D. P2 is non-recursing. P1 is recursing. C is 1014 non-recursing. 1016 +------------------------+ +-------------------------+ 1017 | Bob@P2: CFUNC->Carol@C | | Carol@C: CFB->5551234@D | 1018 +---------------+--------+ +--------+----------------+ 1019 \ \ 1020 \ \ 1021 A P1 P2 B C D 1022 recursing non-recursing non-recursing 1023 | | | | | | 1024 |--INV Bob@P1->| | | | | 1025 | | | | | | 1026 | |--INV Bob@P2->| | | | 1027 | | | | | | 1028 | |<-302---------| | | | 1029 | | Contact: Carol@C | | | 1030 | | Diversion: Bob@P2 | | | 1031 | | ;reason=unconditional | | | 1032 | | | | | | 1033 | |--ACK-------->| | | | 1034 | | | | | | 1035 | |--INVITE Carol@C---------------------->| | 1036 | | Diversion: Bob@P2 | | | 1037 | | ;reason=unconditional | | | 1038 | | | | | | 1039 | |<-302----------------------------------| | 1040 | | Contact: 5551234@D | | | 1041 | | Diversion: Carol@C | | | 1042 | | ;reason=user-busy | | | 1043 | | ;privacy="full" | | | 1044 | | Diversion: Bob@P2 | | | 1045 | | ;reason=unconditional | | | 1046 | | | | | | 1047 | |--ACK--------------------------------->| | 1048 | | | | | | 1049 | |--INVITE 5551234@D------------------------------->| 1050 | | Diversion: Carol@C | | | 1051 | | ;reason=user-busy | | | 1052 | | ;privacy="full" | | | 1053 | | Diversion: Bob@P2 | | | 1054 | | ;reason=unconditional | | | 1055 | | | | | | 1056 | |<-200---------------------------------------------| 1057 | | | | | | 1058 |<-200---------| | | | | 1059 | | | | | | 1060 |--ACK----------------------------------------------------------->| 1061 | | | | | | 1062 | | | | | | 1064 7.5.2. Call Forward Unconditional and Call Forward No Answer 1066 In this message flow, Proxy 2 (P2) implements Call Forward 1067 Unconditional (CFUNC) to Carol@C. (P2 would normally have routed the 1068 call to B). C then implements Call Forward on No Answer (CFNA) to 1069 5551234@D. P2 is recursing. C is recursing. 1070 +------------------------+ +--------------------------+ 1071 | Bob@P2: CFUNC->Carol@C | | Carol@C: CFNA->5551234@D | 1072 +------------------+-----+ +-----+--------------------+ 1073 \ \ 1074 \ \ 1075 A P1 P2 B C D 1076 recursing recursing 1077 | | | | | | 1078 |--INV Bob@P1->| | | | | 1079 | | | | | | 1080 | |--INV Bob@P2->| | | | 1081 | | | | | | 1082 | | |--INV Carol@C->| | 1083 | | | Diversion: Bob@P2 | 1084 | | | ;reason=unconditional | 1085 | | | | | | 1086 | | |<--180---------| | 1087 | | | | | | 1088 | |<-180---------| | | | 1089 | | | | | | 1090 |<-180---------| | | | | 1091 | | | | | | 1092 | | | | | | 1093 | | | | timeout | 1094 | | | | |--INV 5551234@D->| 1095 | | | | |Diversion: Carol@C 1096 | | | | | ;reason=no-answer 1097 | | | | | ;privacy="full" 1098 | | | | |Diversion: Bob@P2 1099 | | | | | ;reason= unconditional 1100 | | | | | | 1101 | | | | |<-200------------| 1102 | | | | | | | 1103 | | |<-200----------| | | 1104 | | | | | | | 1105 | |<-200---------| | | | | 1106 | | | | | | | 1107 |<-200---------| | | | | | 1108 | | | | | | | 1109 |--ACK--------------------------------------------------------->| 1110 | | | | | | | 1111 | | | | | | | 1113 8. Security Considerations 1115 There are some privacy considerations when using the Diversion 1116 header. 1117 Usage of the Diversion header implies that the diverting UAS trusts 1118 the diverted-to UAS. 1119 Usage of the Diversion header by SIP proxies or SIP user agents can 1120 cause information leakage of route information and called information 1121 to untrusted SIP proxies and untrusted callers in upstream 3xx's. 1122 Leakage of this information can be mitigated by having a recursing 1123 trusted upstream proxy server. 1124 For a SIP network architecture where all proxies are required to be 1125 non-recursive, Diversion header hiding may be considered necessary in 1126 order to prevent leakage of route information to the caller. To 1127 accomplish Diversion header hiding, a trusted upstream proxy would 1128 add a Record-Route header and use a secret key to encrypt the 1129 contents of the Diversion header in 3xx's which are forwarded 1130 upstream. On receipt of re-INVITEs the proxy would decrypt the 1131 contents of the Diversion header (using its secret key) and forward 1132 the INVITE. 1133 There is no currently defined interaction of the Diversion and Hide 1134 headers. 1135 Question: Should there be? 1137 9. Further Examples 1139 Only the relevant headers have been included in the following 1140 examples. The contents of the SDPs has also been omitted. 1142 9.1. Night Service/Automatic Call Distribution (ACD) using Diversion 1143 header 1145 In the following 2 message flows two separate companies, 1146 WeSellPizza.com and WeSellFlowers.com, have contracted with a third 1147 company, NightService.com to provide nighttime support for their 1148 incoming voice calls. 1149 In the first flow, Alice calls out for pizza. In the second flow, 1150 Alice calls for roses. In both instances, the same night service 1151 company (and receptionist, Carol) answers the call. However, because 1152 the Diversion header is used, Carol is able to customize her greeting 1153 to the caller. 1154 +-------------------------------------+ 1155 | WeSellPizza@P2: CFTOD->nightserv@P3 | 1156 +-------------+-----------------------+ 1157 \ 1158 \ 1159 UAC P1 P2 P3 UAS1 1160 (WeSellPizza.com) (NightService.com) 1161 (ACD) 1162 | [1] | | | | 1163 |-INV pizza@P1-->| | | | 1164 | | | | | 1165 | | | | | 1166 | | [2] INVITE WeSellPizza@P2 | | 1167 | |--------------->| | | 1168 | | | | | 1169 | | | [3] | | 1170 | | |-INV nightserv@P3->| | 1171 | | | Diversion: WeSellPizza@P2 | 1172 | | | ;reason=time-of-day | 1173 | | | | | 1174 | | | | [4] | 1175 | | | |-INV Carol@uas1----->| 1176 | | | Diversion: WeSellPizza@P2 | 1177 | | | ;reason=time-of-day | 1178 | | | | | 1179 | | | |<-[5] 200------------| 1180 | | |<-[6] 200----------| | 1181 | |<-[7] 200-------| | | 1182 |<-[8] 200-------| | | | 1183 | | | | | 1184 |--[9] ACK----------------------------------------------------------------->| 1185 | | | | | 1186 |<============================================="Hello, WeSellPizza"=========| 1187 | | | | | 1188 | | | | | 1190 Alice calls for pizza. 1192 [1] SIP UAC to SIP proxy server 1: 1194 INVITE sip:pizza@p1.isp.com SIP/2.0 1195 Via: SIP/2.0/UDP alice-pc.isp.com 1196 From: sip:alice@isp.com 1197 To: sip:pizza@p1.isp.com 1198 Call-ID: 12345600@alice-pc.isp.com 1199 CSeq: 1 INVITE 1200 Content-Type: application/sdp 1202 The ISP's originating proxy translated the keyword pizza to the 1203 company WeSellPizza.com 1205 [2] SIP proxy server 1 to SIP proxy server 2 (WeSellPizza.com): 1207 INVITE sip:WeSellPizza@p2.isp.com SIP/2.0 1208 Via: SIP/2.0/UDP p1.isp.com 1209 Via: SIP/2.0/UDP alice-pc.isp.com 1210 From: sip:alice@isp.com 1211 To: sip:pizza@p1.isp.com 1212 Call-ID: 12345600@alice-pc.isp.com 1213 CSeq: 1 INVITE 1214 Content-Type: application/sdp 1216 It's after midnight and the pizza people are in bed. Fortunately, 1217 WeSellPizza.com has contracted with NightService.com to answer 1218 their nighttime calls. Thus, P2 implements CFTOD to 1219 to NightService.com. 1221 [3] SIP proxy server 2 (WeSellPizza.com) to 1222 SIP proxy server 3 (NightService.com): 1224 INVITE sip:NightService@p3.isp.com SIP/2.0 1225 Via: SIP/2.0/UDP p2.isp.com 1226 Via: SIP/2.0/UDP p1.isp.com 1227 Via: SIP/2.0/UDP alice-pc.isp.com 1228 From: sip:alice@isp.com 1229 To: sip:pizza@p1.isp.com 1230 Call-ID: 12345600@alice-pc.isp.com 1231 CSeq: 1 INVITE 1232 Diversion: 1233 ;reason=time-of-day 1234 Content-Type: application/sdp 1236 Carol is available to receive the incoming call. 1238 [4] SIP proxy server 3 (NightService.com) to UAS1 (Carol): 1240 INVITE sip:carol@uas1.nightservice.com SIP/2.0 1241 Via: SIP/2.0/UDP p3.isp.com 1242 Via: SIP/2.0/UDP p2.isp.com 1243 Via: SIP/2.0/UDP p1.isp.com 1244 Via: SIP/2.0/UDP alice-pc.isp.com 1245 From: sip:alice@isp.com 1246 To: sip:pizza@p1.isp.com 1247 Call-ID: 12345600@alice-pc.isp.com 1248 CSeq: 1 INVITE 1249 Diversion: 1250 ;reason=time-of-day 1251 Content-Type: application/sdp 1253 The ACD keys off the Diversion header to pull up the WeSellPizza FAQ 1254 on Carol's web browser. 1256 [5] UAS1 to SIP proxy server 3: 1258 SIP/2.0 200 OK 1259 Via: SIP/2.0/UDP p3.isp.com 1260 Via: SIP/2.0/UDP p2.isp.com 1261 Via: SIP/2.0/UDP p1.isp.com 1262 Via: SIP/2.0/UDP alice-pc.isp.com 1263 Contact: carol@uas1.nightservice.com 1264 From: sip:alice@isp.com 1265 To: ;tag=uas1 1266 Call-ID: 12345600@alice-pc.isp.com 1267 CSeq: 1 INVITE 1268 Content-Type: application/sdp 1270 [6] SIP proxy server 3 to SIP proxy server 2: 1272 SIP/2.0 200 OK 1273 Via: SIP/2.0/UDP p2.isp.com 1274 Via: SIP/2.0/UDP p1.isp.com 1275 Via: SIP/2.0/UDP alice-pc.isp.com 1276 Contact: carol@uas1.nightservice.com 1277 From: sip:alice@isp.com 1278 To: ;tag=uas1 1279 Call-ID: 12345600@alice-pc.isp.com 1280 CSeq: 1 INVITE 1281 Content-Type: application/sdp 1283 [7] SIP proxy server 2 to SIP proxy server 1: 1285 SIP/2.0 200 OK 1286 Via: SIP/2.0/UDP p1.isp.com 1287 Via: SIP/2.0/UDP alice-pc.isp.com 1288 Contact: carol@uas1.nightservice.com 1289 From: sip:alice@isp.com 1290 To: ;tag=uas1 1291 Call-ID: 12345600@alice-pc.isp.com 1292 CSeq: 1 INVITE 1293 Content-Type: application/sdp 1295 [8] SIP proxy server 1 to UAC 1297 SIP/2.0 200 OK 1298 Via: SIP/2.0/UDP alice-pc.isp.com 1299 Contact: carol@uas1.nightservice.com 1300 From: sip:alice@isp.com 1301 To: ;tag=uas1 1302 Call-ID: 12345600@alice-pc.isp.com 1303 CSeq: 1 INVITE 1304 Content-Type: application/sdp 1306 [9] SIP UAC to UAS1: 1308 ACK sip:uas1.nightservice.com SIP/2.0 1309 Via: SIP/2.0/UDP alice-pc.isp.com 1310 From: sip:alice@isp.com 1311 To: ;tag=uas1 1312 Call-ID: 12345600@alice-pc.isp.com 1313 CSeq: 1 INVITE 1315 The RTP flows begin and Carol answers "Hello, WeSellPizza. 1316 How may I help you?" 1317 +---------------------------------------+ 1318 | WeSellFlowers@P4: CFTOD->nightserv@P3 | 1319 +-------------+-------------------------+ 1320 \ 1321 \ 1322 UAC P1 P4 P3 UAS1 1323 (WeSellFlowers.com) (NightService.com) 1324 (ACD) 1325 | [1] | | | | 1326 |-INV roses@P1->| | | | 1327 | | | | | 1328 | | [2] INVITE WeSellFlowers@P4 | | 1329 | |--------------->| | | 1330 | | | | | 1331 | | [3] | | | 1332 | |<-302-----------| | | 1333 | | Contact: nightservice@P3 | | 1334 | | Diversion: WeSellFlowers@P4 | | 1335 | | ;reason=time-of-day | | 1336 | | | | | 1337 | |--[4] ACK------>| | | 1338 | | | | | 1339 | | [5] | | | 1340 | |-INVITE nightservice@P3------------>| | 1341 | | Diversion: WeSellFlowers@P4 | | 1342 | | ;reason=time-of-day | | 1343 | | | | | 1344 | | | | [6] | 1345 | | | -INV Carol@uas1----->| 1346 | | | Diversion: WeSellFlowers@P4 1347 | | | ;reason=time-of-day 1348 | | | | 1349 | | | |<-[7] 200------------| 1350 | |<-[8] 200---------------------------| | 1351 |<-[9] 200------| | | | 1352 | | | | | 1353 |--[10] ACK---------------------------------------------------------->| 1354 | | | | | 1355 |<======================================="Hello, WeSellFlowers"=======| 1356 | | | | | 1357 | | | | | 1359 Alice calls for roses. 1361 [1] SIP UAC to SIP proxy server 1: 1363 INVITE sip:roses@p1.isp.com SIP/2.0 1364 Via: SIP/2.0/UDP alice-pc.isp.com 1365 From: sip:alice@isp.com 1366 To: sip:roses@p1.isp.com 1367 Call-ID: 12345600@alice-pc.isp.com 1368 CSeq: 1 INVITE 1369 Content-Type: application/sdp 1371 The ISP's originating proxy translated the keyword roses to the 1372 company WeSellFlowers.com 1374 [2] SIP proxy server 1 to SIP proxy server 4 (WeSellFlowers.com): 1376 INVITE sip:WeSellFlowers@p4.isp.com SIP/2.0 1377 Via: SIP/2.0/UDP p1.isp.com 1378 Via: SIP/2.0/UDP alice-pc.isp.com 1379 From: sip:alice@isp.com 1380 To: sip:roses@p1.isp.com 1381 Call-ID: 12345600@alice-pc.isp.com 1382 CSeq: 1 INVITE 1383 Content-Type: application/sdp 1385 It's now 1am and the florists are also in bed. Fortunately, 1386 WeSellFlowers.com has contracted with NightService.com to answer 1387 their nighttime calls, too. Thus, P4 implements CFTOD to 1388 to NightService.com. 1390 [3] SIP proxy server 4 (WeSellFlowers.com) to 1391 SIP proxy server 1 (NightService.com): 1393 SIP/2.0 302 Moved Temporarily 1394 Via: SIP/2.0/UDP p1.isp.com 1395 Via: SIP/2.0/UDP alice-pc.isp.com 1396 Contact: NightService@p3.isp.com 1397 From: sip:alice@isp.com 1398 To: ;tag=p4 1399 Call-ID: 12345600@alice-pc.isp.com 1400 CSeq: 1 INVITE 1401 Diversion: 1402 ;reason=time-of-day 1404 [4] SIP proxy server 1 to SIP proxy server 4 (WeSellFlowers.com): 1405 ACK sip:uas1.nightservice.com SIP/2.0 1406 Via: SIP/2.0/UDP alice-pc.isp.com 1407 From: sip:alice@isp.com 1408 To: ;tag=p4 1409 Call-ID: 12345600@alice-pc.isp.com 1410 CSeq: 1 INVITE 1412 [5] SIP proxy server 1 (WeSellFlowers.com) to 1413 SIP proxy server 3 (NightService.com): 1415 INVITE sip:NightService@p3.isp.com SIP/2.0 1416 Via: SIP/2.0/UDP p1.isp.com 1417 Via: SIP/2.0/UDP alice-pc.isp.com 1418 From: sip:alice@isp.com 1419 To: sip:roses@p1.isp.com 1420 Call-ID: 12345600@alice-pc.isp.com 1421 CSeq: 1 INVITE 1422 Diversion: 1423 ;reason=time-of-day 1424 Content-Type: application/sdp 1426 Carol is available to receive the incoming call. 1428 [6] SIP proxy server 3 (NightService.com) to UAS1 (Carol): 1430 INVITE sip:carol@uas1.nightservice.com SIP/2.0 1431 Via: SIP/2.0/UDP p3.isp.com 1432 Via: SIP/2.0/UDP p1.isp.com 1433 Via: SIP/2.0/UDP alice-pc.isp.com 1434 From: sip:alice@isp.com 1435 To: sip:roses@p1.isp.com 1436 Call-ID: 12345600@alice-pc.isp.com 1437 CSeq: 1 INVITE 1438 Diversion: 1439 ;reason=time-of-day 1440 Content-Type: application/sdp 1442 The ACD keys off the Diversion header to pull up 1443 the WeSellFlowers FAQ on Carol's web browser. 1445 [7] SIP UAS1 to SIP proxy server 3: 1447 SIP/2.0 200 OK 1448 Via: SIP/2.0/UDP p3.isp.com 1449 Via: SIP/2.0/UDP p1.isp.com 1450 Via: SIP/2.0/UDP alice-pc.isp.com 1451 Contact: carol@uas1.nightservice.com 1452 From: sip:alice@isp.com 1453 To: ;tag=uas1 1454 Call-ID: 12345600@alice-pc.isp.com 1455 CSeq: 1 INVITE 1456 Content-Type: application/sdp 1458 [8] SIP proxy server 3 to SIP proxy server 1: 1460 SIP/2.0 200 OK 1461 Via: SIP/2.0/UDP p1.isp.com 1462 Via: SIP/2.0/UDP alice-pc.isp.com 1463 Contact: carol@uas1.nightservice.com 1464 From: sip:alice@isp.com 1465 To: ;tag=uas1 1466 Call-ID: 12345600@alice-pc.isp.com 1467 CSeq: 1 INVITE 1468 Content-Type: application/sdp 1470 [9] SIP proxy server 1 to UAC 1472 SIP/2.0 200 OK 1473 Via: SIP/2.0/UDP alice-pc.isp.com 1474 Contact: carol@uas1.nightservice.com 1475 From: sip:alice@isp.com 1476 To: ;tag=uas1 1477 Call-ID: 12345600@alice-pc.isp.com 1478 CSeq: 1 INVITE 1479 Content-Type: application/sdp 1481 [10] SIP UAC to SIP UAS1: 1483 ACK sip:uas1.nightservice.com SIP/2.0 1484 Via: SIP/2.0/UDP alice-pc.isp.com 1485 From: sip:alice@isp.com 1486 To: ;tag=uas1 1487 Call-ID: 12345600@alice-pc.isp.com 1488 CSeq: 1 INVITE 1490 The RTP flows begin and Carol answers "Hello, WeSellFlowers. 1491 How may I help you?" 1493 9.2. Voicemail Service using Diversion header 1495 Bob has contracted his Voicemail to a third-party company, 1496 Voicemail.com. In this message flow, Bob has hit the Do-Not-Disturb 1497 button on his phone. The Do-Not-Disturb functionality of Bob's phone 1498 is configured to CFUNC (Call Forward Unconditional) to 1499 voicemail@isp.com. Because the Diversion header is used, 1500 Voicemail.com is able to place the incoming call into Bob's voice 1501 mailbox. 1502 +---------------------------------------------+ 1503 | Bob@UAS1: CFDoNotDisturb->voicemail@isp.com | 1504 +--------------------------------------+------+ 1505 \ 1506 \ 1507 UAC1 P1 P2 UAS1 UAS2 1508 (Voicemail.com) 1509 | | | | | 1510 |--[1] INV Bob@P1->| | | | 1511 | | | | | 1512 | |--[2] INV Bob@P2->| | | 1513 | | | | | 1514 | | [3] INV Bob@uas1->| | 1515 | | | | | 1516 | | [4] <- 302-------| | 1517 | | Contact: voicemail@isp.com | 1518 | | Diversion: Bob@uas1 | 1519 | | ;reason=do-not-disturb | 1520 | | | | | 1521 | | |[5] ACK------>| | 1522 | | | | | 1523 | |<-[6] 302---------| | | 1524 | | Contact: voicemail@isp.com | | 1525 | | Diversion: Bob@uas1 | | 1526 | | ;reason=do-not-disturb | | 1527 | | | | | 1528 | |--[7] ACK-------->| | | 1529 |<-[8] 302---------| | | | 1530 | Contact: voicemail@isp.com | | | 1531 | Diversion: Bob@uas1 | | | 1532 | ;reason=do-not-disturb | | | 1533 | | | | | 1534 |--[9] ACK-------->| | | | 1535 | | | | | 1536 |--[10] INVITE voicemail@isp.com------------------------------->| 1537 | Diversion: Bob@uas1 | | | 1538 | ;reason=do-not-disturb | | | 1539 | | | | | 1540 |<--[11] 200----------------------------------------------------| 1541 | | | | | 1542 |---[12] ACK--------------------------------------------------->| 1543 | | | | | 1544 | | | | | 1546 Alice calls Bob. 1548 [1] SIP UAC to SIP proxy server 1: 1550 INVITE sip:Bob@p1.isp.com SIP/2.0 1551 Via: SIP/2.0/UDP alice-pc.isp.com 1552 From: sip:alice@isp.com 1553 To: sip:Bob@p1.isp.com 1554 Call-ID: 12345600@alice-pc.isp.com 1555 CSeq: 1 INVITE 1556 Content-Type: application/sdp 1558 The ISP's originating proxy routes the request to proxy 2 (P2) 1560 [2] SIP proxy server 1 to SIP proxy server 2: 1562 INVITE sip:Bob@p2.isp.com SIP/2.0 1563 Via: SIP/2.0/UDP p1.isp.com 1564 Via: SIP/2.0/UDP alice-pc.isp.com 1565 From: sip:alice@isp.com 1566 To: sip:Bob@p1.isp.com 1567 Call-ID: 12345600@alice-pc.isp.com 1568 CSeq: 1 INVITE 1569 Content-Type: application/sdp 1571 [3] SIP proxy server 2 to UAS1 (Bob's SIP phone): 1573 INVITE sip:Bob@uas1.isp.com SIP/2.0 1574 Via: SIP/2.0/UDP p2.isp.com 1575 Via: SIP/2.0/UDP p1.isp.com 1576 Via: SIP/2.0/UDP alice-pc.isp.com 1577 From: sip:alice@isp.com 1578 To: sip:Bob@p1.isp.com 1579 Call-ID: 12345600@alice-pc.isp.com 1580 CSeq: 1 INVITE 1581 Content-Type: application/sdp 1583 Since Bob had hit the Do-Not-Disturb button on his SIP phone, 1584 Bob's phone forwards the call to his voicemail service. 1586 [4] User agent server 1 (UAS1) to SIP proxy server 2 (P2) 1588 SIP/2.0 302 Moved Temporarily 1589 Via: SIP/2.0/UDP p2.isp.com 1590 Via: SIP/2.0/UDP p1.isp.com 1591 Via: SIP/2.0/UDP alice-pc.isp.com 1592 Contact: Voicemail@isp.com 1593 From: sip:alice@isp.com 1594 To: ;tag=uas1 1595 Call-ID: 12345600@alice-pc.isp.com 1596 CSeq: 1 INVITE 1597 Diversion: 1598 ;reason=do-not-disturb 1600 [5] SIP proxy server 2 to UAS1 (Bob's SIP phone): 1601 ACK sip:Bob@uas1.isp.com SIP/2.0 1602 Via: SIP/2.0/UDP p2.isp.com 1603 From: sip:alice@isp.com 1604 To: ;tag=uas1 1605 Call-ID: 12345600@alice-pc.isp.com 1606 CSeq: 1 INVITE 1608 [6] SIP proxy server 2 (P2) to SIP proxy server 1 (P1): 1610 SIP/2.0 302 Moved Temporarily 1611 Via: SIP/2.0/UDP p1.isp.com 1612 Via: SIP/2.0/UDP alice-pc.isp.com 1613 Contact: Voicemail@isp.com 1614 From: sip:alice@isp.com 1615 To: ;tag=uas1 1616 Call-ID: 12345600@alice-pc.isp.com 1617 CSeq: 1 INVITE 1618 Diversion: 1619 ;reason=do-not-disturb 1621 [7] SIP proxy server 1 to SIP proxy server 2: 1623 ACK sip:Bob@p2.isp.com SIP/2.0 1624 Via: SIP/2.0/UDP p1.isp.com 1625 From: sip:alice@isp.com 1626 To: ;tag=uas1 1627 Call-ID: 12345600@alice-pc.isp.com 1628 CSeq: 1 INVITE 1630 [8] SIP proxy server 1 (P1) to UAC (alice-pc): 1632 SIP/2.0 302 Moved Temporarily 1633 Via: SIP/2.0/UDP alice-pc.isp.com 1634 Contact: Voicemail@isp.com 1635 From: sip:alice@isp.com 1636 To: ;tag=uas1 1637 Call-ID: 12345600@alice-pc.isp.com 1638 CSeq: 1 INVITE 1639 Diversion: 1640 ;reason=do-not-disturb 1642 [9] SIP UAC to SIP proxy server 1: 1644 ACK sip:Bob@p1.isp.com SIP/2.0 1645 Via: SIP/2.0/UDP alice-pc.isp.com 1646 From: sip:alice@isp.com 1647 To: ;tag=uas1 1648 Call-ID: 12345600@alice-pc.isp.com 1649 CSeq: 1 INVITE 1651 [10] SIP UAC (alice-pc) to Voicemail server. 1653 INVITE sip:Voicemail@isp.com SIP/2.0 1654 Via: SIP/2.0/UDP alice-pc.isp.com 1655 From: sip:alice@isp.com 1656 To: sip:Bob@p1.isp.com 1657 Call-ID: 12345600@alice-pc.isp.com 1658 CSeq: 1 INVITE 1659 Diversion: 1660 ;reason=do-not-disturb 1661 Content-Type: application/sdp 1663 [11] Voicemail server to SIP UAC (alice-pc): 1665 SIP/2.0 200 OK 1666 Via: SIP/2.0/UDP alice-pc.isp.com 1667 Contact: Voicemail@isp.com 1668 From: sip:alice@isp.com 1669 To: ;tag=uas2 1670 Call-ID: 12345600@alice-pc.isp.com 1671 CSeq: 1 INVITE 1672 Content-Type: application/sdp 1674 [12] SIP UAC to Voicemail server: 1676 ACK sip:Voicemail@isp.com SIP/2.0 1677 Via: SIP/2.0/UDP alice-pc.isp.com 1678 From: sip:alice@isp.com 1679 To: ;tag=uas2 1680 Call-ID: 12345600@alice-pc.isp.com 1681 CSeq: 1 INVITE 1683 Because the Diversion header is present, the Voicemail 1684 server is able to place Alice's message into Bob's voice 1685 mailbox. 1687 9.3. Q&A on alternative approaches 1689 Question 1: 1690 Why do we need the Diversion header when we can see the To: header? 1692 Answer: 1693 a) The To: header is not guaranteed to have significance to the 1694 called party. 1695 For example, the To: header may contain a locally significant URL (to 1696 the caller) such as a private numbering plan, speed dial digits, 1697 telephony escape digits, or telephony prefix digits. 1698 Without a Diversion header, enumerating all possible locally 1699 significant To: headers that anyone might use to contact 1700 Bob@uas1.isp.com becomes a configuration problem at Voicemail@isp.com 1701 and is prone to namespace collision. 1702 Support for Diversion headers enables Bob to contract a third-party 1703 service (Voicemail@isp.com) with a single globally significant URL 1704 for his voice mailbox (Bob@uas1.isp.com). 1705 b) Given a set of multiple diversions, there is a policy decision of 1706 which Diversion header takes precedence for service logic. Different 1707 services (or even different users for the same service) may want to 1708 configure this policy differently (first, last,second to last, etc). 1710 Question 2: 1711 Why do we need the Diversion header when we can see the Via: header? 1713 Answer: 1714 The Via header does not contain information about servers whom have 1715 deflected the call (using a 3xx). 1717 10. Mapping ISUP/ISDN Redirection information to SIP Diversion header 1719 The discussions below regarding ISUP/ISDN reflect generic elements in 1720 ISUP/ISDN. In some variations of ISUP/ISDN, the information elements 1721 are represented differently. Regardless of the ISUP/ISDN variant, 1722 translation should be performed for the "first redirecting number" 1723 and the "last redirecting number". 1724 In order to prevent ambiguity, it is important to highlight a 1725 terminology mismatch between ISUP/ISDN and SIP. In SIP, a "redirect" 1726 indicates the act of returning a 3xx response. In ISUP/ISDN a 1727 "redirection" is diversion of a call by a network entity. In ISUP/ 1728 ISDN a call may also be deflected (by an endpoint). Diversion is the 1729 more generic term which refers to either the act of an network 1730 redirection or endpoint deflection. 1732 In SIP, Diversion can be implemented as either an upstream 3xx (non- 1733 recursive) or an additionally forked downstream request (recursive). 1734 In the following text, a lower-case "redirect" indicates the SIP 1735 usage, while an uppercase "Redirect" indicates ISUP usage. 1737 10.1. Mapping ISUP/ISDN Diversion Reason codes 1738 ISUP and ISDN define the following diversion reasons: 1740 0000 = Unknown 1741 0001 = Call forwarding busy or called DTE busy 1742 0010 = Call forwarding no reply 1743 1111 = Call forwarding unconditional or systematic call redirection 1744 1010 = Call deflection or call forwarding by the called DTE 1745 1001 = Call forwarding DTE out of order 1747 Mapping of ISUP/ISDN reason codes to Diversion reason codes is 1748 performed as follows: 1750 ISUP/ISDN reason code Diversion reason code 1751 0001 "user-busy" 1752 0010 "no-answer" 1753 1111 "unconditional" 1754 1010 "deflection" 1755 1001 "unavailable" 1756 0000 all others 1758 10.2. Mapping ISUP Redirection information to SIP Diversion header 1760 This section describes how generic ISUP diversion information 1761 elements may be translated across an ISUP/SIP gateway. 1763 10.2.1. ISUP Definitions 1764 Called party number The number of the party to which the 1765 call is currently being routed. 1767 Redirecting number The number to which the call was 1768 being routed when the last diversion 1769 occurred. 1771 Redirecting reason The reason that the last diversion 1772 occurred. 1774 Original called number The number to which the call was 1775 being routed when the first 1776 diversion occurred. 1778 Original redirecting reason The reason that the first diversion 1779 occurred. 1781 Redirection counter The count of the total number of 1782 diversions that have occurred. 1784 Address Presentation Indication of whether presentation 1785 is allowed or restricted. 1787 10.2.2. ISUP parameters 1789 When a SIP call transits a SIP/ISUP gateway, the following 1790 information in the ISUP message should be examined/set when 1791 translating SIP Diversion headers to ISUP diversion information: 1792 1) Redirecting Number 1793 2) Redirecting reason 1794 3) Redirecting address presentation 1795 4) Original called number 1796 5) Original redirecting reason 1797 6) Original address presentation 1798 7) Redirection counter. 1800 An ISUP message contains information on the first and last diversions 1801 that occurred. The Redirection Number is to which the call was being 1802 routed when the last diversion occurred. The Redirecting Reason is 1803 the reason that the last diversion occurred. 1804 The Original Called Number is the number to which the call was being 1805 routed when the first diversion occurred. The Original Redirecting 1806 Reason is the reason that the first diversion occurred. 1807 When only one Diversion has occurred, the number to which the call 1808 was being routed when the diversion occurred is in the Redirecting 1809 Number and the reason for that diversion is carried in the Redirect 1810 Reason. 1812 10.2.3. ISUP to SIP translation 1814 The ISUP Redirecting Number SHOULD be used to set the value of the 1815 name-addr of the top-most Diversion header. The ISUP Redirecting 1816 Number address presentation SHOULD be used to set the value of the 1817 diversion-privacy of the top-most Diversion header. The ISUP 1818 Redirecting Reason SHOULD be used to set the value of the diversion- 1819 reason of the top-most Diversion header. When present, the Original 1820 Called Number SHOULD be used to set the name-addr of the bottom-most 1821 Diversion header. When present, the Original Redirecting Reason 1822 SHOULD be used to set the diversion-reason of the bottom-most 1823 Diversion header.When present, the Original address presentation 1824 SHOULD be used to set the diversion-privacy of the bottom-most 1825 Diversion header. 1826 The Redirect Counter value minus 1 SHOULD be stored in the diversion- 1827 counter associated with the top-most Diversion header. Presence of 1828 the diversion-counter for the bottom-most Diversion header is 1829 optional. If present the diversion-counter of the bottom-most 1830 Diversion header SHOULD be 1. 1832 10.2.4. SIP to ISUP translation 1834 The name-addr of the top-most Diversion header SHOULD be used to set 1835 the ISUP Redirecting Number. The diversion-reason of the top-most 1836 Diversion header SHOULD be used to set the ISUP Redirecting 1837 Reason.The diversion-privacy of the top-most Diversion header SHOULD 1838 be used to set the ISUP Redirecting Address Presentation. When 1839 multiple Diversion headers are present, the name-addr of the bottom- 1840 most Diversion header SHOULD be used to set the ISUP Original 1841 Redirecting Number. 1842 When multiple Diversion headers are present, the diversion-reason of 1843 the bottom-most Diversion header SHOULD be used to set the ISUP 1844 Original Redirecting Reason. When multiple Diversion headers are 1845 present, the diversion-privacy of the bottom-most Diversion header 1846 SHOULD be used to set the ISUP Original Redirecting Address 1847 Presentation. 1848 The ISUP Redirection counter SHOULD be set equal to the sum of the 1849 counters of all Diversion headers in the SIP message. A Diversion 1850 header which does not explicitly specify a diversion-counter tag 1851 counts as 1. 1853 10.2.5. Example of ISUP to SIP translation 1854 ISUP/SIP GW 1855 | 1856 --IAM--------------------------------->| 1857 Called Party Number =+19195551004 | 1858 Redirecting Number =+19195551002 | 1859 Address Presentation =presentation restricted 1860 Original Called Number =+19195551001 | 1861 RedirectionInformation: | 1862 Original redirecting reason = Unconditional (1111) 1863 Redirecting Reason = User busy (0001) 1864 Redirection counter = 5 | 1865 | 1866 |--INVITE +19195551004------> 1867 | Diversion: 1868 | ;reason=user-busy 1869 | ;privacy="full" 1870 | ;counter=4 1871 | Diversion: 1872 | ;reason=unconditional 1873 | ;counter=1 1874 | 1875 | 1877 10.2.6. Example of SIP to ISUP translation 1879 ISUP/SIP GW 1880 | 1881 |<--INVITE +19195551004------ 1882 | Diversion: 1883 | ;reason=user-busy 1884 | ;privacy="full" 1885 | ;counter=4 1886 | Diversion: 1887 | ;reason=unconditional 1888 | ;counter=1 1889 | 1890 | 1891 | 1892 <--IAM---------------------------------| 1893 Called Party Number =+19195551004 | 1894 Redirecting Number =+19195551002 | 1895 Address Presentation =presentation restricted 1896 Original Called Number =+19195551001 | 1897 RedirectionInformation: | 1898 Original redirecting reason = Unconditional (1111) 1899 Redirecting Reason = User busy (0001) 1900 Redirection counter = 5 | 1902 10.3. Mapping ISDN Redirection information to SIP Diversion header 1904 An ISDN message can contain up to two instances of a Redirecting 1905 number information element. When a diversion occurs, an additional 1906 Redirection number information element is added. When a third (or 1907 greater) diversion occurs, the new Redirecting number information 1908 element replaces the bottom-most Redirection number information 1909 element. 1911 10.3.1. ISDN Definitions 1912 Called party number The number of the party to which the 1913 call is currently being routed. 1915 Redirecting number 1916 information element Aggregate information element 1917 which contains Redirecting number 1918 and Reason for diversion. 1920 Redirecting number The number to which the call was 1921 being routed when the last diversion 1922 occurred. 1924 Reason for diversion The reason that the last diversion 1925 occurred. 1927 Origin of Number Indicates whether number is user 1928 provided and screened or network 1929 provided 1931 Presentation Status Indicates if presentation is 1932 allowed or prohibited 1934 10.3.2. ISDN parameters 1936 When a SIP call transits a SIP/ISDN gateway, the following 1937 information in the ISDN message should be examined/set when 1938 translating SIP Diversion headers to ISDN diversion information: 1940 1) Redirecting number of the top-most Redirecting number 1941 information element 1942 2) Reason for diversion of the top-most Redirection number 1943 information element 1944 3) Origin of Number and Presentation Status of the top-most 1945 Redirection number information element 1946 4) Redirection number of the bottom-most Redirection number 1947 information element 1948 5) Reason for diversion of the bottom-most Redirection number 1949 information element. 1950 6) Origin of Number and Presentation Status of the bottom-most 1951 Redirection number information element 1952 An ISDN message contains information on the first and last diversions 1953 that occurred. The top-most Redirection number information element 1954 contains information (including the Redirecting number, Origin of 1955 Number, Presentation Status, and Reason for diversion) about the last 1956 diversion that occurred. The bottom-most Redirection number 1957 information element contains information (including the Redirecting 1958 number, Origin of Number, Presentation Status,and Reason for 1959 diversion) about the first diversion that occurred. 1960 If only one Diversion has occurred, only one Redirection number 1961 information element is present. 1962 The Redirecting Number information element has the same Type of 1963 Number/Numbering Plan, and Digits as the Calling Party Number 1964 information element. 1965 There is no Redirection counter associated with this ISDN information 1966 element. 1967 Notice that the order of the Redirection number information elements 1968 in an ISDN message (top=first, bottom=last) is reversed from the 1969 order of Diversion headers in a SIP message (top=last, bottom=first). 1971 10.3.3. ISDN to SIP translation 1973 The Redirecting number of the top-most ISDN Redirecting number 1974 information element SHOULD be used to set the value of the name-addr 1975 of the bottom-most Diversion header. The Reason for Diversion of the 1976 top-most ISDN Redirecting number information element SHOULD be used 1977 to set the value of the diversion-reason of the bottom-most Diversion 1978 header. 1979 The Origin of Number of the top-most ISDN Redirecting number 1980 information element SHOULD be used to set the value of the diversion- 1981 screen of the bottom-most Diversion header. The Presentation Status 1982 of the top-most ISDN Redirecting number information element SHOULD be 1983 used to set the value of the diversion-privacy of the bottom-most 1984 Diversion header. 1986 The Redirecting number of the bottom-most ISDN Redirecting number 1987 information element SHOULD be used to set the value of the name-addr 1988 of the top-most Diversion header. The Reason for Diversion of the 1989 bottom-most ISDN Redirecting number information element SHOULD be 1990 used to set the value of the diversion-reason of the top-most 1991 Diversion header. 1992 The Origin of Number of the bottom-most ISDN Redirecting number 1993 information element SHOULD be used to set the value of the diversion- 1994 screen of the top-most Diversion header. The Presentation Status of 1995 the bottom-most ISDN Redirecting number information element SHOULD be 1996 used to set the value of the diversion-privacy of the top-most 1997 Diversion header. 1998 Presence of the diversion-counter in each of the Diversion headers is 1999 optional. If present, the diversion-counter of each Diversion header 2000 SHOULD be 1. 2002 10.3.4. SIP to ISDN translation 2004 The name-addr of the top-most Diversion header SHOULD be used to set 2005 the Redirecting number of the bottom-most ISDN Redirecting number 2006 information element. 2007 The diversion-reason of the top-most Diversion header SHOULD be used 2008 to set the Reason for Diversion of the bottom-most ISDN Redirecting 2009 number information element. 2010 The diversion-screen of the top-most Diversion header SHOULD be used 2011 to set the Origin of Number of the bottom-most ISDN Redirecting 2012 number information element. 2013 The diversion-privacy of the top-most Diversion header SHOULD be used 2014 to set the Presentation Status of the bottom-most ISDN Redirecting 2015 number information element. 2017 The name-addr of the bottom-most Diversion header SHOULD be used to 2018 set the Redirecting number of the top-most ISDN Redirecting number 2019 information element. 2020 The diversion-reason of the bottom-most Diversion header SHOULD be 2021 used to set the Reason for Diversion of the top-most ISDN Redirecting 2022 number information element. 2023 The diversion-screen of the bottom-most Diversion header SHOULD be 2024 used to set the Origin of Number of the top-most ISDN Redirecting 2025 number information element. 2026 The diversion-privacy of the bottom-most Diversion header SHOULD be 2027 used to set the Presentation Status of the top-most ISDN Redirecting 2028 number information element. 2030 10.3.5. Example of ISDN to SIP translation 2031 ISDN/SIP GW 2032 | 2033 --Setup------------------------------->| 2034 Called party number =+19195551004 2035 Redirecting number information element: 2036 Redirecting number =+19195551001 2037 Reason for redirection = Unconditional (1111) 2038 Origin of Number = passed network screening 2039 Presentation Status = presentation allowed 2040 Redirecting number information element: 2041 Redirecting number =+19195551002 2042 Reason for redirection = User busy (0001) 2043 Origin of Number = passed network screening 2044 Presentation Status = presentation prohibited 2045 | 2046 |--INVITE tel:+19195551004----> 2047 | Diversion: 2048 | ;reason=user-busy 2049 | ;screen="yes" 2050 | ;privacy="off" 2051 | Diversion: 2052 | ;reason=unconditional 2053 | ;screen="yes" 2054 | ;privacy="full" 2055 | 2056 | 2058 10.3.6. Example of SIP to ISDN translation 2059 ISDN/SIP GW 2060 | 2061 <--Setup-------------------------------| 2062 Called party number =+19195551004 2063 Redirecting number information element: 2064 Redirecting number =+19195551001 2065 Reason for redirection = Unconditional (1111) 2066 Origin of Number = passed network screening 2067 Presentation Status = presentation allowed 2068 Redirecting number information element: 2069 Redirecting number =+19195551002 2070 Reason for redirection = User busy (0001) 2071 Origin of Number = passed network screening 2072 Presentation Status = presentation prhibited 2073 | 2074 |<--INVITE tel:+19195551004---- 2075 | Diversion: 2076 | ;reason=user-busy 2077 | ;screen="yes" 2078 | ;privacy="off 2079 | Diversion: 2080 | ;reason=unconditional 2081 | ;screen="yes" 2082 | ;privacy="full" 2083 | 2085 10.4. Information loss in SIP to ISUP/ISDN translation 2087 Because ISUP and ISDN only support a subset of the information in a 2088 SIP Diversion header, information loss occurs during translation at a 2089 SIP/ISUP or SIP/ISDN boundary. 2091 10.4.1. Loss of diversion URI information 2093 Because ISUP and ISDN only support a subset of URI types, 2094 (specifically tel: URIs and sip:x@y;user=phone URIs) Diversion 2095 information occurring for other URI types may be lost when crossing 2096 from SIP to ISDN or ISUP. 2098 10.4.2. Loss of diversion reason information 2100 Because ISUP and ISDN only support a subset of the reason codes 2101 supported by the Diversion header, specific reason code information 2102 may be lost when crossing from SIP to ISDN or ISUP. 2104 10.4.3. Loss of diversion counter information 2106 Because ISDN does not support a counter field (indicating the number 2107 of diversions that have occurred), counter information may be lost 2108 when crossing from SIP to ISDN. 2110 11. Contributors 2112 Special aknowledgement to both Bryan Byerly and JR Yang. As original 2113 authors of this draft, both were instrumental is getting this draft 2114 written. 2116 12. Acknowlegements 2118 We would like to thank David Williams, Ameet Kher, Satya Khatter, 2119 Manoj Bhatia, Shail Bhatnagar, Denise Caballero-Mccann, Kara Adams, 2120 and Charles Eckel of Cisco Systems and Bert Culpepper of InterVoice- 2121 Brite for their insights, inputs, and comments. 2123 13. Normative References 2125 [RFC2119] "Key words for use in RFCs to Indicate Requirement 2126 Levels", RFC 2119, March 1997. 2128 [RFC3261] "SIP: Session Initiation Protocol", RFC 3261, June 2002. 2130 Authors' Addresses 2132 Steve Levy 2133 Cisco Systems 2134 7025 Kit Creek Road P.O. Box 14987 Research Triangle Park, 2135 NC 27709 2136 USA 2138 Email: stlevy@cisco.com 2139 Marianne Mohali (editor) 2140 Orange Labs 2141 38-40 rue du General Leclerc 2142 Issy-Les-Moulineaux Cedex 9 92794 2143 France 2145 Phone: +33145294514 2146 Email: marianne.mohali@orange-ftgroup.com