Network Working Group R. Sparks Request for Comments: 5589 Tekelec BCP: 149 A. Johnston, Ed. Category: Best Current Practice Avaya D. Petrie SIPez LLC June 2009
Network Working Group R. Sparks Request for Comments: 5589 Tekelec BCP: 149 A. Johnston, Ed. Category: Best Current Practice Avaya D. Petrie SIPez LLC June 2009
Session Initiation Protocol (SIP) Call Control - Transfer
会话启动协议(SIP)呼叫控制-传输
Status 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.
版权所有(c)2009 IETF信托基金和确定为文件作者的人员。版权所有。
This document is subject to BCP 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.
本文件受BCP 78和IETF信托在本文件出版之日生效的与IETF文件有关的法律规定的约束(http://trustee.ietf.org/license-info). 请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。
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.
本文件可能包含2008年11月10日之前发布或公开的IETF文件或IETF贡献中的材料。控制某些材料版权的人员可能未授予IETF信托允许在IETF标准流程之外修改此类材料的权利。在未从控制此类材料版权的人员处获得充分许可的情况下,不得在IETF标准流程之外修改本文件,也不得在IETF标准流程之外创建其衍生作品,除了将其格式化以RFC形式发布或将其翻译成英语以外的其他语言。
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.
本文档描述在会话启动协议(SIP)中提供呼叫转移功能。SIP扩展(如REFER和Replaces)用于提供多种传输服务,包括盲传输、协商传输和有人值守传输。这项工作是SIP多方呼叫控制框架的一部分。
Table of Contents
目录
1. Overview ........................................................3 2. Actors and Roles ................................................3 3. Terminology .....................................................4 4. Requirements ....................................................4 5. Using REFER to Achieve Call Transfer ............................5 6. Basic Transfer ..................................................6 6.1. Successful Transfer ........................................8 6.2. Transfer with Dialog Reuse ................................11 6.3. Failed Transfer ...........................................15 6.3.1. Target Busy ........................................16 6.3.2. Transfer Target Does Not Answer ....................17 7. Transfer with Consultation Hold ................................18 7.1. Exposing Transfer Target ..................................18 7.2. Protecting Transfer Target ................................19 7.3. Attended Transfer .........................................24 7.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 .....................................29 7.6. Semi-Attended Transfer ....................................37 7.7. Attended Transfer Fallback to Basic Transfer ..............42 8. Transfer with Referred-By ......................................45 9. Transfer as an Ad Hoc Conference ...............................49 10. Transfer with Multiple Parties ................................52 11. Gateway Transfer Issues .......................................54 11.1. Coerce Gateway Hairpins to the Same Gateway ..............54 11.2. Consultative Turned Blind Gateway Glare ..................55 12. Security Considerations .......................................55 13. Acknowledgments ...............................................56 14. References ....................................................56 14.1. Normative References .....................................56 14.2. Informative References ...................................57
1. Overview ........................................................3 2. Actors and Roles ................................................3 3. Terminology .....................................................4 4. Requirements ....................................................4 5. Using REFER to Achieve Call Transfer ............................5 6. Basic Transfer ..................................................6 6.1. Successful Transfer ........................................8 6.2. Transfer with Dialog Reuse ................................11 6.3. Failed Transfer ...........................................15 6.3.1. Target Busy ........................................16 6.3.2. Transfer Target Does Not Answer ....................17 7. Transfer with Consultation Hold ................................18 7.1. Exposing Transfer Target ..................................18 7.2. Protecting Transfer Target ................................19 7.3. Attended Transfer .........................................24 7.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 .....................................29 7.6. Semi-Attended Transfer ....................................37 7.7. Attended Transfer Fallback to Basic Transfer ..............42 8. Transfer with Referred-By ......................................45 9. Transfer as an Ad Hoc Conference ...............................49 10. Transfer with Multiple Parties ................................52 11. Gateway Transfer Issues .......................................54 11.1. Coerce Gateway Hairpins to the Same Gateway ..............54 11.2. Consultative Turned Blind Gateway Glare ..................55 12. Security Considerations .......................................55 13. Acknowledgments ...............................................56 14. References ....................................................56 14.1. Normative References .....................................56 14.2. Informative References ...................................57
This document describes providing Call Transfer capabilities and requirements in SIP [RFC3261]. This work is part of the multiparty call control framework [CC-FRMWRK].
本文档描述了在SIP[RFC3261]中提供呼叫转移功能和要求。这项工作是多方呼叫控制框架[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.
本文档详细介绍了REFER方法[RFC3515]的使用,并替换[RFC3891]标题字段以实现呼叫转移。
A User Agent (UA) that fully supports the transfer mechanisms described in this document supports REFER [RFC3515] and Replaces [RFC3891] in addition to RFC 3261 [RFC3261]. A User Agent should use a Contact URI that meets the requirements in Section 8.1.1.8 of RFC 3261. A compliant User Agent supports the Target-Dialog header field [RFC4538].
除RFC 3261[RFC3261]外,完全支持本文档中描述的传输机制的用户代理(UA)支持REFER[RFC3515]并替换[RFC3891]。用户代理应使用符合RFC 3261第8.1.1.8节要求的联系人URI。兼容的用户代理支持目标对话框标题字段[RFC4538]。
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.
主持人:接收发端人的呼叫或带外请求,通过筛选程序与收件人建立呼叫,并将发端人与收件人连接。通常,调解人代表发起人行事。
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.
接收人:发起人最终与之有关联的一方。
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 in BCP 14, RFC 2119 [RFC2119].
本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照BCP 14、RFC 2119[RFC2119]中的说明进行解释。
1. Any party in a SIP session must be able to transfer any other party in that session at any point in that session.
1. SIP会话中的任何一方必须能够在该会话中的任何时间传输该会话中的任何其他方。
2. The Transferor and the Transferee must not be removed from a session as part of a transfer transaction.
2. 作为转让交易的一部分,转让人和受让人不得被从交易中撤职。
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.
乍一看,要求2似乎表明,传输中的用户体验必须与当前的专用分支交换机(PBX)或Centrex用户期望的有很大不同。正如本文档中的调用流程所示,情况并非如此。客户可以保留当前的体验。事实上,若并没有这一要求,某些形式的当前体验(例如,传输失败时回铃)将丢失。
3. The Transferor must know whether or not the transfer was successful.
3. 转让人必须知道转让是否成功。
4. The Transferee must be able to replace an existing dialog with a new dialog.
4. 受让人必须能够用新对话框替换现有对话框。
5. The Transferor and Transferee should indicate their support for the primitives required to achieve transfer.
5. 转让人和受让人应表明其对实现转让所需原语的支持。
6. The Transferor should provide the Transfer Target and Transferee with information about the nature and progress of the transfer operation being attempted.
6. 转让人应向转让对象和受让人提供有关所尝试转让操作的性质和进度的信息。
To meet this requirement, the transfer operation can be modeled as an ad hoc conference between three parties, as discussed in Section 9.
为了满足这一要求,可以将传输操作建模为三方之间的特别会议,如第9节所述。
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.
转让人可发出REFER[RFC3515]以促使受让人向转让目标发出邀请。请注意,成功的转介交易不会终止转让人和受让人之间的会话。如果这些缔约方希望终止其会议,则必须在随后提出BYE请求后终止。受让人和转让目标之间协商的媒介不受转让人和受让人之间协商的媒介的影响。特别是,受让人发出的邀请将具有与受让人自己发起该邀请时相同的会话描述协议(SDP)主体。此外,传送者和受让者之间的媒体流的处置不通过REFER方法改变。
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].
代理可以通过附加的信令改变会话的媒体。例如,他们可以使用SIP hold-re-INVITE[RFC3261]或会议框架[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 in Section 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].
要执行转让,转让人和受让人可以重用通过邀请建立的现有对话框来发送转介。这将导致一个由两个用户共享的对话框——邀请用户和订阅用户。第6.2节中详细说明了这方面的调用流程。但是,本文档中描述的方法是避免对话框重用。[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.
1. 无法确保新对话框上的引用将到达传输中涉及的特定端点。许多因素,包括实现的细节以及INVITE和REFER之间代理路由的更改,都可能导致REFER被发送到错误的位置。将reference向下发送到现有对话框确保它到达了我们已经讨论过的端点。
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.
2. 目前还不清楚如何将现有的invite用法与新对话框中出现的reference关联起来,当reference出现在invite用法对话框中时,这种关联是什么。
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").
3. 存在授权对话外引用的问题。在大多数实现中,REFER的授权策略都是基于INVITE的授权策略的(在大多数情况下,这只是基于“我拨打或接听了这个电话”)。
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.
全局可路由UA URI(GRUU)[SIP-GRUU]可用于解决问题1。可以使用[RFC4538]中定义的目标对话框标题字段解决问题2。在短期内,问题2的解决方案允许重用现有的REFER授权策略。
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].
因此,如果受让人支持目标对话框扩展,并且转让人知道联系人URI可在对话框外部路由,则应在新对话框中发送引用。如果联系人URI的性质未知,或者如果不知道对目标对话框扩展的支持,则应该在现有对话框中发送reference。受让人必须准备好在对话内部或外部接收引用。传输方可以通过验证(例如,发送选项并接收响应)或是否满足GRUU规范[SIP-GRUU]中描述的属性来知道联系人URI可在对话外部路由。
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.
本文件并未严格规定流程和示例,而是说明了传输功能最佳实践的原则。调用流代表了经过充分审查的SIP使用示例,以实现带REFER的传输,这是IETF共识中的最佳通用实践。
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.
在以下大多数示例中,转让人位于atlanta.example.com域,受让人位于biloxi.example.com域,转让目标位于chicago.example.com域。
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.
基本转让包括转让人向受让人提供转让目标的联系方式。受让人尝试使用该联系人建立会话,并向转让人报告该尝试的结果。传输方和受让方之间的信令关系没有终止,因此,如果无法达到传输目标,则呼叫是可恢复的。请注意,转移目标的联系信息已向受让人公开。提供的联系人可用于将来拨打新电话。
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.
基本传输的参与者应该在INVITE、200 OK to INVITE和OPTIONS消息中的Allow header字段中指出对REFER和NOTIFY方法的支持。参与者还应在支持的标题字段中指出对目标对话框的支持。
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.
下图显示了每条消息的第一行。图的第一列显示了该特定消息中使用的对话框。在这些图中,通过重新邀请保持来管理媒体,但其他机制(例如在UA混合多个媒体流或使用会议扩展)是有效的。选定的消息详细信息显示为消息F1、F2等。
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.
图1显示了受让人使用GRUU并支持目标对话框扩展时的传输,并将其指示给转让人。因此,传输方将reference发送到INVITE对话框外部。受让人可以使用引用现有对话框的引用中的目标对话框标题字段,将此引用与现有对话框匹配。
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 | |------------------->|
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 Flow
图1:基本转接呼叫流程
F1 INVITE Transferee -> Transferor
F1邀请受让人->转让人
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: ...
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
F2 200正常转让人->受让人
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: ...
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
F3参见转让人->受让人
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: 0
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: 0
F4 NOTIFY Transferee -> Transferor
F4通知受让人->转让人
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: ...
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
SIP/2.0 100
F5 INVITE Transferee -> Transfer Target
F5邀请受让人->转让目标
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: ...
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: ...
F6 NOTIFY Transferee -> Transferor
F6通知受让人->转让人
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: ...
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 OK
SIP/2.0 200正常
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.
在这种情况下,转让人不知道受让人的联系人URI的属性,或者不知道受让人支持目标对话框标题字段。因此,在INVITE对话框中发送REFERET。
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 | |------------------->|
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 Reuse
图2:使用对话框重用进行传输
F1 INVITE Transferee -> Transferor
F1邀请受让人->转让人
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: ...
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
F2 200正常转让人->受让人
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: ...
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
F3参见转让人->受让人
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: 0
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: 0
F4 NOTIFY Transferee -> Transferor
F4通知受让人->转让人
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: ...
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
SIP/2.0 100
F5 INVITE Transferee -> Transfer Target
F5邀请受让人->转让目标
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: ...
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: ...
F6 NOTIFY Transferee -> Transferor
F6通知受让人->转让人
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: ...
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 OK
SIP/2.0 200正常
This section shows examples of failed transfer attempts. After the transfer failure occurs, the Transferor takes the Transferee off hold and resumes the session.
本节显示传输尝试失败的示例。发生转让失败后,转让人解除受让人的保留并恢复会话。
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 |<-------------------| |
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 Busy
图3:传输失败-目标忙
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 | |
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 | |
dialog1 |------------------->| | | 200 OK | | dialog1 |<-------------------| |
dialog1 |------------------->| | | 200 OK | | dialog1 |<-------------------| |
Figure 4: Failed Transfer - Target Does Not Answer
图4:传输失败-目标没有应答
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.
协商持有转让涉及转让方和转让目标方之间在转让实际发生之前的一段时间。这通过如上所述的SIP保持和传输来实现。
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.
对于传输者来说,一个很好的特性是让目标知道会话与预期传输相关。由于许多UAs在From头字段中向用户呈现显示名称,因此咨询邀请可能包含一个字符串,如“转让方有意转让受让方的传入咨询”,其中转让方和受让方的显示名称包含在字符串中。
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.
转让方将受让方置于暂停状态,与转让目标建立呼叫,以提醒他们即将进行的转让,终止与转让目标的连接,然后按照上述方式继续进行转让。这种变化可用于提供类似于当前PBX和Centrex用户预期的体验。
To (hopefully) improve clarity, non-REFER transactions have been collapsed into one indicator with the arrow showing the direction of the request.
为了(希望)提高清晰性,非参考交易已折叠为一个指示器,箭头指示请求的方向。
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 | | |<-------------------|
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 Target
图5:协商保留的转移-暴露转移目标
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 not
这种最简单的目标保护传输实现的问题之一是,受让方正在接收来自传输目标的新呼叫。除非受让人的代理人有可靠的方法将此新呼叫与其已与转让人进行的呼叫关联,否则必须在另一次出现时提醒新呼叫。如果这个,或者像UI这样等待的其他调用没有
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.
如果可用,则受让人可能会将繁忙的消息返回给传输目标,从而有效地阻止传输。有许多方法可以提供相关性。例如,对话框参数可以直接作为refereferuri中的头参数提供。替换机制[RFC3891]使用这种方法,很好地解决了这个问题。
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.
对于下面的流,dialog1表示对话框标识符1,由对话框1的Replaces标头的参数组成。在[RFC3891]中,这是呼叫ID、To标记和From标记。
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.
转让方知道,受让方和转让目标都支持双方200个OK响应中包含的受支持的:Replaces标头中的Replaces标头。
In this scenario, the Transferee utilizes a GRUU as a Contact URI for reasons discussed in Section 6.3.
在这种情况下,受让人基于第6.3节中讨论的原因使用GRUU作为联系人URI。
Note that the conventions used in the SIP Torture Test Messages [RFC4475] document are reused, specifically the <allOneLine> tag.
请注意,SIP测试消息[RFC4475]文档中使用的约定被重用,特别是<allOneLine>标记。
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 | | |------------------->|
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 Target
图6:传输保护传输目标
F1 INVITE Transferee -> Transferor
F1邀请受让人->转让人
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: ...
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
F2 200正常转让人->受让人
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: ...
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
F3邀请传送者->传送目标
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: ...
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: ...
F4 200 OK Transfer Target -> Transferor
F4 200正常转移目标->转移者
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: ...
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
F5参考转让人->转让目标
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: 0
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: 0
F6 INVITE Transfer Target -> Transferee
F6邀请转让目标->受让人
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: ...
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: ...
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.
转让方将受让方置于暂挂状态,与转让目标建立呼叫,以提醒他们即将进行的转让,将目标置于暂挂状态,然后使用Refer-Refer标头中的转义替换标头字段继续进行转让。这是当前PBX和Centrex用户期望的另一种常见服务。
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.)
传输目标的联系人URI应由传输方用作引用URI,除非怀疑或已知该URI不可在对话框外部路由。否则,应使用传输目标的记录地址(AOR)。也就是说,应该使用传输方用于与传输目标建立会话的相同URI。如果触发的邀请路由到传输目标以外的其他用户代理,则应在触发的邀请中使用Require:replaces标头字段。(这是为了防止不支持替换的错误用户代理忽略替换并在没有对话框匹配的情况下响应邀请。)
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.
代理/服务路由可能会阻止触发的邀请到达同一用户代理。如果发生这种情况,触发的invite将失败,并出现超时、403、404等错误。然后,受让人可以在将refere-ref-URI设置为联系人URI的情况下重试传输。
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 | | |<-------------------|
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 Flow
图7:有人值守转接呼叫流
F1 INVITE Transferee -> Transferor
F1邀请受让人->转让人
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: ...
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
F2 200正常转让人->受让人
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: ...
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
F3邀请传送者->传送目标
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: ...
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: ...
F4 200 OK Transfer Target -> Transferor
F4 200正常转移目标->转移者
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: ...
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
F5参见转让人->受让人
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: 0
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: 0
F6 INVITE Transferee -> Transfer Target
F6邀请受让人->转让目标
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: ...
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: ...
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.
如果不考虑保护或披露转让目标,则在只有转让方和另一方支持的情况下,可以在协商搁置的情况下完成转让。请注意,可能会返回405方法Not Allowed,而不是501 Not Implemented响应。
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 | | |------------------->|
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 REFER
图8:当一方不支持REFER时的恢复
7.5. Attended Transfer When Contact URI Is Not Known to Route to a Unique User Agent
7.5. 当未知联系人URI路由到唯一用户代理时,有人参与传输
It is a requirement of RFC 3261 that a Contact URI be globally routable even outside the dialog. However, due to RFC 2543 User Agents and some architectures (NAT/Firewall traversal, screening proxies, Application Layer Gateways (ALGs), etc.) this will not
RFC 3261要求联系人URI即使在对话框外部也是全局可路由的。然而,由于RFC2543用户代理和一些架构(NAT/防火墙遍历、屏蔽代理、应用层网关(ALG)等),这将不会发生
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.
总是这样。因此,只有当已知联系人URI可在对话框外部路由时,才应使用图6、7和8所示的有人值守传输方法。
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.
图9显示了这样一个场景,其中传输目标联系人URI不可在对话框外部路由,因此触发的INVITE被发送到传输目标的AOR。
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 | | |<------------|-------------|
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 Routable
图9:联系人URI不可全局路由的有人参与转接呼叫流
F1 INVITE Transferor -> Transfer Target
F1邀请传送者->传送目标
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: ...
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
F2 200正常转移目标->受让人
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: ...
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
F3参见转让人->受让人
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: 0
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: 0
F4 INVITE Transferee -> Transfer Target
F4邀请受让人->转让目标
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: ...
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
F5通知受让人->转让人
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: ...
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
SIP/2.0 200正常
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.
图10显示了一个失败案例,其中AOR URI无法到达传输目标。因此,使用联系人URI重试传输,此时传输成功。
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.
注意,仍然不能保证到达正确的端点,第二次引用的结果也可能是失败的。在这种情况下,转让人可以退回到无人看管的转让或完全放弃转让。由于在创建两个不同订阅的对话框中发送了两个引用,因此受让人使用事件头字段中的“id”参数来区分两个订阅的通知。
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 | | |<------------|-------------|
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 | | |<------------|-------------|
Figure 10: Attended Transfer Call Flow with Non-Routable Contact URI and AOR Failure
图10:具有不可路由联系人URI和AOR故障的有人值守转接呼叫流
F1 INVITE Transferor -> Transfer Target
F1邀请传送者->传送目标
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: ...
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
F2 200正常转移目标->受让人
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: ...
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
F3参见转让人->受让人
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
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
F4通知受让人->转让人
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: ...
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 Forbidden
SIP/2.0 403禁止
F5 REFER Transferor -> Transferee
F5参见转让人->受让人
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
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
F6邀请受让人->转让目标
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: ...
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: ...
F7 NOTIFY Transferee -> Transferor
F7通知受让人->转让人
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: ...
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
SIP/2.0 200正常
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.
为了防止这种情况发生,传输目标应该使用可在对话框外部路由的联系人URI,这将导致图7中的调用流。
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.
在上述任何协商暂停流程中,转让方可决定在该会话建立之前终止其联系转让目标方的尝试。最常见的情况是,这将是情景的结束,但在某些情况下,转让人可能希望继续进行转让行动。例如,转让人可能希望在知道受让人最终将与转让目标的语音邮件服务通话的情况下完成转让。一些PBX系统支持此功能,有时称为“半有人值守传输”,这实际上是完全有人值守传输和无人值守传输的混合。调用流如图11所示。在此流中,即使在转让人挂断后,转让人的用户代理仍将转让作为有人参与的转让继续进行。请注意,应答时必须向传输目标播放媒体,否则,目标可能会挂断,导致传输操作失败。
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 | | |<-------------------|
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
图11:推荐的半有人值守转接呼叫流
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 Transferor
图12和图13显示了另外两种可能的半有人值守转接呼叫流。但是,由于竞争条件,不建议使用这些调用流。在这两种流动中,当转让人
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)).
挂起时,传输方通过向目标发送取消,尝试恢复到无人参与传输。这可能导致两种竞赛条件。一种是,尽管取消,目标仍会应答,由此产生的无人值守传输失败。传输方等待发送REFER,直到从目标返回487响应时,可以消除这种竞争条件。可以返回200 OK,而不是487,表示目标已回答咨询电话。在这种情况下,必须遵循图13中的调用流。在此流中,传输方必须向目标播放某种媒体,以防止目标挂断,否则传输将失败。也就是说,在传输目标处的人将从应答时(消息F1)听到静音,直到传输完成(F3,除非播放某些媒体,否则他们正在与受让人交谈(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.
第二个竞争条件发生在图12中,如果传输目标在收到CANCEL并返回487后“脱钩”。这可能会导致486 Busy Here响应无人值守传输。
The recommended call flow of Figure 11 does not utilize a CANCEL and does not suffer from these race conditions.
图11中推荐的调用流不使用CANCEL,也不受这些竞争条件的影响。
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 | | |<-------------------|
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)
图12:半有人值守转接作为盲转接呼叫流(不推荐)
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 | | |<-------------------|
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 | | |<-------------------|
Figure 13: Semi-Attended Transfer as Attended Transfer Call Flow (Not Recommended)
图13:半有人值守转接作为有人值守转接呼叫流(不推荐)
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.
图14中的调用流显示了Require:replaces在传输方发送给传输目标的INVITE中的用法,在该INVITE中,传输方在向传输目标发送INVITE时的意图是完成有人参与的传输。由于目标不支持Replaces,INVITE被拒绝,扩展响应为420错误,传输方立即从有人值守传输切换到基本传输。
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 | | |<-------------------|
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
图14:使用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,
图15显示了当受让人和转让目标没有明确表示支持REFER方法并替换Allow和Supported header字段中的header字段,并且转让人在向目标发送邀请时无意执行有人参与的转让时使用的选项。在对话框1中,转让人使用选项确定受让人支持转介和替换。因此,转让方通过将受让方置于搁置状态并呼叫转让目标方开始有人参与的转让。使用对话框2中的选项,转让人确定目标不支持引用或替换,
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.
使有人值守的转移变得不可能。然后,传输方通过发送BYE结束对话2,然后使用传输目标的AOR URI向受让方发送REFERET。
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 | | |<-------------------|
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 Transfer
图15:有人值守转移回退到基本转移
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.
在前面的示例中,转让目标没有关于发起转让的一方的确切信息,或者在某些情况下,甚至没有关于正在进行的转让的确切信息。参考机制[RFC3892]为转让人向受让人提供了一种方式,让转让目标知道是哪一方发起了转让。
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.
最简单也是最不安全的方法就是在refered中包含refered By header字段,然后将其复制到触发的INVITE中。然而,一种更安全的机制涉及被引用的安全令牌,该令牌由传输方生成和签名,并在消息体中传递给受让方,然后传递给传输目标。
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.
图16中的调用流显示了referef5和INVITE F6中的refered By header字段和body。请注意,下面的示例中未显示安全/多用途Internet邮件扩展(S/MIME)签名。SIP测试消息[RFC4475]文档中使用的约定被重用,特别是<hex>和<allOneLine>标记。
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 | | |<-------------------|
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-By
图16:有人接送的有人接送呼叫流程
F5 REFER Transferor -> Transferee
F5参见转让人->受让人
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: ...
参考sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha SIP/2.0通过:SIP/2.0/TLS pc33.atlanta.example.com;分支=z9hG4bK392039842最大转发:70到:<sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>起始点:<sips:transferor@atlanta.example.com>;tag=1928301774呼叫ID:a84b4c76e66710 CSeq:314160参考<allOneLine>参考:<sips:482n4z24kdg@chicago.example.com;gr=8594958?替换=090459243588173445%3Bto标签%3D9m2n3wq%3Bfrom标签%3D763231&Require=Replaces></allOneLine>支持:gruu,Replaces,tdialog Require:tdialog引用人:<sips:transferor@atlanta.example.com> ;cid=“20398823。2UWQFN309shb3@atlanta.example.com“目标对话框:592435881734450904;本地标签=9m2n3wq;远程标签=763231联系人:<sips:4889445d8kjtk3@atlanta.example.com;gr=723jd2d>内容类型:多部分/混合;边界=唯一-边界-1内容长度:。。。
--unique-boundary-1 Content-ID: <20398823.2UWQFN309shb3@atlanta.example.com>
--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"
Content-Length: 2961 Content-Type: multipart/signed; protocol="application/pkcs-7-signature"; micalg=sha1; boundary="----590F24D439B31E08745DEF0CD9397189"
------590F24D439B31E08745DEF0CD9397189 Content-Type: message/sipfrag
------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"
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"
------590F24D439B31E08745DEF0CD9397189 Content-Type: application/pkcs-7-signature; name="smime.p7s"
Content-Transfer-Encoding: binary Content-Disposition: attachment; filename="smime.p7s"
Content-Transfer-Encoding: binary Content-Disposition: attachment; filename="smime.p7s"
<hex>3082088806092A86 4886F70D010702A082087930820875020101310B300906052B0E03021A050030
<hex>3082088806092A86 4886F70D010702A082087930820875020101310B300906052B0E03021A050030
. . . (Signature not shown)
. . . (未显示签名)
8E63D306487A740A197A3970594CF47DD385643B1DC49FF767A3D2B428388966 79089AAD95767F</hex>
8E63D3306487A740A1970A3970594CF47DD385643B1DC49FF767A3D2B428388966 79089AAD95767F</hex>
------590F24D439B31E08745DEF0CD9397189--
------590F24D439B31E08745DEF0CD9397189--
--unique_boundary-1
--唯一_边界-1
F6 INVITE Transferee -> Transfer Target
F6邀请受让人->转让目标
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: ...
邀请SIP:482n4z24kdg@chicago.example.com;gr=8594958 SIP/2.0 Via:SIP/2.0/TLS reference.example;分支=z9hG4bKffe209934aac至:<sips:482n4z24kdg@chicago.example.com;gr=8594958>从:<sips:transferee@biloxi.example.com>;tag=2909034023呼叫ID:fe9023940-a3465@referee.exampleCSeq:889823409邀请最大转发:70联系人:<sips:3ld812adkjw@biloxi.example.com;gr=3413kj2ha>参考人:<sips:transferor@atlanta.example.com> ;cid=“20398823。2UWQFN309shb3@atlanta.example.com“替换:090459243588173445;至标签=9m2n3wq;from tag=76323 Require:replaces Supported:gruu,replaces,tdialog Content Type:multipart/mixed;边界=my-boundary-9内容长度:。。。
--my-boundary-9 Content-Type: application/sdp
--my-boundary-9 Content-Type: application/sdp
Content-Length: 156
内容长度: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/8000
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/8000
--my-boundary-9 Content-Length: 2961 Content-Type: multipart/signed; protocol="application/pkcs-7-signature"; micalg=sha1; boundary="----590F24D439B31E08745DEF0CD9397189"
--my-boundary-9 Content-Length: 2961 Content-Type: multipart/signed; protocol="application/pkcs-7-signature"; micalg=sha1; boundary="----590F24D439B31E08745DEF0CD9397189"
------590F24D439B31E08745DEF0CD9397189 Content-Type: message/sipfrag
------590F24D439B31E08745DEF0CD9397189 Content-Type: message/sipfrag
Date: Thu, 18 Sep 2003 13:07:43 GMT
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"
<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"
------590F24D439B31E08745DEF0CD9397189 Content-Type: application/pkcs-7-signature; name="smime.p7s" Content-Transfer-Encoding: binary Content-Disposition: attachment; filename="smime.p7s"
<hex>3082088806092A86 4886F70D010702A082087930820875020101310B300906052B0E03021A050030
<hex>3082088806092A86 4886F70D010702A082087930820875020101310B300906052B0E03021A050030
. . . (Signature not shown)
. . . (未显示签名)
8E63D306487A740A197A3970594CF47DD385643B1DC49FF767A3D2B428388966 79089AAD95767F</hex>
8E63D3306487A740A1970A3970594CF47DD385643B1DC49FF767A3D2B428388966 79089AAD95767F</hex>
------590F24D439B31E08745DEF0CD9397189--
------590F24D439B31E08745DEF0CD9397189--
--my-boundary-9--
--my-boundary-9--
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.
在这个流程中,如图17所示,Bob将Alice有人照料地转移给Carol。为了让Alice和Carol充分了解转移操作的性质和状态,Bob充当焦点[RFC4579],并主持由Alice、Bob和Carol参加的特别会议。Alice和Carol订阅了Bob's focus的会议包[RFC4575],这使他们能够了解操作的确切状态。传输操作完成后,Bob删除会议。
This call flow meets requirement 6 of Section 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).
该呼叫流程符合第4节第6条的要求。与refer包相关的NOTIFY消息指示为NOTIFY(refer),而与会议信息包相关的NOTIFY消息指示为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.
请注意,可以使用此模型实现媒体混合或中继的任何类型的半参与传输。除了简单的混音外,focus还可以引入其他媒体信号,如模拟铃声或暂停广播,以改善用户体验。
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 | |------------------->|
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 | |------------------->|
| | 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) | |
| | 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) | |
|------------------->| | | 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 | | |------------------->| |
|------------------->| | | 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 Conference
图17:作为临时会议出席的转移
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.
在本例中,如图18所示,发起人向主持人打电话,主持人通过筛选人与收件人取得联系。接受者的联系信息向主持人和发起人公开。此示例仅用于澄清refere方法的语义,不应将其用作实现的设计。
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"
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"
6 |NOTIFY (200 OK) | | "Hello Mary" |----------->| | | 6 |200 OK | | | |<-----------| | | 1 |BYE/200 OK | | | |<-----------| | | 5 | |BYE/200 OK | | | |---------------------->| 7 |BYE/200 OK | | | |<-----------------------------------| "See you later"
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 Example
图18:多方转移示例
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.
SIP中的网关充当用户代理。因此,前面的整个讨论和调用流与本机SIP端点同样适用于网关。但是,本节中记录了一些特定于网关的问题。虽然本讨论集中于涉及公共交换电话网(PSTN)网关的常见情况,但其他网关也存在类似情况,如H.323/SIP网关。
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.
为了说明发夹状态如何在传递中发生,请考虑这个例子。原始呼叫对话框是由位于SIP网关PSTN侧的受让人设置的。传输方是纯粹在IP空间中的SIP电话。传输目标也位于SIP网关的PSTN侧。完成传输后,(无论是咨询还是盲)受让人与传输目标(均在网关的PSTN侧)进行通话。通常需要将网关从环路中移除。只有当目标调用的两个分支位于同一网关上时,这才可能实现。由于两个分支位于同一网关上,它可能能够调用PSTN侧的模拟传输。那么目标呼叫将不涉及网关。
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.
因此,问题在于如何为代理提供足够的信息,以便它知道如何将调用路由到同一网关。通过一个简单的调用hairpins,传入和传出分支具有相同的对话框。代理应该有足够的信息来优化路由。
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 call
在协商转移场景中,需要强制协商邀请出与要转移的原始呼叫相同的网关。然而,没有办法将咨询与最初的呼吁联系起来。在咨询案例中,目标调用
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.
INVITE包含替换标题,其中包含可用于将其与咨询关联的对话框信息。但是,没有将目标调用与原始调用关联的信息。
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.
在任一传输场景中,可能希望将传输操作推送到网关的非SIP侧。据推测,这是不可能的,除非所有的腿都出同一个网关。如果网关支持多个中继组,则可能还需要将所有分支放在同一中继组上,以便在网关的非SIP侧执行传输。
Solutions to these gateway specific issues may involve new extensions to SIP in the future.
这些特定于网关的问题的解决方案可能涉及将来对SIP的新扩展。
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.
在咨询转让案例中,出现了类似眩光的问题。转让人发起咨询邀请,转让人变得不耐烦并挂断电话,将此转换为盲目转让。网关上的传输目标(通过PSTN交换机连接到单线或哑模拟电话)响起。传输目标接收到取消后,用户立即接听电话。发送目标呼叫的REFER和INVITE。受让人试图在PSTN端建立呼叫,但由于用户手持手机并已脱离连接,因此会收到忙响应或进入用户语音信箱。
This is another example of a race condition that this call flow can cause. The recommended behavior is to use the approach described in Section 7.6.
这是该调用流可能导致的竞争条件的另一个示例。建议采用第7.6节所述的方法。
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.
本文档中显示的呼叫转移流是使用SIP中的REFER和Replaces呼叫控制原语实现的。因此,必须遵循参考[RFC3515]和替代[RFC3891]文件中详述的安全注意事项,以下段落简要总结了这些注意事项。本文件在第7.1节和第7.2节中阐述了保护传输目标的记录URI地址的问题。
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.
任何REFER请求都必须使用标准SIP机制进行适当的身份验证和授权,否则调用可能被劫持。用户代理可以使用本地策略或人工干预来决定是否接受转介。在根据触发请求的结果生成NOTIFY响应时,应注意构建消息/sipfrag主体,以确保没有私人信息泄漏。
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.
只有在使用标准SIP机制对包含Replaces标头字段的INVITE进行了正确的身份验证和授权,并且请求者有权执行对话框替换时,才应接受该INVITE。如果替换的对话框与原始对话框相比使用了额外的媒体流,则需要特别小心。在这种情况下,用户必须授权在对话框替换中添加新媒体流。例如,可以使用用于授权在重新邀请中添加媒体流的相同机制。
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.
本文件是SIP工作组的协作产品。感谢Rohan Mahy在转让中使用替代品方面的投入。
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,1997年3月。
[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.
[RFC3261]Rosenberg,J.,Schulzrinne,H.,Camarillo,G.,Johnston,A.,Peterson,J.,Sparks,R.,Handley,M.,和E.Schooler,“SIP:会话启动协议”,RFC 3261,2002年6月。
[RFC3515] Sparks, R., "The Session Initiation Protocol (SIP) Refer Method", RFC 3515, April 2003.
[RFC3515]Sparks,R.,“会话启动协议(SIP)引用方法”,RFC3515,2003年4月。
[RFC3891] Mahy, R., Biggs, B., and R. Dean, "The Session Initiation Protocol (SIP) "Replaces" Header", RFC 3891, September 2004.
[RFC3891]Mahy,R.,Biggs,B.,和R.Dean,“会话启动协议(SIP)”取代了RFC 38912004年9月的“头”。
[RFC3892] Sparks, R., "The Session Initiation Protocol (SIP) Referred-By Mechanism", RFC 3892, September 2004.
[RFC3892]Sparks,R.,“机制引用的会话启动协议(SIP)”,RFC 38922004年9月。
[RFC4538] Rosenberg, J., "Request Authorization through Dialog Identification in the Session Initiation Protocol (SIP)", RFC 4538, June 2006.
[RFC4538]Rosenberg,J.,“通过会话启动协议(SIP)中的对话标识请求授权”,RFC 4538,2006年6月。
[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.
[CC-FRMWRK]Mahy,R.,Sparks,R.,Rosenberg,J.,Petrie,D.,和A.Johnston,“会话启动协议(SIP)的呼叫控制和多方使用框架”,正在进行的工作,2009年3月。
[RFC4353] Rosenberg, J., "A Framework for Conferencing with the Session Initiation Protocol (SIP)", RFC 4353, February 2006.
[RFC4353]Rosenberg,J.,“会话启动协议(SIP)会议框架”,RFC 4353,2006年2月。
[RFC4475] Sparks, R., Hawrylyshen, A., Johnston, A., Rosenberg, J., and H. Schulzrinne, "Session Initiation Protocol (SIP) Torture Test Messages", RFC 4475, May 2006.
[RFC4475]Sparks,R.,Hawrylyshen,A.,Johnston,A.,Rosenberg,J.,和H.Schulzrinne,“会话启动协议(SIP)酷刑测试消息”,RFC 4475,2006年5月。
[RFC4575] Rosenberg, J., Schulzrinne, H., and O. Levin, "A Session Initiation Protocol (SIP) Event Package for Conference State", RFC 4575, August 2006.
[RFC4575]Rosenberg,J.,Schulzrinne,H.,和O.Levin,“会议状态的会话启动协议(SIP)事件包”,RFC 45752006年8月。
[RFC4579] Johnston, A. and O. Levin, "Session Initiation Protocol (SIP) Call Control - Conferencing for User Agents", BCP 119, RFC 4579, August 2006.
[RFC4579]Johnston,A.和O.Levin,“会话发起协议(SIP)呼叫控制-用户代理会议”,BCP 119,RFC 4579,2006年8月。
[RFC5057] Sparks, R., "Multiple Dialog Usages in the Session Initiation Protocol", RFC 5057, November 2007.
[RFC5057]Sparks,R.,“会话启动协议中的多个对话用法”,RFC 5057,2007年11月。
[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.
[SIP-GRUU]Rosenberg,J.,“在会话启动协议(SIP)中获取和使用全局可路由用户代理(UA)URI(GRUU)”,正在进行的工作,2007年10月。
Authors' Addresses
作者地址
Robert Sparks Tekelec 17210 Campbell Road Suite 250 Dallas, Texas 75252 USA
美国德克萨斯州达拉斯市坎贝尔路250号Robert Sparks Tekelec 17210套房,邮编75252
EMail: RjS@nostrum.com
EMail: RjS@nostrum.com
Alan Johnston (editor) Avaya St. Louis, MO
阿兰·约翰斯顿(编辑)密苏里州圣路易斯市阿瓦亚
EMail: alan@sipstation.com
EMail: alan@sipstation.com
Daniel Petrie SIPez LLC Arlington, MA 02476 US
Daniel Petrie SIPez有限责任公司美国马萨诸塞州阿灵顿02476
Phone: +1 617 273 4000 EMail: dan.ietf@SIPez.com URI: http://www.SIPez.com/
Phone: +1 617 273 4000 EMail: dan.ietf@SIPez.com URI: http://www.SIPez.com/