当前位置:首页 > 杂谈 > 正文内容

freeswitch如何判断挂机方

2025-04-09 22:04:25杂谈41

环境

测试环境如下:

  • 操作系统: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领域的软交换功能。