Mobicents SIP错误响应处理 - 重新代理的正确方法是什么?

时间:2015-05-29 17:14:03

标签: sip sip-servlet mobicents-sip-servlets mobicents

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

  • 收到INVITE后,app处理和代理(受监督)下游(因此它可能会收到对邀请的回复)。

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

这应该可以防止初始错误响应传播到上游(因为事务有一个新目标)。但是,使用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).
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

但是如果你想要mobicents的这种行为,你需要为mobicents运行B2BUA模式,这样可以让你更精细地控制决定独立于2个调用腿[ingress / egress]的行为。

Originator获得INVITE [入口段]的183呼叫进度,而顺序重试可以在出口段处理,而不存在Ingress上发生初始超时的风险。