freeswitch由于ext-sip-ip地址填写错误导致32秒拆线问题

    今天在freeswitch投产使用过程中,发现大量通话时长为32秒的通话,并且这下32秒通话全部来自与其中一台freeswitch中,这台freeswitch中的通话记录没有超过32秒的话单,所以对这台freeswitch进行抓包分析处理,发现其中contant代的地址不对,代成了媒体地址,所以导致在发送200ok接通后,对方ack回不来,32秒后自动拆线。

   对此分析了一下该逻辑的源码在nua_session.c中,里面有一个process_timeout的函数,这个函数是处理ack超时的,判定freeswitch多久没有接受到ack即认为对方没接通,则主动发送bye消息进行拆线。大家可以在这里增加告警代码,将freeswitch的ip发送到告警的api服务端,从而知道这一情况的发生。可以监控到自己或者没回ack所导致的异常,及时进行自处理,以及告知对端客户。

   并且发现在profile中有一个参数可以设置这个超时时间,可以根据业务需求进行对应的修改,不过作为标准的协议栈,不建议大家进行修改,参数为:timer-T1X64

   官方的解释该参数的用途为:

Transaction timeout (defaults to T1 * 64).
         Set the T1x64 timeout value used by the SIP transaction engine.
         The T1x64 is duration used for timers B, F, H, and J (UDP) by the SIP transaction engine.

         The timeout value T1x64 can be adjusted separately from the initial retransmission interval T1

我们可以在profile中添加这一行进行启用:

其中value就是超时时间,单位为ms,这里为20000,即当对方20S没有回ACK使就会使其挂断。


你可能感兴趣的:(freeswitch)