跳到主要内容

5.3.3. 外观编号和转接

在转接操作期间, 外观编号在操作过程中不发生变化非常重要. 设想如下示例: Alice 是共享外观组的成员, 正在与共享外观组之外的 Carol 通话. Carol 将 Alice 转接给 David, 而 David 也在共享外观组之外. 例如, 如果 Alice 与 Carol 的会话使用外观 3, 则随后与 David 建立的会话也应使用外观编号 3. 否则, 外观编号变化可能导致 UI 上出现 "跳动", 使用户感到困惑. 使用 RFC 5589 的术语, 这里有两种可能的场景: Alice 是任何类型转接中的被转接方 (transferee, 接收 REFER), 或者是咨询转接 (attended transfer) 中的转接目标 (transfer target, 接收带有 Replaces 的 INVITE).

如果 Alice 是被转接方, 则由 REFER 触发的 INVITE 会被视为咨询呼叫. Alice SHOULD 发布请求, 要求外观代理不要为此 INVITE 分配外观编号. 转接完成后, Alice SHOULD 再次发布, 将外观编号从与 Carol 的对话移动到与 David 的对话. 如果发送 PUBLISH 来移动外观编号, 则该发布 MUST 在向 Carol 发送 BYE 之前发送, 以避免一种竞态条件: 外观代理在看到 BYE 后重新分配该外观编号.

如果 Alice 是转接目标, 则传入的 INVITE 将包含 Replaces 头字段. 因此, 外观代理会复用与 Carol 的对话的外观编号, 并且在与 Carol 的对话终止后, 该外观编号将继续被使用.