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