freeswitch如何判断挂机方
环境
测试环境如下:
- 操作系统:CentOS 7
- Freeswitch版本:v1.10.7
- 编译器:GCC 4.8.5
测试方案
启动Freeswitch后,通过fs_cli查看打印信息,并在命令行输入挂机事件监听命令,从console打印信息中,可以观察到挂机事件分为两路:inbound(aleg)和outbound(bleg)。
- 对于inbound(aleg),其“variable_sip_hangup_disposition”通常为“send_bye”,表示Freeswitch对A路发送了bye消息。
- 对于outbound(bleg),其“variable_sip_hangup_disposition”通常为“recv_bye”,表示Freeswitch从B路接收了bye消息。
通过分析这两路的“variable_sip_hangup_disposition”,可以判断该通呼叫的挂机方是被叫B路。
源码信息
通过搜索源代码中的“sip_hangup_disposition”,可以得到该字段所有可能的值,在bleg的挂机事件中,不同的值对应不同的场景:
- 未接通的场景:
- outbound(bleg)为send_cancel,表示A路挂机。
- outbound(bleg)为recv_refuse,表示B路挂机。
- 接通的场景:
- outbound(bleg)为send_bye,表示A路挂机。
- outbound(bleg)为recv_bye,表示B路挂机。
在不考虑Freeswitch自身挂断的情况下,通过对挂机事件中的“sip_hangup_disposition”字段进行分析,可以判断呼叫的挂机方向,如果Freeswitch作为业务服务器,在业务流程中有拒绝呼叫的情况下,挂机方向的判断可能会更复杂,为了辅助判断挂机方向,可以在cdr_csv的配置中加入“${sip_hangup_disposition}”字段,通过对这一字段的深入理解和分析,可以更好地理解和使用Freeswitch在VOIP领域的软交换功能。