freeswitch的gateway实现出中继的主备方案

news/2024/11/17 3:35:55/

 

概述

freeswitch是一款简单好用的VOIP开源软交换平台。

某些呼叫场景中,我们有2条出中继线路可选,2条出中继需要按照主备模式来配置,优先使用主中继呼叫,当主中继出现问题时,呼叫自动转移到备用中继呼叫。

本节中,我们利用gateway的option检测配置和正则表达式,组合实现中继线路的主备方案。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

APP接口

sofia模块接口,可以查看“<profile>”下对应的“UP”状态的gateway列表。

sofia profile <profile> gwlist up

mod_dptools模块接口,正则表达式规则匹配。

regex value expression results*

下面的表达式含义是,查看“external”下“UP”状态的gateway列表,如果其中包含名称为“gw-138-5080”的gateway,则返回“true”。

${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-5080)(.*)$)}

配置&测试

配置conf/sip_profile/external/gw-138-5080.xml,设置网关参数,gw-138-5090.xml和gw-138-15090.xml设置方法一样。

<include>

    <gateway name="gw-138-5080">

        <param name="username" value="not-used"/>

        <param name="realm" value="10.55.55.138:5080"/>

        <param name="password" value="not-used"/>

        <param name="register" value="false"/>

        <!--send an options ping every x seconds, failure will unregister and/or mark it down-->

        <param name="ping" value="20"/>

        <param name="ping-min" value="3"/>

        <param name="ping-max" value="6"/>

        <param name="ping-user-agent" value="proxy"/>

    </gateway>

</include>

修改配置文件conf/dialplan/test.xml,设置拨号计划。

先检查“gw-138-15090”gateway是否“UP”状态,如果是则使用“gw-138-15090”呼出,如果不是再检查“gw-138-5090”gateway是否“UP”状态并呼出。

<extension name="test-gw-master" continue="true">

    <condition field="${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-15090)(.*)$)}" expression="^true$" break="on-true">

        <action application="bridge" data="{sip_invite_call_id=${sip_call_id}}sofia/gateway/gw-138-15090/${destination_number}"/>

    </condition>

    <condition field="${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-5090)(.*)$)}" expression="^true$" break="on-true">

        <action application="bridge" data="{sip_invite_call_id=${sip_call_id}}sofia/gateway/gw-138-5090/${destination_number}"/>

    </condition>

</extension>

发起呼叫10011->1002,测试日志如下,符合预期流程,使用“gw-138-5090”gateway呼出。

2022-12-15 11:27:15.896136 [INFO] mod_dialplan_xml.c:637 Processing 10011 <10011>->1002 in context public

...

Dialplan: sofia/external/10011@10.55.55.138 parsing [public->test-gw-master] continue=true

Dialplan: sofia/external/10011@10.55.55.138 Regex (FAIL) [test-gw-master] ${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-15090)(.*)$)}(false) =~ /^true$/ break=on-true

Dialplan: sofia/external/10011@10.55.55.138 Regex (PASS) [test-gw-master] ${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-5090)(.*)$)}(true) =~ /^true$/ break=on-true

Dialplan: sofia/external/10011@10.55.55.138 Action bridge({sip_invite_call_id=${sip_call_id}}sofia/gateway/gw-138-5090/${destination_number})

...

EXECUTE sofia/external/10011@10.55.55.138 bridge({sip_invite_call_id=36bdeb5a-f6cb-123b-7d99-000c29a63969}sofia/gateway/gw-138-5090/1002)

总结

freeswitch中功能接口繁多,组合使用会有意想不到的收获。

fs在设计之初,应该也是考虑到通过不同的功能接口以搭积木的方式实现灵活复杂的呼叫流程。

空空如常

求真得真


http://www.ppmy.cn/news/7681.html

相关文章

C语言基础 — ( 顺序程序设计[ 运算符、表达式 ] )

欢迎小伙伴的点评✨✨ 本篇章系列是对C语言的深度思考和总结、关于C语言内容会持续更新。 文章目录前言一、C运算符1.1、算数运算符1.2、关系运算符1.3、逻辑运算符1.4、位运算符1.5、赋值运算符1.6、条件运算、指针运算、字节运算1.7、C中的运算优先级二、不同类型数据间的混合…

Spring boot分布式链路追踪

Spring boot分布式链路追踪前言演示项目核心依赖一、系统配置文件 日志文件路径配置二、日志文件 logback.xml 其中重要的标志是“requestId”字眼三、配置全局拦截器 RequestIdTraceInterceptor.java 拦截交互请求带有 “requestId” 字眼的值四、实际使用五、效果展示 MDC.pu…

UDS-10.4 SecurityAccess (27) service

10.4 安全访问(27)服务 来自&#xff1a;ISO 14229-1-2020.pdf 10.4.1 服务描述 本服务的目的是提供一种访问数据和/或诊断服务的方法&#xff0c;这些数据和/或诊断服务由于安全、排放或安全原因而被限制访问。用于将例程或数据下载/上传到服务器以及从服务器读取特定内存位置…

Python常用函数笔记汇总2

1.分组汇总groupby 2.计算空值 # py计算空值 data.isnull().sum(axis0) data.notnull().sum(axis0)# py去重计数 data_op[id_num_op].value_counts().size data_op[id_num_op].size3.保留两位小数 # predict_proba保留两位小数 gnb GaussianNB() pre gnb.fit(X_train,y_tr…

特色功能(锐捷云桌面篇)

大家好&#xff0c;我是小杜。转眼居家办公已经一周多了&#xff0c;有没有小伙伴和小杜一样&#xff0c;感觉还是在公司上班好&#xff0c;进入状态快呢。现在的主要精力是业务上&#xff0c;处理完对应业务后&#xff0c;就开始了“快乐”的学习了。还是相信之前纯粹的学习时…

【华为OD机试真题2023 JAVA】优秀学员统计

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 优秀学员统计 知识点排序统计编程基础 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的…

【JavaSE成神之路】数组思考题讲解

哈喽&#xff0c;我是兔哥呀&#xff0c;今天就让我们继续这个JavaSE成神之路&#xff01; 这一节啊&#xff0c;咱们要学习的内容是数组的思考题讲解&#xff0c;也就是上一节我留下的两个小作业。 数组是非常重要的知识点&#xff0c;也是我们后续学习各种数据结构的基础&am…

在黑金zynqmp 上用emmc 启动的那些坑

缘由&#xff1a;由于硬件设计可能存在问题&#xff0c;导致sd 开启动失败&#xff0c;高速的时候&#xff0c;在建立VFS 时就会引起kernel 崩溃&#xff0c;官方的板子就正常&#xff0c;自己的板子第一版硬件可以&#xff0c;第二版就不行 思路&#xff1a;从emmc 启动 替代…