Movatterモバイル変換


[0]ホーム

URL:


[RFC Home] [TEXT|PDF|HTML] [Tracker] [IPR] [Errata] [Info page]

BEST CURRENT PRACTICE
Errata Exist
Network Working Group                                          R. SparksRequest for Comments: 5589                                       TekelecBCP: 149                                                A. Johnston, Ed.Category: Best Current Practice                                    Avaya                                                               D. Petrie                                                               SIPez LLC                                                               June 2009Session Initiation Protocol (SIP) Call Control - TransferStatus of This Memo   This document specifies an Internet Best Current Practices for the   Internet Community, and requests discussion and suggestions for   improvements.  Distribution of this memo is unlimited.Copyright Notice   Copyright (c) 2009 IETF Trust and the persons identified as the   document authors.  All rights reserved.   This document is subject toBCP 78 and the IETF Trust's Legal   Provisions Relating to IETF Documents in effect on the date of   publication of this document (http://trustee.ietf.org/license-info).   Please review these documents carefully, as they describe your rights   and restrictions with respect to this document.   This document may contain material from IETF Documents or IETF   Contributions published or made publicly available before November   10, 2008.  The person(s) controlling the copyright in some of this   material may not have granted the IETF Trust the right to allow   modifications of such material outside the IETF Standards Process.   Without obtaining an adequate license from the person(s) controlling   the copyright in such materials, this document may not be modified   outside the IETF Standards Process, and derivative works of it may   not be created outside the IETF Standards Process, except to format   it for publication as an RFC or to translate it into languages other   than English.Abstract   This document describes providing Call Transfer capabilities in the   Session Initiation Protocol (SIP).  SIP extensions such as REFER and   Replaces are used to provide a number of transfer services including   blind transfer, consultative transfer, and attended transfer.  This   work is part of the SIP multiparty call control framework.Sparks, et al.           Best Current Practice                  [Page 1]

RFC 5589                    SIP CC Transfer                    June 2009Table of Contents1. Overview ........................................................32. Actors and Roles ................................................33. Terminology .....................................................44. Requirements ....................................................45. Using REFER to Achieve Call Transfer ............................56. Basic Transfer ..................................................66.1. Successful Transfer ........................................86.2. Transfer with Dialog Reuse ................................116.3. Failed Transfer ...........................................156.3.1. Target Busy ........................................166.3.2. Transfer Target Does Not Answer ....................177. Transfer with Consultation Hold ................................187.1. Exposing Transfer Target ..................................187.2. Protecting Transfer Target ................................197.3. Attended Transfer .........................................247.4. Recovery When One Party Does Not Support REFER ............28      7.5. Attended Transfer When Contact URI Is Not Known to           Route to a User Agent .....................................297.6. Semi-Attended Transfer ....................................377.7. Attended Transfer Fallback to Basic Transfer ..............428. Transfer with Referred-By ......................................459. Transfer as an Ad Hoc Conference ...............................4910. Transfer with Multiple Parties ................................5211. Gateway Transfer Issues .......................................5411.1. Coerce Gateway Hairpins to the Same Gateway ..............5411.2. Consultative Turned Blind Gateway Glare ..................5512. Security Considerations .......................................5513. Acknowledgments ...............................................5614. References ....................................................5614.1. Normative References .....................................5614.2. Informative References ...................................57Sparks, et al.           Best Current Practice                  [Page 2]

RFC 5589                    SIP CC Transfer                    June 20091.  Overview   This document describes providing Call Transfer capabilities and   requirements in SIP [RFC3261].  This work is part of the multiparty   call control framework [CC-FRMWRK].   The mechanisms discussed here are most closely related to   traditional, basic, and consultation hold transfers.   This document details the use of the REFER method [RFC3515] and   Replaces [RFC3891] header field to achieve call transfer.   A User Agent (UA) that fully supports the transfer mechanisms   described in this document supports REFER [RFC3515] and Replaces   [RFC3891] in addition toRFC 3261 [RFC3261].  A User Agent should use   a Contact URI that meets the requirements in Section 8.1.1.8 ofRFC3261.  A compliant User Agent supports the Target-Dialog header field   [RFC4538].2.  Actors and Roles   There are three actors in a given transfer event, each playing one of   the following roles:   Transferee:        the party being transferred to the Transfer                      Target.   Transferor:        the party initiating the transfer.   Transfer Target:   the new party being introduced into a call with                      the Transferee.   The following roles are used to describe transfer requirements and   scenarios:   Originator:        wishes to place a call to the Recipient.  This                      actor is the source of the first INVITE in a                      session, to either a Facilitator or a Screener.   Facilitator:       receives a call or out-of-band request from the                      Originator, establishes a call to the Recipient                      through the Screener, and connects the Originator                      to the Recipient.  Typically, a Facilitator acts                      on behalf of the Originator.Sparks, et al.           Best Current Practice                  [Page 3]

RFC 5589                    SIP CC Transfer                    June 2009   Screener:          receives a call ultimately intended for the                      Recipient and transfers the calling party to the                      Recipient if appropriate.  Typically, a Screener                      acts on behalf of the Recipient.   Recipient:         the party to which the Originator is ultimately                      connected.3.  Terminology   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this   document are to be interpreted as described inBCP 14,RFC 2119   [RFC2119].4.  Requirements   1.  Any party in a SIP session must be able to transfer any other       party in that session at any point in that session.   2.  The Transferor and the Transferee must not be removed from a       session as part of a transfer transaction.            At first glance, requirement 2 may seem to indicate            that the user experience in a transfer must be            significantly different from what a current Private Branch            Exchange (PBX) or Centrex user expects.  As the call flows            in this document show, this is not the case.  A client may            preserve the current experience.  In fact, without            this requirement, some forms of the current            experience (ringback on transfer failure,            for instance) will be lost.   3.  The Transferor must know whether or not the transfer was       successful.   4.  The Transferee must be able to replace an existing dialog with a       new dialog.   5.  The Transferor and Transferee should indicate their support for       the primitives required to achieve transfer.   6.  The Transferor should provide the Transfer Target and Transferee       with information about the nature and progress of the transfer       operation being attempted.Sparks, et al.           Best Current Practice                  [Page 4]

RFC 5589                    SIP CC Transfer                    June 2009            To meet this requirement, the transfer operation can            be modeled as an ad hoc conference between three            parties, as discussed inSection 9.5.  Using REFER to Achieve Call Transfer   A REFER [RFC3515] can be issued by the Transferor to cause the   Transferee to issue an INVITE to the Transfer Target.  Note that a   successful REFER transaction does not terminate the session between   the Transferor and the Transferee.  If those parties wish to   terminate their session, they must do so with a subsequent BYE   request.  The media negotiated between the transferee and the   Transfer Target is not affected by the media that had been negotiated   between the Transferor and the Transferee.  In particular, the INVITE   issued by the Transferee will have the same Session Description   Protocol (SDP) body it would have if the Transferee had initiated   that INVITE on its own.  Further, the disposition of the media   streams between the Transferor and the Transferee is not altered by   the REFER method.   Agents may alter a session's media through additional signaling.  For   example, they may make use of the SIP hold re-INVITE [RFC3261] or   conferencing extensions described in the conferencing framework   [RFC4353].   To perform the transfer, the Transferor and Transferee could reuse an   existing dialog established by an INVITE to send the REFER.  This   would result in a single dialog shared by two uses -- an invite usage   and a subscription usage.  The call flows for this are shown in   detail inSection 6.2.  However, the approach described in this   document is to avoid dialog reuse.  The issues and difficulties   associated with dialog reuse are described in [RFC5057].   Motivations for reusing the existing dialog include:   1.  There was no way to ensure that a REFER on a new dialog would       reach the particular endpoint involved in a transfer.  Many       factors, including details of implementations and changes in       proxy routing between an INVITE and a REFER could cause the REFER       to be sent to the wrong place.  Sending the REFER down the       existing dialog ensured it got to the endpoint to which we were       already talking.   2.  It was unclear how to associate an existing invite usage with a       REFER arriving on a new dialog, where it was completely obvious       what the association was when the REFER came on the INVITE       usage's dialog.Sparks, et al.           Best Current Practice                  [Page 5]

RFC 5589                    SIP CC Transfer                    June 2009   3.  There were concerns with authorizing out-of-dialog REFERs.  The       authorization policy for REFER in most implementations piggybacks       on the authorization policy for INVITE (which is, in most cases,       based simply on "I placed or answered this call").   Globally Routable UA URIs (GRUUs) [SIP-GRUU] can be used to address   problem 1.  Problem 2 can be addressed using the Target-Dialog header   field defined in [RFC4538].  In the immediate term, this solution to   problem 2 allows the existing REFER authorization policy to be   reused.   As a result, if the Transferee supports the target-dialog extension   and the Transferor knows the Contact URI is routable outside the   dialog, the REFER SHOULD be sent in a new dialog.  If the nature of   the Contact URI is not known or if support for the target-dialog   extension is not known, the REFER SHOULD be sent inside the existing   dialog.  A Transferee MUST be prepared to receive a REFER either   inside or outside a dialog.  One way that a Transferor could know   that a Contact URI is routable outside a dialog is by validation   (e.g., sending an OPTIONS and receiving a response) or if it   satisfies the properties described in the GRUU specification   [SIP-GRUU].   This document does not prescribe the flows and examples precisely as   they are shown, but rather the flows illustrate the principles for   best practice for the transfer feature.  The call flows represent   well-reviewed examples of SIP usage to implement transfer with REFER,   which are Best Common Practice according to IETF consensus.   In most of the following examples, the Transferor is in the   atlanta.example.com domain, the Transferee is in the   biloxi.example.com, and the Transfer Target is in the   chicago.example.com domain.6.  Basic Transfer   Basic Transfer consists of the Transferor providing the Transfer   Target's contact to the Transferee.  The Transferee attempts to   establish a session using that contact and reports the results of   that attempt to the Transferor.  The signaling relationship between   the Transferor and Transferee is not terminated, so the call is   recoverable if the Transfer Target cannot be reached.  Note that the   Transfer Target's contact information has been exposed to the   Transferee.  The provided contact can be used to make new calls in   the future.Sparks, et al.           Best Current Practice                  [Page 6]

RFC 5589                    SIP CC Transfer                    June 2009   The participants in a basic transfer SHOULD indicate support for the   REFER and NOTIFY methods in Allow header fields in INVITE, 200 OK to   INVITE, and OPTIONS messages.  Participants SHOULD also indicate   support for Target-Dialog in the Supported header field.   The diagrams below show the first line of each message.  The first   column of the figure shows the dialog used in that particular   message.  In these diagrams, media is managed through re-INVITE   holds, but other mechanisms (mixing multiple media streams at the UA   or using the conferencing extensions, for example) are valid.   Selected message details are shown labeled as message F1, F2, etc.   Each of the flows below shows the dialog between the Transferor and   the Transferee remaining connected (on hold) during the REFER   process.  While this provides the greatest flexibility for recovery   from failure, it is not necessary.  If the Transferor's agent does   not wish to participate in the remainder of the REFER process and has   no intention of assisting with recovery from transfer failure, it   could emit a BYE to the Transferee as soon as the REFER transaction   completes.  This flow is sometimes known as "unattended transfer" or   "blind transfer".   Figure 1 shows transfer when the Transferee utilizes a GRUU and   supports the target-dialog extension and indicates this to the   Transferor.  As a result, the Transferor sends the REFER outside the   INVITE dialog.  The Transferee is able to match this REFER to the   existing dialog using the Target-Dialog header field in the refer   which references the existing dialog.Sparks, et al.           Best Current Practice                  [Page 7]

RFC 5589                    SIP CC Transfer                    June 20096.1.  Successful Transfer             Transferor           Transferee             Transfer                  |                    |                  Target                  |          INVITE F1 |                    |          dialog1 |<-------------------|                    |                  |          200 OK F2 |                    |          dialog1 |------------------->|                    |                  |            ACK     |                    |          dialog1 |<-------------------|                    |                  |  INVITE (hold)     |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |                  |  ACK               |                    |          dialog1 |------------------->|                    |                  |  REFER F3 (Target-Dialog:1)             |          dialog2 |------------------->|                    |                  |  202 Accepted      |                    |          dialog2 |<-------------------|                    |                  | NOTIFY (100 Trying) F4                  |          dialog2 |<-------------------|                    |                  |            200 OK  |                    |          dialog2 |------------------->|                    |                  |                    |  INVITE F5         |          dialog3 |                    |------------------->|                  |                    |  200 OK            |          dialog3 |                    |<-------------------|                  |                    |  ACK               |          dialog3 |                    |------------------->|                  |  NOTIFY (200 OK) F6|                    |          dialog2 |<-------------------|                    |                  |            200 OK  |                    |          dialog2 |------------------->|                    |                  |  BYE               |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |                  |                    |             BYE    |          dialog3 |                    |<-------------------|                  |                    |             200 OK |          dialog3 |                    |------------------->|   Figure 1: Basic Transfer Call FlowSparks, et al.           Best Current Practice                  [Page 8]

RFC 5589                    SIP CC Transfer                    June 2009   F1 INVITE Transferee -> Transferor   INVITE sips:transferor@atlanta.example.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu, tdialog   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Content-Type: application/sdp   Content-Length: ...   F2 200 OK Transferor -> Transferee   SIP/2.0 200 OK   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   To: <sips:transferor@atlanta.example.com>;tag=31kdl4i3k   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu, tdialog   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Type: application/sdp   Content-Length: ...   F3 REFER Transferor -> Transferee   REFER sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKna9   Max-Forwards: 70   To: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   From: <sips:transferor@atlanta.example.com>;tag=1928301774   Call-ID: a84b4c76e66710   CSeq: 314159 REFER   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: gruu, replaces, tdialog   Require: tdialog   Refer-To: <sips:transfertarget@chicago.example.com>   Target-Dialog: 090459243588173445;local-tag=7553452    ;remote-tag=31kdl4i3k   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Length: 0Sparks, et al.           Best Current Practice                  [Page 9]

RFC 5589                    SIP CC Transfer                    June 2009   F4 NOTIFY Transferee -> Transferor   NOTIFY sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>;tag=1928301774   From: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>    ;tag=a6c85cf   Call-ID: a84b4c76e66710   CSeq: 73 NOTIFY   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, tdialog   Event: refer   Subscription-State: active;expires=60   Content-Type: message/sipfrag   Content-Length: ...   SIP/2.0 100 Trying   F5 INVITE Transferee -> Transfer Target   INVITE sips:transfertarget@chicago.example.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas41234   Max-Forwards: 70   To: <sips:transfertarget@chicago.example.com>   From: <sips:transferee@biloxi.example.com>;tag=j3kso3iqhq   Call-ID: 90422f3sd23m4g56832034   CSeq: 521 REFER   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu, tdialog   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Content-Type: application/sdp   Content-Length: ...Sparks, et al.           Best Current Practice                 [Page 10]

RFC 5589                    SIP CC Transfer                    June 2009   F6 NOTIFY Transferee -> Transferor   NOTIFY sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>;tag=1928301774   From: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>    ;tag=a6c85cf   Call-ID: a84b4c76e66710   CSeq: 74 NOTIFY   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, tdialog   Event: refer   Subscription-State: terminated;reason=noresource   Content-Type: message/sipfrag   Content-Length: ...   SIP/2.0 200 OK6.2.  Transfer with Dialog Reuse   In this scenario, the Transferor does not know the properties of the   Transferee's Contact URI or does not know that the Transferee   supports the Target-Dialog header field.  As a result, the REFER is   sent inside the INVITE dialog.Sparks, et al.           Best Current Practice                 [Page 11]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee             Transfer                  |                    |                  Target                  |         INVITE F1  |                    |          dialog1 |<-------------------|                    |                  |         200 OK F2  |                    |          dialog1 |------------------->|                    |                  |            ACK     |                    |          dialog1 |<-------------------|                    |                  |  INVITE (hold)     |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |                  |  ACK               |                    |          dialog1 |------------------->|                    |                  |  REFER F3          |                    |          dialog1 |------------------->|                    |                  |  202 Accepted      |                    |          dialog1 |<-------------------|                    |                  | NOTIFY (100 Trying) F4                  |          dialog1 |<-------------------|                    |                  |            200 OK  |                    |          dialog1 |------------------->|                    |                  |                    |  INVITE F5         |          dialog2 |                    |------------------->|                  |                    |  200 OK            |          dialog2 |                    |<-------------------|                  |                    |  ACK               |          dialog2 |                    |------------------->|                  |  NOTIFY (200 OK) F6|                    |          dialog1 |<-------------------|                    |                  |            200 OK  |                    |          dialog1 |------------------->|                    |                  |  BYE               |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |                  |                    |             BYE    |          dialog2 |                    |<-------------------|                  |                    |             200 OK |          dialog2 |                    |------------------->|   Figure 2: Transfer with Dialog ReuseSparks, et al.           Best Current Practice                 [Page 12]

RFC 5589                    SIP CC Transfer                    June 2009   F1 INVITE Transferee -> Transferor   INVITE sips:transferor@atlanta.example.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Contact: <sips:transferee@192.0.2.4>   Content-Type: application/sdp   Content-Length: ...   F2 200 OK Transferor -> Transferee   SIP/2.0 200 OK   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   To: <sips:transferor@atlanta.example.com>;tag=31kdl4i3k   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: gruu, replaces   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Type: application/sdp   Content-Length: ...   F3 REFER Transferor -> Transferee   REFER sips:transferee@192.0.2.4 SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKna9   Max-Forwards: 70   To: <sips:transferee@biloxi.example.com>;tag=7553452   From: <sips:transferor@atlanta.example.com>;tag=31kdl4i3k   Call-ID: 090459243588173445   CSeq: 314159 REFER   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Refer-To: <sips:transfertarget@chicago.example.com>   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Length: 0Sparks, et al.           Best Current Practice                 [Page 13]

RFC 5589                    SIP CC Transfer                    June 2009   F4 NOTIFY Transferee -> Transferor   NOTIFY sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>;tag=31kdl4i3k   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29888 INVITE   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Event: refer   Subscription-State: active;expires=60   Content-Type: message/sipfrag   Content-Length: ...   SIP/2.0 100 Trying   F5 INVITE Transferee -> Transfer Target   INVITE sips:transfertarget@chicago.example.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas41234   Max-Forwards: 70   To: <sips:transfertarget@chicago.example.com>   From: <sips:transferee@biloxi.example.com>;tag=j3kso3iqhq   Call-ID: 90422f3sd23m4g56832034   CSeq: 521 REFER   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Contact: <sips:transferee@192.0.2.4>   Content-Type: application/sdp   Content-Length: ...Sparks, et al.           Best Current Practice                 [Page 14]

RFC 5589                    SIP CC Transfer                    June 2009   F6 NOTIFY Transferee -> Transferor   NOTIFY sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>;tag=31kdl4i3k   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29889 INVITE   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Event: refer   Subscription-State: terminated;reason=noresource   Content-Type: message/sipfrag   Content-Length: ...   SIP/2.0 200 OK6.3.  Failed Transfer   This section shows examples of failed transfer attempts.  After the   transfer failure occurs, the Transferor takes the Transferee off hold   and resumes the session.Sparks, et al.           Best Current Practice                 [Page 15]

RFC 5589                    SIP CC Transfer                    June 20096.3.1.  Target Busy             Transferor           Transferee             Transfer                  |                    |                  Target                  |                    |                    |                  |            INVITE  |                    |          dialog1 |<-------------------|                    |                  |            200 OK  |                    |          dialog1 |------------------->|                    |                  |            ACK     |                    |          dialog1 |<-------------------|                    |                  |  INVITE (hold)     |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |                  |  ACK               |                    |          dialog1 |------------------->|                    |                  |  REFER (Target-Dialog:1)                |          dialog2 |------------------->|                    |                  |  202 Accepted      |                    |          dialog2 |<-------------------|                    |                  | NOTIFY (100 Trying)|                    |          dialog2 |<-------------------|                    |                  |            200 OK  |                    |          dialog2 |------------------->|                    |                  |                    |  INVITE            |          dialog3 |                    |------------------->|                  |                    |  486 Busy Here     |          dialog3 |                    |<-------------------|                  |                    |  ACK               |          dialog3 |                    |------------------->|                  | NOTIFY (486 Busy Here)                  |          dialog2 |<-------------------|                    |                  |            200 OK  |                    |          dialog2 |------------------->|                    |                  |  INVITE (unhold)   |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |                  |  ACK               |                    |          dialog1 |------------------->|                    |                  |  BYE               |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |   Figure 3: Failed Transfer - Target BusySparks, et al.           Best Current Practice                 [Page 16]

RFC 5589                    SIP CC Transfer                    June 20096.3.2.  Transfer Target Does Not Answer             Transferor           Transferee             Transfer                  |                    |                  Target                  |            INVITE  |                    |          dialog1 |<-------------------|                    |                  |            200 OK  |                    |          dialog1 |------------------->|                    |                  |            ACK     |                    |          dialog1 |<-------------------|                    |                  |  INVITE (hold)     |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |                  |  ACK               |                    |          dialog1 |------------------->|                    |                  |  REFER             |                    |          dialog2 |------------------->|                    |                  |  202 Accepted      |                    |          dialog2 |<-------------------|                    |                  | NOTIFY (100 Trying)|                    |          dialog2 |<-------------------|                    |                  |            200 OK  |                    |          dialog2 |------------------->|                    |                  |                    |  INVITE            |          dialog3 |                    |------------------->|                  |                    |  180 Ringing       |          dialog3 |                    |<-------------------|                  |          (Transferee gets tired of waiting)                  |                    |  CANCEL            |          dialog3 |                    |------------------->|                  |                    |  200 OK (CANCEL)   |          dialog3 |                    |<-------------------|                  |                 487 Request Cancelled (INVITE)          dialog3 |                    |<-------------------|                  |                    |  ACK               |          dialog3 |                    |------------------->|                  |    NOTIFY (487 Request Cancelled)       |          dialog2 |<-------------------|                    |                  |            200 OK  |                    |          dialog2 |------------------->|                    |                  |  INVITE (unhold)   |                    |          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |                  |  ACK               |                    |          dialog1 |------------------->|                    |                  |  BYE               |                    |Sparks, et al.           Best Current Practice                 [Page 17]

RFC 5589                    SIP CC Transfer                    June 2009          dialog1 |------------------->|                    |                  |  200 OK            |                    |          dialog1 |<-------------------|                    |   Figure 4: Failed Transfer - Target Does Not Answer7.  Transfer with Consultation Hold   Transfer with consultation hold involves a session between the   Transferor and the Transfer Target before the transfer actually takes   place.  This is implemented with SIP Hold and Transfer as described   above.   A nice feature is for the Transferor to let the target know that the   session relates to an intended transfer.  Since many UAs render the   display name in the From header field to the user, a consultation   INVITE could contain a string such as "Incoming consultation from   Transferor with intent to transfer Transferee", where the display   names of the transferor and transferee are included in the string.7.1.  Exposing Transfer Target   The Transferor places the Transferee on hold, establishes a call with   the Transfer Target to alert them to the impending transfer,   terminates the connection with the Transfer Target, then proceeds   with transfer as above.  This variation can be used to provide an   experience similar to that expected by current PBX and Centrex users.   To (hopefully) improve clarity, non-REFER transactions have been   collapsed into one indicator with the arrow showing the direction of   the request.Sparks, et al.           Best Current Practice                 [Page 18]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee             Transfer                  |                    |                  Target                  |                    |                    |          dialog1 | INVITE/200 OK/ACK  |                    |                  |<-------------------|                    |          dialog1 | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |          dialog2 | INVITE/200 OK/ACK  |                    |                  |---------------------------------------->|          dialog2 | BYE/200 OK         |                    |                  |---------------------------------------->|          dialog3 | REFER              |                    |                  |------------------->|                    |          dialog3 | 202 Accepted       |                    |                  |<-------------------|                    |          dialog3 | NOTIFY (100 Trying)|                    |                  |<-------------------|                    |          dialog3 |            200 OK  |                    |                  |------------------->|                    |          dialog4 |                    |  INVITE/200 OK/ACK |                  |                    |------------------->|          dialog3 | NOTIFY (200 OK)    |                    |                  |<-------------------|                    |          dialog3 |            200 OK  |                    |                  |------------------->|                    |          dialog1 | BYE/200 OK         |                    |                  |------------------->|                    |          dialog4 |                    |         BYE/200 OK |                  |                    |<-------------------|   Figure 5: Transfer with Consultation Hold - Exposing Transfer Target7.2.  Protecting Transfer Target   The Transferor places the Transferee on hold, establishes a call with   the Transfer Target and then reverses their roles, transferring the   original Transfer Target to the original Transferee.  This has the   advantage of hiding information about the original Transfer Target   from the original Transferee.  On the other hand, the Transferee's   experience is different than in current systems.  The Transferee is   effectively "called back" by the Transfer Target.   One of the problems with this simplest implementation of a target   protecting transfer is that the Transferee is receiving a new call   from the Transfer Target.  Unless the Transferee's agent has a   reliable way to associate this new call with the call it already has   with the Transferor, it will have to alert the new call on another   appearance.  If this, or some other call-waiting-like UI were notSparks, et al.           Best Current Practice                 [Page 19]

RFC 5589                    SIP CC Transfer                    June 2009   available, the Transferee might be stuck returning a Busy-Here to the   Transfer Target, effectively preventing the transfer.  There are many   ways that correlation could be provided.  The dialog parameters could   be provided directly as header parameters in the Refer-To URI, for   example.  The Replaces mechanism [RFC3891] uses this approach and   solves this problem nicely.   For the flow below, dialog1 means dialog identifier 1, and consists   of the parameters of the Replaces header for dialog 1.  In [RFC3891],   this is the Call-ID, To-tag, and From-tag.   Note that the Transferee's agent emits a BYE to the Transferor's   agent as an immediate consequence of processing the Replaces header.   The Transferor knows that both the Transferee and the Transfer Target   support the Replaces header from the Supported: replaces header   contained in the 200 OK responses from both.   In this scenario, the Transferee utilizes a GRUU as a Contact URI for   reasons discussed inSection 6.3.   Note that the conventions used in the SIP Torture Test Messages   [RFC4475] document are reused, specifically the <allOneLine> tag.Sparks, et al.           Best Current Practice                 [Page 20]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee             Transfer                  |                    |                  Target                  |                    |                    |        dialog1   | INVITE/200 OK/ACK F1 F2                 |                  |<-------------------|                    |        dialog1   | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |        dialog2   | INVITE/200 OK/ACK F3 F4                 |                  |---------------------------------------->|        dialog2   | INVITE (hold)/200 OK/ACK                |                  |---------------------------------------->|        dialog3   | REFER (Target-Dialog:2,                 |                  |  Refer-To:sips:Transferee?Replaces=1) F5|                  |---------------------------------------->|        dialog3   | 202 Accepted       |                    |                  |<----------------------------------------|        dialog3   | NOTIFY (100 Trying)|                    |                  |<----------------------------------------|        dialog3   |                    |            200 OK  |                  |---------------------------------------->|        dialog4   |         INVITE (Replaces:dialog1)/200 OK/ACK F6                  |                    |<-------------------|        dialog1   | BYE/200 OK         |                    |                  |<-------------------|                    |        dialog3   | NOTIFY (200 OK)    |                    |                  |<----------------------------------------|        dialog3   |                    |            200 OK  |                  |---------------------------------------->|        dialog2   | BYE/200 OK         |                    |                  |---------------------------------------->|                  |              (Transferee and target converse)        dialog4   |                    |  BYE/200 OK        |                  |                    |------------------->|   Figure 6: Transfer Protecting Transfer TargetSparks, et al.           Best Current Practice                 [Page 21]

RFC 5589                    SIP CC Transfer                    June 2009   F1 INVITE Transferee -> Transferor   INVITE sips:transferor@atlanta.example.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Content-Type: application/sdp   Content-Length: ...   F2 200 OK Transferor -> Transferee   SIP/2.0 200 OK   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   To: <sips:transferor@atlanta.example.com>;tag=31431   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu, tdialog   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Type: application/sdp   Content-Length: ...   F3 INVITE Transferor -> Transfer Target   INVITE sips:transfertarget@chicago.example.com SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transfertarget@chicago.example.com>   From: <sips:transferor@atlanta.example.com>;tag=763231   Call-ID: 592435881734450904   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: gruu, replaces, tdialog   Require: replaces   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=384i32lw3>   Content-Type: application/sdp   Content-Length: ...Sparks, et al.           Best Current Practice                 [Page 22]

RFC 5589                    SIP CC Transfer                    June 2009   F4 200 OK Transfer Target -> Transferor   SIP/2.0 200 OK   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnas432    ;received=192.0.2.1   To: <sips:transfertarget@chicago.example.com>;tag=9m2n3wq   From: <sips:transferor@atlanta.example.com>;tag=763231   Call-ID: 592435881734450904   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu, tdialog   Contact: <sips:482n4z24kdg@chicago.example.com;gr=8594958>   Content-Type: application/sdp   Content-Length: ...   F5 REFER Transferor -> Transfer Target   REFER sips:482n4z24kdg@chicago.example.com;gr=8594958 SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds9   Max-Forwards: 70   To: <sips:482n4z24kdg@chicago.example.com;gr=8594958>   From: <sips:transferor@atlanta.example.com>;tag=1928301774   Call-ID: a84b4c76e66710   CSeq: 314159 REFER   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: gruu, replaces, tdialog   Require: tdialog   <allOneLine>   Refer-To: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha   ?Replaces=090459243588173445%3Bto-tag%3D7553452%3Bfrom-tag%3D31431>   </allOneLine>   Target-Dialog: 592435881734450904;local-tag=9m2n3wq    ;remote-tag=763231   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Length: 0Sparks, et al.           Best Current Practice                 [Page 23]

RFC 5589                    SIP CC Transfer                    June 2009   F6 INVITE Transfer Target -> Transferee   INVITE sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha SIP/2.0   Via: SIP/2.0/TLS client.chicago.example.com;branch=z9hG4bKnaslu84   Max-Forwards: 70   To: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   From: <sips:transfertarget@chicago.example.com>;tag=341234   Call-ID: kmzwdle3dl3d08   CSeq: 41 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: gruu, replaces, tdialog   Contact: <sips:482n4z24kdg@chicago.example.com;gr=8594958>   Replaces: 090459243588173445;to-tag=7553452;from-tag=31431   Content-Type: application/sdp   Content-Length: ...7.3.  Attended Transfer   The Transferor places the Transferee on hold, establishes a call with   the Transfer Target to alert them to the impending transfer, places   the target on hold, then proceeds with transfer using an escaped   Replaces header field in the Refer-To header.  This is another common   service expected by current PBX and Centrex users.   The Contact URI of the Transfer Target SHOULD be used by the   Transferor as the Refer-To URI, unless the URI is suspected or known   to not be routable outside the dialog.  Otherwise, the Address of   Record (AOR) of the Transfer Target SHOULD be used.  That is, the   same URI that the Transferor used to establish the session with the   Transfer Target should be used.  In case the triggered INVITE is   routed to a different User Agent than the Transfer Target, the   Require: replaces header field SHOULD be used in the triggered   INVITE.  (This is to prevent an incorrect User Agent that does not   support Replaces from ignoring the Replaces and answering the INVITE   without a dialog match.)   It is possible that proxy/service routing may prevent the triggered   INVITE from reaching the same User Agent.  If this occurs, the   triggered invite will fail with a timeout, 403, 404, etc. error.  The   Transferee MAY then retry the transfer with the Refer-To URI set to   the Contact URI.Sparks, et al.           Best Current Practice                 [Page 24]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee             Transfer                  |                    |                  Target                  |                    |                    |         dialog1  | INVITE/200 OK/ACK F1 F2                 |                  |<-------------------|                    |         dialog1  | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |         dialog2  | INVITE/200 OK/ACK F3 F4                 |                  |---------------------------------------->|         dialog2  | INVITE (hold)/200 OK/ACK                |                  |---------------------------------------->|         dialog3  | REFER (Target-Dialog:1,                 |                  |  Refer-To:sips:TransferTarget?Replaces=2) F5                  |------------------->|                    |         dialog3  | 202 Accepted       |                    |                  |<-------------------|                    |         dialog3  | NOTIFY (100 Trying)|                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog4  |        INVITE (Replaces:dialog2)/200 OK/ACK F6                  |                    |------------------->|         dialog2  | BYE/200 OK         |                    |                  |<----------------------------------------|         dialog3  | NOTIFY (200 OK)    |                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog1  | BYE/200 OK         |                    |                  |------------------->|                    |         dialog4  |                    |         BYE/200 OK |                  |                    |<-------------------|   Figure 7: Attended Transfer Call FlowSparks, et al.           Best Current Practice                 [Page 25]

RFC 5589                    SIP CC Transfer                    June 2009   F1 INVITE Transferee -> Transferor   INVITE sips:transferor@atlanta.example.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu, tdialog   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Content-Type: application/sdp   Content-Length: ...   F2 200 OK Transferor -> Transferee   SIP/2.0 200 OK   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   To: <sips:transferor@atlanta.example.com>;tag=31431   From: <sips:transferee@biloxi.example.com>;tag=7553452   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu, tdialog   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Type: application/sdp   Content-Length: ...   F3 INVITE Transferor -> Transfer Target   INVITE sips:transfertarget@chicago.example.com SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transfertarget@chicago.example.com>   From: <sips:transferor@atlanta.example.com>;tag=763231   Call-ID: 592435881734450904   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: gruu, replaces, tdialog   Require: replaces   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=384i32lw3>   Content-Type: application/sdp   Content-Length: ...Sparks, et al.           Best Current Practice                 [Page 26]

RFC 5589                    SIP CC Transfer                    June 2009   F4 200 OK Transfer Target -> Transferor   SIP/2.0 200 OK   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnas432    ;received=192.0.2.1   To: <sips:transfertarget@chicago.example.com>;tag=9m2n3wq   From: <sips:transferor@atlanta.example.com>;tag=763231   Call-ID: 592435881734450904   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces, gruu   Contact: <sips:482n4z24kdg@chicago.example.com;gr=8594958>   Content-Type: application/sdp   Content-Length: ...   F5 REFER Transferor -> Transferee   REFER sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds9   Max-Forwards: 70   To: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   From: <sips:transferor@atlanta.example.com>;tag=1928301774   Call-ID: a84b4c76e66710   CSeq: 314159 REFER   Require: tdialog   <allOneLine>   Refer-To: <sips:482n4z24kdg@chicago.example.com;gr=8594958?   Replaces=592435881734450904%3Bto-tag%3D9m2n3wq%3Bfrom-tag3D763231>   </allOneLine>   Target-Dialog: 592435881734450904;local-tag=9m2n3wq    ;remote-tag=763231   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Length: 0Sparks, et al.           Best Current Practice                 [Page 27]

RFC 5589                    SIP CC Transfer                    June 2009   F6 INVITE Transferee -> Transfer Target   INVITE sips:482n4z24kdg@chicago.example.com;gr=8594958 SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnaslu82   Max-Forwards: 70   To: <sips:482n4z24kdg@chicago.example.com;gr=8594958>   From: <sips:transferee@biloxi.example.com>;tag=954   Call-ID: kmzwdle3dl3d08   CSeq: 41 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: gruu, replaces, tdialog   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Replaces: 592435881734450904;to-tag=9m2n3wq;from-tag=763231   Content-Type: application/sdp   Content-Length: ...7.4.  Recovery When One Party Does Not Support REFER   If protecting or exposing the Transfer Target is not a concern, it is   possible to complete a transfer with consultation hold when only the   transferor and one other party support REFER.  Note that a 405 Method   Not Allowed might be returned instead of the 501 Not Implemented   response.Sparks, et al.           Best Current Practice                 [Page 28]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee             Transfer                  |                    |                  Target                  |                    |                    |         dialog1  | INVITE/200 OK/ACK  |                    |                  |<-------------------|                    |         dialog1  | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |         dialog2  | INVITE/200 OK/ACK  |                    |                  |---------------------------------------->|         dialog2  | INVITE (hold)/200 OK/ACK                |                  |---------------------------------------->|         dialog3  | REFER (Target-Dialog:1,                 |                  |    Refer-To:sips:TransferTarget?Replaces=2)                  |------------------->|                    |         dialog3  | 501 Not Implemented                     |                  |<-------------------|                    |         dialog4  | REFER (Refer-To:sips:Transferee?Replaces=dialog1)                  |---------------------------------------->|         dialog4  | 202 Accepted       |                    |                  |<----------------------------------------|         dialog4  | NOTIFY (100 Trying)|                    |                  |<----------------------------------------|         dialog4  |                    |            200 OK  |                  |---------------------------------------->|         dialog5  |             INVITE (Replaces:dialog1)/200 OK/ACK                  |                    |<-------------------|         dialog4  | NOTIFY (200 OK)    |                    |                  |<----------------------------------------|         dialog4  |                    |            200 OK  |                  |---------------------------------------->|         dialog1  | BYE/200 OK         |                    |                  |<-------------------|                    |         dialog2  | BYE/200 OK         |                    |                  |---------------------------------------->|         dialog5  |                    |  BYE/200 OK        |                  |                    |------------------->|   Figure 8: Recovery When One Party Does Not Support REFER7.5.  Attended Transfer When Contact URI Is Not Known to Route to a      Unique User Agent   It is a requirement ofRFC 3261 that a Contact URI be globally   routable even outside the dialog.  However, due toRFC 2543 User   Agents and some architectures (NAT/Firewall traversal, screening   proxies, Application Layer Gateways (ALGs), etc.) this will notSparks, et al.           Best Current Practice                 [Page 29]

RFC 5589                    SIP CC Transfer                    June 2009   always be the case.  As a result, the method of attended transfer   shown in Figures 6, 7, and 8 SHOULD only be used if the Contact URI   is known to be routable outside the dialog.   Figure 9 shows such a scenario where the Transfer Target Contact URI   is not routable outside the dialog, so the triggered INVITE is sent   to the AOR of the Transfer Target.          Transferor           Transferee  Screening       Transfer              |                  |           Proxy         Target              |                  |             |             |      dialog1 | INVITE/200 OK/ACK|             |             |              |<-----------------|             |             |      dialog1 | INVITE (hold)/200 OK/ACK       |             |              |----------------->|             |             |      dialog2 | INVITE/200 OK/ACK F1 F2        |             |              |--------------------------------|------------>|      dialog2 | INVITE (hold)/200 OK/ACK                     |              |--------------------------------|------------>|      dialog1 | REFER (Refer-To:sips:TargetAOR               |              |         ?Replaces=dialog2&Require=replaces) F3              |----------------->|             |             |      dialog1 | 202 Accepted     |             |             |              |<-----------------|             |             |      dialog1 | NOTIFY (100 Trying)            |             |              |<-----------------|             |             |      dialog1 |          200 OK  |             |             |              |----------------->|             |             |      dialog4 |INVITE (Replaces:dialog2,Require:replaces)/200 OK/ACK F6              |                  |------------>|------------>|      dialog2 | BYE/200 OK       |             |             |              |<-------------------------------|<------------|      dialog1 | NOTIFY (200 OK) F7             |             |              |<-----------------|             |             |      dialog1 |          200 OK  |             |             |              |----------------->|             |             |      dialog1 | BYE/200 OK       |             |             |              |----------------->|             |             |      dialog3 |                  |             |  BYE/200 OK |              |                  |<------------|-------------|   Figure 9: Attended Transfer Call Flow with a Contact URI Not Known to   Be Globally RoutableSparks, et al.           Best Current Practice                 [Page 30]

RFC 5589                    SIP CC Transfer                    June 2009   F1 INVITE Transferor -> Transfer Target   INVITE sips:transfertarget@chicago.example.com SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bK76   Max-Forwards: 70   To: <sips:transfertarget@chicago.example.com>   From: <sips:transferor@atlanta.example.com>;tag=763231   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Contact: <sips:transferor@pc33.atlanta.example.com>   Content-Type: application/sdp   Content-Length: ...   F2 200 OK Transfer Target -> Transferee   SIP/2.0 200 OK   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnas432    ;received=192.0.2.1   To: <sips:transfertarget@chicago.example.com>;tag=9m2n3wq   From: <sips:transferor@atlanta.example.com>;tag=763231   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Contact: <sips:transfertarget@client.chicago.example.com>   Content-Type: application/sdp   Content-Length: ...   F3 REFER Transferor -> Transferee   REFER sips:transferee@192.0.2.4 SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds9   Max-Forwards: 70   To: <sips:transferee@biloxi.example.com>;tag=a6c85cf   From: <sips:transferor@atlanta.example.com>;tag=1928301774   Call-ID: a84b4c76e66710   CSeq: 314160 REFER   <allOneLine>   Refer-To: <sips:transfertarget@chicago.example.com?Replaces=   090459243588173445%3Bto-tag%3D9m2n3wq%3Bfrom-tag%3D763231   &Require=replaces>   <allOneLine>   Contact: <sips:transferor@pc33.atlanta.example.com>   Content-Length: 0Sparks, et al.           Best Current Practice                 [Page 31]

RFC 5589                    SIP CC Transfer                    June 2009   F4 INVITE Transferee -> Transfer Target   INVITE sips:transfertarget@chicago.example.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnaslu82   Max-Forwards: 70   To: <sips:transfertarget@chicago.example.com>   From: <sips:transferee@biloxi.example.com>;tag=954   Call-ID: 20482817324945934422930   CSeq: 42 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Contact: <sips:transferee@192.0.2.4>   Replaces: 090459243588173445;to-tag=9m2n3wq;from-tag=763231   Require: replaces   Content-Type: application/sdp   Content-Length: ...   F5 NOTIFY Transferee -> Transferor   NOTIFY sips:transferor@pc33.atlanta.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>;tag=1928301774   From: <sips:transferee@biloxi.example.com>;tag=a6c85cf   Call-ID: a84b4c76e66710   CSeq: 76 NOTIFY   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Event: refer;id=98873867   Subscription-State: terminated;reason=noresource   Content-Type: message/sipfrag   Content-Length: ...   SIP/2.0 200 OK   Figure 10 shows a failure case in which the AOR URI fails to reach   the Transfer Target.  As a result, the transfer is retried with the   Contact URI, at which point it succeeds.   Note that there is still no guarantee that the correct endpoint will   be reached, and the result of this second REFER may also be a   failure.  In that case, the Transferor could fall back to unattended   transfer or give up on the transfer entirely.  Since two REFERs are   sent within the dialog creating two distinct subscriptions, the   Transferee uses the 'id' parameter in the Event header field to   distinguish notifications for the two subscriptions.Sparks, et al.           Best Current Practice                 [Page 32]

RFC 5589                    SIP CC Transfer                    June 2009          Transferor           Transferee  Screening      Transfer              |                  |           Proxy         Target              |                  |             |             |      dialog1 | INVITE/200 OK/ACK|             |             |              |<-----------------|             |             |      dialog1 | INVITE (hold)/200 OK/ACK       |             |              |----------------->|             |             |      dialog2 | INVITE/200 OK/ACK F1 F2        |             |              |--------------------------------|------------>|      dialog2 | INVITE (hold)/200 OK/ACK                     |              |--------------------------------|------------>|      dialog1 | REFER (Refer-To:sips:TargetAOR?              |              |       Replaces=dialog2&Require=replaces) F3  |              |----------------->|             |             |      dialog1 | 202 Accepted     |             |             |              |<-----------------|             |             |      dialog1 | NOTIFY (100 Trying)            |             |              |<-----------------|             |             |      dialog1 |          200 OK  |             |             |              |----------------->|             |             |      dialog3 |                  |INVITE (Replaces:dialog2,  |              |                  | Require:replaces)/403/ACK |              |                  |------------>|             |      dialog1 | NOTIFY (403 Forbidden) F4      |             |              |<-----------------|             |             |      dialog1 |          200 OK  |             |             |              |----------------->|             |             |      dialog1 |REFER(Refer-To:sips:TargetContact?Replaces=dialog2) F5              |----------------->|             |             |      dialog1 | 202 Accepted     |             |             |              |<-----------------|             |             |      dialog1 | NOTIFY (100 Trying)            |             |              |<-----------------|             |             |      dialog1 |          200 OK  |             |             |              |----------------->|             |             |      dialog4 |                INVITE (Replaces:dialog2)/200 OK/ACK F6              |                  |------------>|------------>|      dialog2 | BYE/200 OK       |             |             |              |<-------------------------------|<------------|      dialog1 | NOTIFY (200 OK) F7             |             |              |<-----------------|             |             |      dialog1 |          200 OK  |             |             |              |----------------->|             |             |      dialog1 | BYE/200 OK       |             |             |              |----------------->|             |             |      dialog3 |                  |             |  BYE/200 OK |              |                  |<------------|-------------|Sparks, et al.           Best Current Practice                 [Page 33]

RFC 5589                    SIP CC Transfer                    June 2009   Figure 10: Attended Transfer Call Flow with Non-Routable Contact URI   and AOR Failure   F1 INVITE Transferor -> Transfer Target   INVITE sips:transfertarget@chicago.example.com SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bK76   Max-Forwards: 70   To: <sips:transfertarget@chicago.example.com>   From: <sips:transferor@atlanta.example.com>;tag=763231   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Contact: <sips:transferor@pc33.atlanta.example.com>   Content-Type: application/sdp   Content-Length: ...   F2 200 OK Transfer Target -> Transferee   SIP/2.0 200 OK   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnas432    ;received=192.0.2.1   To: <sips:transfertarget@chicago.example.com>;tag=9m2n3wq   From: <sips:transferor@atlanta.example.com>;tag=763231   Call-ID: 090459243588173445   CSeq: 29887 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Contact: <sips:transfertarget@client.chicago.example.com>   Content-Type: application/sdp   Content-Length: ...Sparks, et al.           Best Current Practice                 [Page 34]

RFC 5589                    SIP CC Transfer                    June 2009   F3 REFER Transferor -> Transferee   REFER sips:transferee@192.0.2.4 SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds9   Max-Forwards: 70   To: <sips:transferee@biloxi.example.com>;tag=a6c85cf   From: <sips:transferor@atlanta.example.com>;tag=1928301774   Call-ID: a84b4c76e66710   CSeq: 314159 REFER   <allOneLine>   Refer-To: <sips:transfertarget@chicago.example.com?Replaces=   090459243588173445%3Bto-tag%3D9m2n3wq%3Bfrom-tag%3D763231   &Require=replaces>   </allOneLine>   Contact: <sips:transferor@pc33.atlanta.example.com>   Content-Length: 0   F4 NOTIFY Transferee -> Transferor   NOTIFY sips:transferor@pc33.atlanta.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>;tag=1928301774   From: <sips:transferee@biloxi.example.com>;tag=a6c85cf   Call-ID: a84b4c76e66710   CSeq: 74 NOTIFY   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Event: refer;id=314159   Subscription-State: terminated;reason=noresource   Content-Type: message/sipfrag   Content-Length: ...   SIP/2.0 403 ForbiddenSparks, et al.           Best Current Practice                 [Page 35]

RFC 5589                    SIP CC Transfer                    June 2009   F5 REFER Transferor -> Transferee   REFER sips:transferee@192.0.2.4 SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bKnashds9   Max-Forwards: 70   To: <sips:transferee@biloxi.example.com>;tag=a6c85cf   From: <sips:transferor@atlanta.example.com>;tag=1928301774   Call-ID: a84b4c76e66710   CSeq: 314160 REFER   <allOneLine>   Refer-To: <sips:transfertarget@client.chicago.example.com   ?Replaces=090459243588173445%3Bto-tag%3D9m2n3wq   %3Bfrom-tag%3D763231>   </allOneLine>   Contact: <sips:transferor@pc33.atlanta.example.com>   Content-Length: 0   F6 INVITE Transferee -> Transfer Target   INVITE sips:transfertarget@client.chicago.example.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnaslu82   Max-Forwards: 70   To: <sips:transfertarget@chicago.example.com>   From: <sips:transferee@biloxi.example.com>;tag=954   Call-ID: 20482817324945934422930   CSeq: 42 INVITE   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Contact: <sips:transferee@192.0.2.4>   Replaces: 090459243588173445;to-tag=9m2n3wq;from-tag=763231   Content-Type: application/sdp   Content-Length: ...Sparks, et al.           Best Current Practice                 [Page 36]

RFC 5589                    SIP CC Transfer                    June 2009   F7 NOTIFY Transferee -> Transferor   NOTIFY sips:transferor@pc33.atlanta.com SIP/2.0   Via: SIP/2.0/TLS 192.0.2.4;branch=z9hG4bKnas432   Max-Forwards: 70   To: <sips:transferor@atlanta.example.com>;tag=1928301774   From: <sips:transferee@biloxi.example.com>;tag=a6c85cf   Call-ID: a84b4c76e66710   CSeq: 76 NOTIFY   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY   Supported: replaces   Event: refer;id=314160   Subscription-State: terminated;reason=noresource   Content-Type: message/sipfrag   Content-Length: ...   SIP/2.0 200 OK   To prevent this scenario from happening, the Transfer Target SHOULD   use a Contact URI that is routable outside the dialog, which will   result in the call flow of Figure 7.7.6.  Semi-Attended Transfer   In any of the consultation hold flows above, the Transferor may   decide to terminate its attempt to contact the Transfer Target before   that session is established.  Most frequently, that will be the end   of the scenario, but in some circumstances, the Transferor may wish   to proceed with the transfer action.  For example, the Transferor may   wish to complete the transfer knowing that the Transferee will end up   eventually talking to the Transfer Target's voicemail service.  Some   PBX systems support this feature, sometimes called "semi-attended   transfer", that is effectively a hybrid between a fully attended   transfer and an unattended transfer.  A call flow is shown in Figure   11.  In this flow, the Transferor's User Agent continues the transfer   as an attended transfer even after the Transferor hangs up.  Note   that media must be played to the Transfer Target upon answer --   otherwise, the Target may hang up and the resulting transfer   operation will fail.Sparks, et al.           Best Current Practice                 [Page 37]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee            Transfer                  |                    |                 Target                  |                    |                    |         dialog1  | INVITE/200 OK/ACK F1 F2                 |                  |<-------------------|                    |         dialog1  | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |         dialog2  | INVITE             |                    |                  |---------------------------------------->|         dialog2  |                    |       180 Ringing  |                  |<----------------------------------------|               Transferor hangs up but wants transfer to continue                  |                    |                    |                  | User Agent continues transfer operation |                  |                    |                    |         dialog2  |                    |           200 OK   |                  |<----------------------------------------|         dialog2  | ACK                |                    |                  |---------------------------------------->|         dialog2  | Media Played to keep Target from hanging up                  |========================================>|         dialog3  | REFER (Target-Dialog:1,                 |                  |  Refer-To:sips:TransferTarget?Replaces=2)                  |------------------->|                    |         dialog3  | 202 Accepted       |                    |                  |<-------------------|                    |         dialog3  | NOTIFY (100 Trying)|                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog4  |             INVITE (Replaces:dialog2)/200 OK/ACK                  |                    |------------------->|         dialog2  | BYE/200 OK         |                    |                  |<----------------------------------------|         dialog3  | NOTIFY (200 OK)    |                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog1  | BYE/200 OK         |                    |                  |------------------->|                    |         dialog4  |                    |         BYE/200 OK |                  |                    |<-------------------|   Figure 11: Recommended Semi-Attended Transfer Call Flow   Two other possible semi-attended transfer call flows are shown in   Figures 12 and 13.  However, these call flows are NOT RECOMMENDED due   to race conditions.  In both of these flows, when the TransferorSparks, et al.           Best Current Practice                 [Page 38]

RFC 5589                    SIP CC Transfer                    June 2009   hangs up, the Transferor attempts to revert to unattended transfer by   sending a CANCEL to the target.  This can result in two race   conditions.  One is that the target answers despite the CANCEL and   the resulting unattended transfer fails.  This race condition can be   eliminated by the Transferor waiting to send the REFER until the 487   response from the target is returned.  Instead of a 487, a 200 OK may   be returned indicating that the target has answered the consultation   call.  In this case, the call flow in Figure 13 must be followed.  In   this flow, the Transferor must play some kind of media to the Target   to prevent the Target from hanging up, or the transfer will fail.   That is, the human at the Transfer Target will hear silence from when   they answer (message F1) until the transfer completes (F3 and they   are talking to the Transferee unless some media is played (F2)).   The second race condition occurs in Figure 12 if the Transfer Target   goes "off hook" after the CANCEL is received and the 487 returned.   This may result in a 486 Busy Here response to the unattended   transfer.   The recommended call flow of Figure 11 does not utilize a CANCEL and   does not suffer from these race conditions.Sparks, et al.           Best Current Practice                 [Page 39]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee            Transfer                  |                    |                 Target                  |                    |                    |         dialog1  | INVITE/200 OK/ACK  |                    |                  |<-------------------|                    |         dialog1  | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |         dialog2  | INVITE                                  |                  |---------------------------------------->|         dialog2  | 180 Ringing                             |                  |<----------------------------------------|                  |                                         |                  |  Transferor gives up waiting            |                  |                                         |         dialog2  | CANCEL                                  |                  |---------------------------------------->|         dialog2  | 200 OK                                  |                  |<----------------------------------------|         dialog2  | 487 Request Terminated                  |                  |<----------------------------------------|         dialog2  | ACK                                     |                  |---------------------------------------->|         dialog3  | REFER (Target-Dialog:1) F3              |                  |------------------->|                    |         dialog3  | 202 Accepted       |                    |                  |<-------------------|                    |         dialog3  | NOTIFY (100 Trying)|                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog4  |                INVITE/200 OK/ACK        |                  |                    |------------------->|         dialog3  | NOTIFY (200 OK)    |                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog1  | BYE/200 OK         |                    |                  |------------------->|                    |         dialog4  |                    |         BYE/200 OK |                  |                    |<-------------------|   Figure 12: Semi-Attended Transfer as Blind Transfer Call Flow (Not   Recommended)Sparks, et al.           Best Current Practice                 [Page 40]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee            Transfer                  |                    |                 Target                  |                    |                    |         dialog1  | INVITE/200 OK/ACK  |                    |                  |<-------------------|                    |         dialog1  | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |         dialog2  | INVITE                                  |                  |---------------------------------------->|         dialog2  | 180 Ringing                             |                  |<----------------------------------------|                  |                                         |                  |Transferor gives up waiting but Target answers                  |                                         |         dialog2  | CANCEL                                  |                  |---------------------------------------->|         dialog2  | 200 OK (CANCEL)                         |                  |<----------------------------------------|         dialog2  | 200 OK (INVITE) F1                      |                  |<----------------------------------------|         dialog2  | ACK                                     |                  |---------------------------------------->|         dialog2  | INVITE (hold)/200 OK/ACK                |                  |---------------------------------------->|                  |  Tones or media played avoid silence F2 |                  |========================================>|         dialog1  |REFER (Refer-To:sips:TransferTarget      |                  |                      ?Replaces=dialog2) |                  |------------------->|                    |         dialog1  | 202 Accepted       |                    |                  |<-------------------|                    |         dialog1  | NOTIFY (100 Trying)|                    |                  |<-------------------|                    |         dialog1  |            200 OK  |                    |                  |------------------->|                    |         dialog3  |         INVITE (Replaces:dialog2)/200 OK/ACK F3                  |                    |------------------->|         dialog2  | BYE/200 OK         |                    |                  |<----------------------------------------|         dialog1  | NOTIFY (200 OK)    |                    |                  |<-------------------|                    |         dialog1  |            200 OK  |                    |                  |------------------->|                    |         dialog1  | BYE/200 OK         |                    |                  |------------------->|                    |         dialog3  |                    |         BYE/200 OK |                  |                    |<-------------------|Sparks, et al.           Best Current Practice                 [Page 41]

RFC 5589                    SIP CC Transfer                    June 2009   Figure 13: Semi-Attended Transfer as Attended Transfer Call Flow (Not   Recommended)7.7.  Attended Transfer Fallback to Basic Transfer   In this flow, an attempted attended transfer fails so the Transferor   falls back to basic transfer.   The call flow in Figure 14 shows the use of Require: replaces in the   INVITE sent by the Transferor to the Transfer Target in which the   Transferor's intention at the time of sending the INVITE to the   Transfer Target was known to be to complete an attended transfer.   Since the Target does not support Replaces, the INVITE is rejected   with a 420 Bad Extension response, and the Transferor switches from   attended transfer to basic transfer immediately.Sparks, et al.           Best Current Practice                 [Page 42]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee             Transfer                  |                    |                  Target                  |                    |                    |         dialog1  | INVITE/200 OK/ACK  |                    |                  |<-------------------|                    |         dialog1  |   OPTIONS/200 OK   |                    |                  |------------------->|                    |         dialog1  | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |         dialog2  | INVITE (Require:replaces)               |                  |---------------------------------------->|         dialog2  |                     420 Bad Extension   |                  |<----------------------------------------|         dialog2  |    ACK                                  |                  |---------------------------------------->|         dialog1  | REFER (Refer-To:sips:TransferTarget)    |                  |------------------->|                    |         dialog1  |    202 Accepted    |                    |                  |<-------------------|                    |         dialog1  | NOTIFY (100 Trying)|                    |                  |<-------------------|                    |         dialog1  |            200 OK  |                    |                  |------------------->|                    |         dialog3  |                    |  INVITE/200 OK/ACK |                  |                    |------------------->|         dialog1  | NOTIFY (200 OK)    |                    |                  |<-------------------|                    |         dialog1  |            200 OK  |                    |                  |------------------->|                    |         dialog1  | BYE/200 OK         |                    |                  |------------------->|                    |         dialog3  |                    |         BYE/200 OK |                  |                    |<-------------------|   Figure 14: Attended Transfer Fallback to Basic Transfer Using   Require:replaces   Figure 15 shows the use of OPTIONS when the Transferee and Transfer   Target do not explicitly indicate support for the REFER method and   Replaces header fields in Allow and Supported header fields and the   Transferor did not have the intention of performing an attended   transfer when the INVITE to the Target was sent.  In dialog1, the   Transferor determines, using OPTIONS, that the Transferee does   support REFER and Replaces.  As a result, the Transferor begins the   attended transfer by placing the Transferee on hold and calling the   Transfer Target.  Using an OPTIONS in dialog2, the Transferor   determines that the target does not support either REFER or Replaces,Sparks, et al.           Best Current Practice                 [Page 43]

RFC 5589                    SIP CC Transfer                    June 2009   making attended transfer impossible.  The Transferor then ends   dialog2 by sending a BYE then sends a REFER to the Transferee using   the AOR URI of the Transfer Target.             Transferor           Transferee             Transfer                  |                    |                  Target                  |                    |                    |         dialog1  | INVITE/200 OK/ACK  |                    |                  |<-------------------|                    |         dialog1  |   OPTIONS/200 OK   |                    |                  |------------------->|                    |         dialog1  | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |         dialog2  | INVITE/200 OK/ACK  |                    |                  |---------------------------------------->|         dialog2  | OPTIONS/200 OK     |                    |                  |---------------------------------------->|         dialog2  |    BYE/200 OK      |                    |                  |---------------------------------------->|         dialog3  |REFER (Target-Dialog:1,                  |                  |          Refer-To:sips:TransferTarget)  |                  |------------------->|                    |         dialog3  |    202 Accepted    |                    |                  |<-------------------|                    |         dialog3  | NOTIFY (100 Trying)|                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog4  |                    |  INVITE/200 OK/ACK |                  |                    |------------------->|         dialog3  | NOTIFY (200 OK)    |                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog1  | BYE/200 OK         |                    |                  |------------------->|                    |         dialog4  |                    |         BYE/200 OK |                  |                    |<-------------------|   Figure 15: Attended Transfer Fallback to Basic TransferSparks, et al.           Best Current Practice                 [Page 44]

RFC 5589                    SIP CC Transfer                    June 20098.  Transfer with Referred-By   In the previous examples, the Transfer Target does not have   definitive information about what party initiated the transfer, or,   in some cases, even that transfer is taking place.  The Referred-By   mechanism [RFC3892] provides a way for the Transferor to provide the   Transferee with a way to let the Transfer Target know what party   initiated the transfer.   The simplest and least secure approach just involves the inclusion of   the Referred-By header field in the REFER, which is then copied into   the triggered INVITE.  However, a more secure mechanism involving the   Referred-By security token, which is generated and signed by the   Transferor and passed in a message body to the Transferee then to the   Transfer Target.   The call flow in Figure 16 shows the Referred-By header field and   body in the REFER F5 and triggered INVITE F6.  Note that the Secure/   Multipurpose Internet Mail Extensions (S/MIME) signature is not shown   in the example below.  The conventions used in the SIP Torture Test   Messages [RFC4475] document are reused, specifically the <hex> and   <allOneLine> tags.Sparks, et al.           Best Current Practice                 [Page 45]

RFC 5589                    SIP CC Transfer                    June 2009             Transferor           Transferee             Transfer                  |                    |                  Target                  |                    |                    |         dialog1  | INVITE/200 OK/ACK F1 F2                 |                  |<-------------------|                    |         dialog1  | INVITE (hold)/200 OK/ACK                |                  |------------------->|                    |         dialog2  | INVITE/200 OK/ACK F3 F4                 |                  |---------------------------------------->|         dialog2  | INVITE (hold)/200 OK/ACK                |                  |---------------------------------------->|         dialog3  | REFER (Target-Dialog:1, Referred-By:Transferor,                  |  Refer-To:sips:TransferTarget?Replaces=2) F5                  |------------------->|                    |         dialog3  | 202 Accepted       |                    |                  |<-------------------|                    |         dialog3  | NOTIFY (100 Trying)|                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog4  |        INVITE (Replaces:dialog2,        |                  |         Referred-By:Transferor )/200 OK/ACK F6                  |                    |------------------->|         dialog2  | BYE/200 OK         |                    |                  |<----------------------------------------|         dialog3  | NOTIFY (200 OK)    |                    |                  |<-------------------|                    |         dialog3  |            200 OK  |                    |                  |------------------->|                    |         dialog1  | BYE/200 OK         |                    |                  |------------------->|                    |         dialog4  |                    |         BYE/200 OK |                  |                    |<-------------------|   Figure 16: Attended Transfer Call Flow with Referred-BySparks, et al.           Best Current Practice                 [Page 46]

RFC 5589                    SIP CC Transfer                    June 2009   F5 REFER Transferor -> Transferee   REFER sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha SIP/2.0   Via: SIP/2.0/TLS pc33.atlanta.example.com;branch=z9hG4bK392039842   Max-Forwards: 70   To: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   From: <sips:transferor@atlanta.example.com>;tag=1928301774   Call-ID: a84b4c76e66710   CSeq: 314160 REFER   <allOneLine>   Refer-To: <sips:482n4z24kdg@chicago.example.com;gr=8594958   ?Replaces=090459243588173445%3Bto-tag%3D9m2n3wq%3Bfrom-tag   %3D763231&Require=replaces>   </allOneLine>   Supported: gruu, replaces, tdialog   Require: tdialog   Referred-By: <sips:transferor@atlanta.example.com>    ;cid="20398823.2UWQFN309shb3@atlanta.example.com"   Target-Dialog: 592435881734450904;local-tag=9m2n3wq;remote-tag=763231   Contact: <sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>   Content-Type: multipart/mixed; boundary=unique-boundary-1   Content-Length: ...   --unique-boundary-1   Content-ID: <20398823.2UWQFN309shb3@atlanta.example.com>   Content-Length: 2961   Content-Type: multipart/signed;                protocol="application/pkcs-7-signature";                micalg=sha1;                boundary="----590F24D439B31E08745DEF0CD9397189"   ------590F24D439B31E08745DEF0CD9397189   Content-Type: message/sipfrag   Date: Thu, 18 Sep 2003 13:07:43 GMT   <allOneLine>   Refer-To: <sips:482n4z24kdg@chicago.example.com;gr=8594958   ?Replaces=090459243588173445%3B   to-tag%3D9m2n3wq%3Bfrom-tag%3D763231&Require=replaces>   </allOneLine>   Referred-By: <sips:transferor@atlanta.example.com>    ;cid="20398823.2UWQFN309shb3@atlanta.example.com"   ------590F24D439B31E08745DEF0CD9397189   Content-Type: application/pkcs-7-signature; name="smime.p7s"Sparks, et al.           Best Current Practice                 [Page 47]

RFC 5589                    SIP CC Transfer                    June 2009   Content-Transfer-Encoding: binary   Content-Disposition: attachment; filename="smime.p7s"   <hex>3082088806092A86   4886F70D010702A082087930820875020101310B300906052B0E03021A050030   . . . (Signature not shown)   8E63D306487A740A197A3970594CF47DD385643B1DC49FF767A3D2B428388966   79089AAD95767F</hex>   ------590F24D439B31E08745DEF0CD9397189--   --unique_boundary-1   F6 INVITE Transferee -> Transfer Target   INVITE sips:482n4z24kdg@chicago.example.com;gr=8594958 SIP/2.0   Via: SIP/2.0/TLS referee.example;branch=z9hG4bKffe209934aac   To: <sips:482n4z24kdg@chicago.example.com;gr=8594958>   From: <sips:transferee@biloxi.example.com>;tag=2909034023   Call-ID: fe9023940-a3465@referee.example   CSeq: 889823409 INVITE   Max-Forwards: 70   Contact: <sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>   Referred-By: <sips:transferor@atlanta.example.com>      ;cid="20398823.2UWQFN309shb3@atlanta.example.com"   Replaces:090459243588173445;to-tag=9m2n3wq;from-    tag=76323   Require: replaces   Supported: gruu, replaces, tdialog   Content-Type: multipart/mixed; boundary=my-boundary-9   Content-Length: ...   --my-boundary-9   Content-Type: application/sdp   Content-Length: 156   v=0   o=referee 2890844526 2890844526 IN IP4 referee.example   s=Session SDP   c=IN IP4 referee.example   t=0 0   m=audio 49172 RTP/AVP 0   a=rtpmap:0 PCMU/8000Sparks, et al.           Best Current Practice                 [Page 48]

RFC 5589                    SIP CC Transfer                    June 2009   --my-boundary-9   Content-Length: 2961   Content-Type: multipart/signed;                protocol="application/pkcs-7-signature";                micalg=sha1;                boundary="----590F24D439B31E08745DEF0CD9397189"   ------590F24D439B31E08745DEF0CD9397189   Content-Type: message/sipfrag   Date: Thu, 18 Sep 2003 13:07:43 GMT   <allOneLine>   Refer-To: <sips:transfertarget@chicago.example.com;   Replaces=090459243588173445%3B   to-tag%3D9m2n3wq%3Bfrom-tag%3D763231&Require=replaces>   </allOneLine>   Referred-By: <sips:transferor@atlanta.example.com>    ;cid="20398823.2UWQFN309shb3@atlanta.example.com"   ------590F24D439B31E08745DEF0CD9397189   Content-Type: application/pkcs-7-signature; name="smime.p7s"   Content-Transfer-Encoding: binary   Content-Disposition: attachment; filename="smime.p7s"   <hex>3082088806092A86   4886F70D010702A082087930820875020101310B300906052B0E03021A050030   . . .  (Signature not shown)   8E63D306487A740A197A3970594CF47DD385643B1DC49FF767A3D2B428388966   79089AAD95767F</hex>   ------590F24D439B31E08745DEF0CD9397189--   --my-boundary-9--9.  Transfer as an Ad Hoc Conference   In this flow, shown in Figure 17, Bob does an attended transfer of   Alice to Carol.  In order to keep both Alice and Carol fully informed   of the nature and state of the transfer operation, Bob acts as a   focus [RFC4579] and hosts an ad hoc conference involving Alice, Bob,   and Carol.  Alice and Carol subscribe to the conference package   [RFC4575] of Bob's focus, which allows them to know the exact status   of the operation.  After the transfer operation is complete, Bob   deletes the conference.Sparks, et al.           Best Current Practice                 [Page 49]

RFC 5589                    SIP CC Transfer                    June 2009   This call flow meets requirement 6 ofSection 4.  NOTIFY messages   related to the refer package are indicated as NOTIFY (refer), while   NOTIFYs related to the Conference Info package are indicated as   NOTIFY (Conf-Info).   Note that any type of semi-attended transfer in which media mixing or   relaying could be implemented using this model.  In addition to   simply mixing, the focus could introduce additional media signals   such as simulated ring tone or on hold announcements to improve the   user experience.   Alice                  Bob                 Carol      |                    |                    |      | INVITE             |                    |      |------------------->|                    |      |   180 Ringing      |                    |      |<-------------------|                    |      |     200 OK         |                    |      |<-------------------|                    |      |        ACK         |                    |      |------------------->|                    |      |        RTP         |                    |      |<==================>|                    |      |                    |                    |   Bob places Alice on hold and begins acting like a focus      |                    |                    |      | INVITE (hold) Contact:Conf-ID;isfocus   |      |<-------------------|                    |      |    200 OK          |                    |      |------------------->|                    |      |        ACK         |                    |      |<-------------------|                    |      |                    |                    |      | Alice subscribes to the conference package      |                    |                    |      | SUBSCRIBE sip:Conf-ID                   |      |------------------->|                    |      |     200 OK         |                    |      |<-------------------|                    |      | NOTIFY (Conf-Info) |                    |      |<-------------------|                    |      |     200 OK         |                    |      |------------------->|                    |      |                    |                    |      |       Bob begins consultation operation |      |                    |                    |      |INVITE Require:replaces Contact:Conf-ID;isfocus      |                    |------------------->|Sparks, et al.           Best Current Practice                 [Page 50]

RFC 5589                    SIP CC Transfer                    June 2009      |                    |   180 Ringing      |      |                    |<-------------------|      |                    |     200 OK         |      |                    |<-------------------|      |                    |       ACK          |      |                    |------------------->|      |                    |        RTP         |      |                    |<==================>|      |                    |                    |      |Carol subscribes to the conference package      |                - learns Bob is on hold  |      |                    |                    |      |                    |SUBSCRIBE sip:Conf-ID      |                    |<-------------------|      |                    |      200 OK        |      |                    |------------------->|      |                    | NOTIFY (Conf-Info) |      |                    |------------------->|      |                    |      200 OK        |      |                    |<-------------------|      |                    |                    |      | Alice learns that Bob is talking to Carol      |                    |                    |      | NOTIFY (Conf-Info) |                    |      |<-------------------|                    |      |     200 OK         |                    |      |------------------->|                    |      |                    |  INVITE (hold)     |      |                    |------------------->|      |                    |      200 OK        |      |                    |<-------------------|      |                    |      ACK           |      |                    |------------------->|      |                    |                    |      | Alice learns that Carol is now on hold  |      |                    |                    |      | NOTIFY (Conf-Info) |                    |      |<-------------------|                    |      |     200 OK         |                    |      |------------------->|                    |      |                    |                    |      |           Bob begins transfer operation |      |                    |                    |      |     REFER Refer-To: Carol               |      |<-------------------|                    |      |     202 Accepted   |                    |      |------------------->|                    |      | NOTIFY (Refer)     |                    |Sparks, et al.           Best Current Practice                 [Page 51]

RFC 5589                    SIP CC Transfer                    June 2009      |------------------->|                    |      |     200 OK         |                    |      |<-------------------|                    |      |  INVITE Replaces:B-C Contact:Alice      |      |---------------------------------------->|      |                 200 OK                  |      |<----------------------------------------|      |                   ACK                   |      |---------------------------------------->|      |                    RTP                  |      |<=======================================>|      |                    |       BYE          |      |                    |<-------------------|      |                    |      200 OK        |      |                    |------------------->|      | NOTIFY (Refer)     |                    |      |------------------->|                    |      |     200 OK         |                    |      |<-------------------|                    |      |                    |                    |      | Bob terminates the ad-hoc conference    |      |                    |                    |      |       BYE          |                    |      |<-------------------|                    |      |     200 OK         |                    |      |------------------->|                    |      |                    | NOTIFY (Conf-Info) |      |                    |------------------->|      |                    |      200 OK        |      |                    |<-------------------|      | NOTIFY (Conf-Info) |                    |      |<-------------------|                    |      |     200 OK         |                    |      |------------------->|                    |   Figure 17: Attended Transfer as an Ad Hoc Conference10.  Transfer with Multiple Parties   In this example, shown in Figure 18, the Originator places a call to   the Facilitator who reaches the Recipient through the Screener.  The   Recipient's contact information is exposed to the Facilitator and the   Originator.  This example is provided for clarification of the   semantics of the REFER method only, and it should not be used as the   design of an implementation.Sparks, et al.           Best Current Practice                 [Page 52]

RFC 5589                    SIP CC Transfer                    June 2009       Originator   Facilitator   Screener   Recipient      |            |            |          |   1  |INVITE/200 OK/ACK        |          |"Get Fred for me!"      |----------->|            |          |     "Right away!"   2  |INVITE (hold)/200 OK/ACK |          |      |<-----------|            |          |   2  |            |INVITE/200 OK/ACK      |"I have a call      |            |----------->|          |from Mary for Fred"   2  |            |INVITE (hold)/200 OK/ACK   "Hold please"      |            |<-----------|          |   3  |            |            |INVITE/200 OK/ACK      |            |            |--------->|"You have a call      |            |            |          |from Mary"      |            |            |          |  "Put her through"   3  |            |            |INVITE (hold)/200 OK/ACK      |            |            |--------->|   4  |            |REFER       |          |      |            |<-----------|          |   4  |            |202 Accepted|          |      |            |----------->|          |   4  |            |NOTIFY (100 Trying)    |      |            |----------->|          |   4  |            |200 OK      |          |      |            |<-----------|          |   5  |            |INVITE/200 OK/ACK      |      |            |---------------------->|"This is Fred"   4  |            |NOTIFY (200 OK)        |  "Please hold for      |            |----------->|          |              Mary"   4  |            |200 OK      |          |      |            |<-----------|          |   2  |            |BYE/200 OK  |          |      |            |<-----------|          |   3  |            |            |BYE/200 OK|      |            |            |--------->|   5  |            |INVITE (hold)/200 OK/ACK      |            |---------------------->|   6  |REFER       |            |          |      |<-----------|            |          |   6  |202 Accepted|            |          |      |----------->|            |          |   6  |NOTIFY (100 Trying)      |          |      |----------->|            |          |   6  |200 OK      |            |          |      |<-----------|            |          |   7  |INVITE/200 OK/ACK        |          |      |----------------------------------->| "Hey Fred"Sparks, et al.           Best Current Practice                 [Page 53]

RFC 5589                    SIP CC Transfer                    June 2009   6  |NOTIFY (200 OK)          |          |    "Hello Mary"      |----------->|            |          |   6  |200 OK      |            |          |      |<-----------|            |          |   1  |BYE/200 OK  |            |          |      |<-----------|            |          |   5  |            |BYE/200 OK  |          |      |            |---------------------->|   7  |BYE/200 OK  |            |          |      |<-----------------------------------| "See you later"   Figure 18: Transfer with Multiple Parties Example11.  Gateway Transfer Issues   A gateway in SIP acts as a User Agent.  As a result, the entire   preceding discussion and call flows apply equally well to gateways as   native SIP endpoints.  However, there are some gateway-specific   issues that are documented in this section.  While this discussion   focuses on the common cases involving Public Switched Telephone   Network (PSTN) gateways, similar situations exist for other gateways,   such as H.323/SIP gateways.11.1.  Coerce Gateway Hairpins to the Same Gateway   To illustrate how a hairpin situation can occur in transfer, consider   this example.  The original call dialog is setup with the Transferee   residing on the PSTN side of a SIP gateway.  The Transferor is a SIP   phone purely in the IP space.  The Transfer Target is on the PSTN   side of a SIP gateway as well.  After completing the transfer,   (regardless of consultative or blind) the Transferee is in a call   with the Transfer Target (both on the PSTN side of a gateway).  It is   often desirable to remove the gateway(s) out of the loop.  This is   likely to only be possible if both legs of the target call are on the   same gateway.  With both legs on the same gateway, it may be able to   invoke the analogous transfer on the PSTN side.  Then the target call   would not involve the gateway.   So the problem is how to give the proxy enough information so that it   knows to route the call to the same gateway.  With a simple single   call that hairpins, the incoming and outgoing leg have the same   dialog.  The proxy should have enough information to optimize the   routing.   In the consultative transfer scenario, it is desirable to coerce the   consultative INVITE out the same gateway as the original call to be   transferred.  However, there is no way to relate the consultation   with the original call.  In the consultative case, the target callSparks, et al.           Best Current Practice                 [Page 54]

RFC 5589                    SIP CC Transfer                    June 2009   INVITE includes the Replaces header, which contains dialog   information that can be used to relate it to the consultation.   However, there is no information that relates the target call to the   original.   In the blind transfer scenario, it is desirable to coerce the target   call onto the same gateway as the original call.  However, the same   problem exists in that the target-dialog cannot be related to the   original dialog.   In either transfer scenario, it may be desirable to push the transfer   operation onto the non-SIP side of the gateway.  Presumably, this is   not possible unless all of the legs go out the same gateway.  If the   gateway supports more than one trunk group, it might also be   necessary to get all of the legs on the same trunk group in order to   perform the transfer on the non-SIP side of the gateway.   Solutions to these gateway specific issues may involve new extensions   to SIP in the future.11.2.  Consultative Turned Blind Gateway Glare   In the consultative transfer case turned blind, there is a glare-like   problem.  The Transferor initiates the consultation INVITE, the   Transferor gets impatient and hangs up, transitioning this to a blind   transfer.  The Transfer Target on the gateway (connected through a   PSTN switch to a single line or dumb analog phone) rings.  The user   answers the phone just after the CANCEL is received by the Transfer   Target.  The REFER and INVITE for the target call are sent.  The   Transferee attempts to set up the call on the PSTN side, but gets   either a busy response or lands in the users voicemail as the user   has the handset in hand and off hook.   This is another example of a race condition that this call flow can   cause.  The recommended behavior is to use the approach described inSection 7.6.12.  Security Considerations   The call transfer flows shown in this document are implemented using   the REFER and Replaces call control primitives in SIP.  As such, the   security considerations detailed in the REFER [RFC3515] and Replaces   [RFC3891] documents MUST be followed, which are briefly summarized in   the following paragraphs.  This document addresses the issue of   protecting the Address of Record URI of a Transfer Target in Sections   7.1 and 7.2.Sparks, et al.           Best Current Practice                 [Page 55]

RFC 5589                    SIP CC Transfer                    June 2009   Any REFER request MUST be appropriately authenticated and authorized   using standard SIP mechanisms or else calls may be hijacked.  A User   Agent may use local policy or human intervention in deciding whether   or not to accept a REFER.  In generating NOTIFY responses based on   the outcome of the triggered request, care should be taken in   constructing the message/sipfrag body to ensure that no private   information is leaked.   An INVITE containing a Replaces header field SHOULD only be accepted   if it has been properly authenticated and authorized using standard   SIP mechanisms, and the requestor is authorized to perform dialog   replacement.  Special care is needed if the replaced dialog utilizes   additional media streams compared to the original dialog.  In this   case, the user MUST authorize the addition of new media streams in a   dialog replacement.  For example, the same mechanism used to   authorize the addition of a media stream in a re-INVITE could be   used.13.  Acknowledgments   This document is a collaborative product of the SIP working group.   Thanks to Rohan Mahy for his input on the use of Replaces in   transfer.14.  References14.1.  Normative References   [RFC2119]    Bradner, S., "Key words for use in RFCs to Indicate                Requirement Levels",BCP 14,RFC 2119, March 1997.   [RFC3261]    Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,                A., Peterson, J., Sparks, R., Handley, M., and E.                Schooler, "SIP: Session Initiation Protocol",RFC 3261,                June 2002.   [RFC3515]    Sparks, R., "The Session Initiation Protocol (SIP) Refer                Method",RFC 3515, April 2003.   [RFC3891]    Mahy, R., Biggs, B., and R. Dean, "The Session                Initiation Protocol (SIP) "Replaces" Header",RFC 3891,                September 2004.   [RFC3892]    Sparks, R., "The Session Initiation Protocol (SIP)                Referred-By Mechanism",RFC 3892, September 2004.Sparks, et al.           Best Current Practice                 [Page 56]

RFC 5589                    SIP CC Transfer                    June 2009   [RFC4538]    Rosenberg, J., "Request Authorization through Dialog                Identification in the Session Initiation Protocol                (SIP)",RFC 4538, June 2006.14.2.  Informative References   [CC-FRMWRK]  Mahy, R., Sparks, R., Rosenberg, J., Petrie, D., and A.                Johnston, "A Call Control and Multi-party usage                framework for the Session Initiation Protocol (SIP)",                Work in Progress, March 2009.   [RFC4353]    Rosenberg, J., "A Framework for Conferencing with the                Session Initiation Protocol (SIP)",RFC 4353,                February 2006.   [RFC4475]    Sparks, R., Hawrylyshen, A., Johnston, A., Rosenberg,                J., and H. Schulzrinne, "Session Initiation Protocol                (SIP) Torture Test Messages",RFC 4475, May 2006.   [RFC4575]    Rosenberg, J., Schulzrinne, H., and O. Levin, "A Session                Initiation Protocol (SIP) Event Package for Conference                State",RFC 4575, August 2006.   [RFC4579]    Johnston, A. and O. Levin, "Session Initiation Protocol                (SIP) Call Control - Conferencing for User Agents",BCP 119,RFC 4579, August 2006.   [RFC5057]    Sparks, R., "Multiple Dialog Usages in the Session                Initiation Protocol",RFC 5057, November 2007.   [SIP-GRUU]   Rosenberg, J., "Obtaining and Using Globally Routable                User Agent (UA) URIs (GRUU) in the Session Initiation                Protocol (SIP)", Work in Progress, October 2007.Sparks, et al.           Best Current Practice                 [Page 57]

RFC 5589                    SIP CC Transfer                    June 2009Authors' Addresses   Robert Sparks   Tekelec   17210 Campbell Road   Suite 250   Dallas, Texas  75252   USA   EMail: RjS@nostrum.com   Alan Johnston (editor)   Avaya   St. Louis, MO   EMail: alan@sipstation.com   Daniel Petrie   SIPez LLC   Arlington, MA  02476   US   Phone: +1 617 273 4000   EMail: dan.ietf@SIPez.com   URI:http://www.SIPez.com/Sparks, et al.           Best Current Practice                 [Page 58]

[8]ページ先頭

©2009-2025 Movatter.jp