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).
}