我使用的是Kamailio代理4.0.4版。我有两个UAC (Bob1, Bob2)注册了相同的URI。然后第三个UAC (Alice)向代理发送一个INVITE。两个uac都收到此邀请并接受呼叫。Kamailio现在取消了第二个(Bob2),并将第一个(Bob1)的200ok转发给Alice。
然而,我需要得到Bob1和Bob2对Alice的200个Ok响应。然后,Alice想要同时与它们交谈。
这在kamailio中可能吗?我怎样才能防止第二个200 Ok被取消?
在有状态模式下路由时(通过tm模块),Kamailio在收到200ok时取消所有其他活动分支。即使您认为同时生成两个200ok,也很可能一个接一个地处理它们,因此一个分支被取消。
你应该能够通过无状态路由实现你想要的。使用forward()函数而不是使用tm模块中的函数来发送请求。逻辑应该是这样的:
- 设置r-uri ($ru)为第一个目的地
- 向前()
- 设置r-uri ($ru)到第二个目标
- 向前()
如果目的地是通过查找("location")设置的,第一个将进入r-uri,您可以执行forward()。对于第二步,您必须通过$branch(…)变量获取其详细信息,并设置r-uri以及与下一跳相关的其他属性。