概述

freeswitch作为VOIP的软交换平台,需要对呼叫的信息做判断和归类。

常见的呼叫信息中,挂机方向的信息对于话单统计有很大的用处。

但是fs的原始话单和日志中并没有挂机方向的信息。

环境

centos:CentOS7

freeswitch:v1.10.7

GCC:4.8.5

测试方案

启动freeswitch之后,通过fs_cli查看打印信息,在命令行输入挂机事件监听命令。

freeswitch@localhost.localdomain> /event plain CHANNEL_HANGUP_COMPLETE

RECV EVENT

Event-Name: CHANNEL_HANGUP_COMPLETE

Call-Direction: inbound

variable_sip_hangup_disposition: send_bye

RECV EVENT

Event-Name: CHANNEL_HANGUP_COMPLETE

Call-Direction: outbound

variable_sip_hangup_disposition: recv_bye

从console打印信息中,可以看到挂机事件有两路,inbound(aleg)和outbound(bleg)。

inbound(aleg)的“variable_sip_hangup_disposition”是“send_bye”,表示fs对A路发送了bye消息。

outbound(bleg)的“variable_sip_hangup_disposition”是“recv_bye”,表示fs从B路接收了bye消息。

从A路和B路的“variable_sip_hangup_disposition”可以得出该通呼叫的挂机方是被叫B路。

源码信息

通过“sip_hangup_disposition”搜索源代码,可以查找到该字段所有值的列表。

recv_bye

recv_cancel

recv_refuse

send_bye

send_cancel

send_refuse

我们以bleg的挂机事件中“sip_hangup_disposition”字段为例。

未接通的场景。

outbound(bleg)为send_cancel,A路挂机。

outbound(bleg)为recv_refuse,B路挂机。

接通的场景。

outbound(bleg)为send_bye,A路挂机。

outbound(bleg)为recv_bye,B路挂机。

总结

freeswitch作为软交换的场景下,不考虑fs自身挂断的情况,通过对挂机事件中的“sip_hangup_disposition”字段分析,可以得出呼叫的挂机方向。

如果fs作为业务服务器,业务流程中有拒绝呼叫的情况下,挂机方向的判断会更复杂。

可以在cdr_csv的配置中加入“${sip_hangup_disposition}”字段,辅助判断挂机方向。

空空如常

求真得真

freeswitch如何判断挂机方的更多相关文章

  1. js 判断是什么类型浏览器

    //  firefoxif ( window.sidebar && "object" == typeof( window.sidebar ) && ...

  2. JS判断RadioButtonList是否有选中项

    提交表单之前对RadioButtonList控件的选中项进行判断: 方法一: <script type="text/javascript"> function chec ...

  3. Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题

    Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...

  4. 【NOI2013模拟】坑带的树(仙人球的同构+圆方树乱搞+计数+HASH)

    [NOI2013模拟]坑带的树 题意: 求\(n\)个点,\(m\)条边的同构仙人球个数. \(n\le 1000\) 这是一道怎么看怎么不可做的题. 这种题,肯定是圆方树啦~ 好,那么首先转为广义圆 ...

  5. SqlServer——判断对象是否存在

    对以下对象判断是否存在:database.table.proc.触发器.临时表.索引.对于这些对象的判断是通过数据表 SysObjects来获得的. 一.基础知识 1.SysObjects系统表 对于 ...

  6. 认识拨号计划-dialplan

    拨号计划是 FreeSWITCH 中至关重要的一部分.它的主要作用就是对电话进行路由(从这一点上来说,相当于一个路由表).说的简明一点,就是当一个用户拨号时,对用户所拨的号码进行分析,进而决定下一步该 ...

  7. 2016-1-29 图解HTTP(04)

    第7章 确保Web安全的HTTPS 在HTTP协议中有可能存在信息窃听或身份伪装等安全问题.使用HTTPS通信机制可以有效的防止这些问题. 7.1 HTTP的缺点 ● 通信使用明文(不加密),内容可能 ...

  8. LL LR SLR LALR 傻傻分不清

    [转] 一:LR(0),SLR(1),规范LR(1),LALR(1)的关系     首先LL(1)分析法是自上而下的分析法.LR(0),LR(1),SLR(1),LALR(1)是自下而上的分析法.   ...

  9. SSRF安全威胁在JAVA代码中的应用

    如上图所示代码,在进行外部url调用的时候,引入了SSRF检测:ssrfChecker.checkUrlWithoutConnection(url)机制. SSRF安全威胁:   很多web应用都提供 ...

  10. JAVA-小青蛙跳石头游戏

    游戏摘自微信传的手机网页版小游戏,我拿来做成了JAVA的界面版,但是没有去做素材,,直接拿方块代替小青蛙.游戏原址就不分享了,只能在手机上打开. 下面是源码: /* * Main.java * */ ...

随机推荐

  1. 编辑linux服务启动命令(app-script.sh命令编写)

    #!/bin/sh# 注:这里可替换为你自己的执行程序,其他代码无需更改APP_NAME=app-biz.jar #使用说明,用来提示输入参数usage() { echo "Usage: s ...

  2. Winform 好看控件库推荐:MaterialSkin.2

    MaterialSkin.2 控件包是在 MaterialSkin 及基础上二次开发而来的,在原控件基础上修复了一些Bug,丰富了主题以及动画效果,效果非常好. MaterialSkin.2 现在处于 ...

  3. SpringBoot核心注解:@SpringBootApplication

    @SpringBootApplication它是由三个注解的复合: @ComponentScan @SpringConguration @EnableAutoConfiguration 三个注解的作用 ...

  4. 【UniApp】-uni-app-项目实战页面布局(苹果计算器)

    前言 经过前面的文章介绍,基本上 UniApp 的内容就介绍完毕了 那么从本文开始,我们就开始进行一个项目的实战 这次做的项目是苹果计算器,这个项目的难度不是很大,但是也不是很简单,适合练手 创建项目 ...

  5. 华企盾DSC忘记了数据库解锁密码

    解决方法:登录数据库控制台,找到DSE所使用数据库默认名字"DSEDB",打开表"FileEncryptKey_TABLE",如下图所示: ​ 第一行,自动生成 ...

  6. NetSuite 开发日记:解决导入 CSV 与 Excel 文件时中文乱码问题

    Backgroud 在使用SheetJS库导入带有中文的CSV文件时,中文被解析为了乱码 Analysis 乱码肯定是编码问题 确定CSV的编码,可使用VS Code.记事本来查看 修改CSV文件编码 ...

  7. 一步一步教你写kubernetes sidecar

    本文分享自华为云社区<一步一步教你写kubernetes sidecar>,作者: 张俭. 什么是sidecar? sidecar,直译为边车. 如上图所示,边车就是加装在摩托车旁来达到拓 ...

  8. 如何保障Cookie的信息安全

    一.支持策略 保障 Cookie 的安全性可以从以下几个方面进行: 使用 HttpOnly 属性:设置 HttpOnly 属性可以防止JavaScript Document.cookie API 无法 ...

  9. 学习JVM---入门

    1.JVM体系结构 JVM的位置 JVM体系结构 2.类加载器 双亲委派机制 package java.lang; /** * 测试自定义java.lang.String类能否运行成功 * 体会双亲委 ...

  10. ElasticSearch之cat component templates API

    命令样例如下: curl -X GET "https://localhost:9200/_cat/component_templates?v=true&pretty" -- ...