我有一个运行注册商和tm的Kamailio 4.0.4代理(K)。某些AOR有多个客户端,它们都会自动接受某些INVITE,这些INVITE会导致竞争条件,并且会向被叫方发送200多个OK分支。
方案: - A向B发送邀请
INVITE分支并发送到B1和B2 注意:B1的链路延迟为100毫秒,B2延迟为150毫秒
B1和B2都会立即自动接受200 OK,
分支INVITE后200ms,K从B1获得200 OK并将其转发给A
A实际上是一个本地AS,它会立即向200确认回到B1
现在的问题是,B2已经发送了200 OK 50ms,而且还没有接收到另外150ms的CANCEL
所以来自B2的200 OK来到K但是已经在A和B1之间设置了呼叫
现在对于实际问题,如何阻止额外的200 OK进入A?
我可以看到它应该如何运作的一些选项:
我甚至找不到覆盖这种竞争条件的RFC。
答案 0 :(得分:1)
使用kamailio的简单解决方案是在获得任何200k后放弃。即使CANCEL到达,被叫方也可能不会停止重新发送,等待ACK并最终等待BYE。
根据rfc,TM模块将始终转发200ok。如果你想放入kamailio.cfg,可能的解决方案是: