2

Mobicents SIP servlet 容器处理错误响应的方式似乎与我使用的其他 SIP 容器不同。情况是:

  • 收到邀请后,应用程序处理和代理(监督)下游(因此它可能会收到对邀请的响应)。

  • 收到来自初始目标的错误响应后,应用程序代理到新目的地(以非监督方式)。

这应该可以防止初始错误响应向上游传播(因为事务有一个新目标)。然而,使用 Mobicents 容器,即使 INVITE 确实被代理到新目的地,最初收到的错误响应仍会向上游传播。我相信这是 Mobicents 实现中的一个错误——但是如何解决这个问题呢?

代码:

public void doInvite(SipServletRequest req) {
  req.getProxy().proxyTo(req.getRequestURI());
}

public void doError(SipServletResponse res) {
    Proxy p = res.getProxy();
    p.setSupervised(false);
    p.proxyTo(...);
    // request is proxied, but the error response still passes
    // upstream - the retargeting of the transaction (through
    // proxying to a new destination ought to prevent that).
}
4

2 回答 2

0

您要从哪些其他 SIP 容器迁移您的应用程序?你是在做顺序代理还是并行代理?您收到哪个错误响应?您使用的是哪个版本的 Mobicents SIP Servlets 容器?您在 gist.github.com 或 pastebin.com 上有完整的日志吗?

于 2015-05-31T23:01:15.433 回答
0

作为一个纯代理解决方案,Mobicents 正在做正确的行为,将错误响应转发回调用发起者,因此顺序分叉的逻辑 [基于错误代码] 必须在调用方处理。

但是,如果您希望 mobicents 的这种行为,您需要为 mobicents 运行 B2BUA 模式,这应该可以让您更精细地控制决定独立于 2 个呼叫腿 [ ingress / egress ] 的行为。

发起者为 INVITE [ingress leg] 获得 183 Call Progress,而连续重试可以在 egress leg 上处理,而不会在 Ingress 上发生初始超时的风险。

于 2015-06-01T05:03:51.220 回答