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).
}
答案 0 :(得分:0)
您从哪个其他SIP容器迁移应用程序? 你在做顺序或并行代理吗? 您收到了哪些错误回复? 您使用的是哪个版本的Mobicents SIP Servlets容器? 您是否在gist.github.com或pastebin.com上提供了完整的日志?
答案 1 :(得分:0)
作为一种纯粹的代理解决方案,Mobicents正在做出将错误响应转发回呼叫发起者的正确行为,因此必须在呼叫方处理顺序分叉[基于错误代码]的逻辑。
但是如果你想要mobicents的这种行为,你需要为mobicents运行B2BUA模式,这样可以让你更精细地控制决定独立于2个调用腿[ingress / egress]的行为。
Originator获得INVITE [入口段]的183呼叫进度,而顺序重试可以在出口段处理,而不存在Ingress上发生初始超时的风险。