Skip to main content

5.4. 外观代理

本规范中定义的外观代理必须为针对 AOR 注册的 UA 实现对话包状态代理。外观代理必须支持第 5.2 节中定义的外观对话包扩展并使用 'shared' Event 头字段参数。外观代理必须支持此事件包的发布和订阅。

外观代理必须有一种方法来发现与 AOR 关联的所有对话的状态。如果此信息无法从呼叫有状态代理或背对背用户代理 (B2BUA) 获得, 则外观代理可以使用注册事件包 [RFC3680] 来了解与 AOR 关联的 UA 并订阅它们的对话事件状态。外观代理还可以订阅 UA 的对话事件状态以重建状态。因此, 注册器必须支持注册事件包。

RFC 4235 建议对话包通知"仅包含状态或参与信息已更改的对话的信息"。本规范如下扩展 RFC 4235。当 AOR 组中的 UA 发生以下事件时, 外观代理应该发送对话事件状态通知:

  1. 接收、拨打、应答或终止呼叫。

  2. 将呼叫置于保持状态或取消保持状态。

  3. 加入或替换呼叫。

  4. 保留或释放外观号码。

外观代理必须为所有传入呼叫分配外观号码, 并向订阅共享组 AOR 的 UA 发送即时通知。分配新的外观号码, 除非呼叫替换另一个呼叫, 在这种情况下使用被替换呼叫的外观号码。

外观代理必须在发布请求时或在没有事先发布的情况下发送 INVITE 时为出站呼叫分配外观号码。当 UA 发布尝试为出站呼叫占用外观或当 UA 发布咨询呼叫时 (即, 发布不包含外观号码), 外观代理为该 UA 保留外观号码。如果保留的外观号码在一段时间内 (建议值: 30 秒) 未使用, 则外观代理释放外观号码, 以便可以将其分配给另一个 UA。

如果组的传入呼叫到达并且没有可用的外观号码, 则传入呼叫仍将分叉到所有已订阅的 UA, 但通知中不会包含外观号码。此外, 当呼叫到达 UA 时, 呼叫在 Alert-Info 头字段中不会有外观参数。如果组中的所有已订阅 UA 都拒绝传入呼叫, 则会发生正常的呼叫处理 (可能转发到语音邮件或另一个 AOR)。

外观号码的分配由外观代理管理; UA 无法直接观察到这一点。但是, 订阅共享组 AOR 的 UA 将在外观代理分配或释放外观号码时收到通知。

外观代理负责为 UA 创建的新对话分配外观号码并解决外观号码争用。当两个 UA 同时尝试占用相同的外观号码时, 可能会发生争用。外观代理通过在短时间内接收来自具有相同外观号码的 UA 的发布来检测争用。当检测到争用时, 外观代理必须仅选择其中一个 UA 来分配外观号码。其他 UA 将收到对其发布的错误响应。选择哪个 UA 赢得争用的标准是外观代理策略决定。一种方法是选择最先到达的发布。外观代理可以通过查看 Via 头字段中的 SIP 时间戳或基于其他本地处理时间戳来确定哪个发布最先到达。