freeswitch的gateway配置方案优化

概述
freeswitch是一款简单好用的VOIP开源软交换平台。
在之前的文章中,我们简单介绍过gateway的三种配置方案,但是实际应用之后发现,方案中的参数设置有缺陷,会导致一些问题。
本文档中,针对具体的gateway配置问题进行分析和解决。
环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.10.7
GCC:4.8.5
之前的gateway配置和问题
配置conf/sip_profile/external/gw-138-5080.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>
在使用该网关发起呼叫的时候,会有三个问题。
问题一,gateway的invite消息的from头域“caller_id_number”字段内容错误。
From: "123456" <sip:not-used@10.55.55.138:5080;transport=udp;user=phone>;tag=Kpe5rrr9Nr9jK
问题二,网关参数"ping-user-agent"会导致fs刷新配置(reloadxml)的时候coredump。从core文件分析可以看到“sofia_reg_check_gateway”函数中的问题点。
(gdb) bt
#0 0x00007f430f3ac8c1 in __strlen_sse2_pminub () from /lib64/libc.so.6
#1 0x00007f4310d96974 in t_str_xtra () from /lib64/libsofia-sip-ua.so.0
#2 0x00007f4310d9764d in tl_xtra () from /lib64/libsofia-sip-ua.so.0
#3 0x00007f4310d3d990 in nua_signal () from /lib64/libsofia-sip-ua.so.0
#4 0x00007f4310d38830 in nua_options () from /lib64/libsofia-sip-ua.so.0
#5 0x00007f4308826bf9 in sofia_reg_check_gateway (profile=profile@entry=0xe027f0, now=1684490085) at sofia_reg.c:392
#6 0x00007f43087dac18 in sofia_profile_worker_thread_run (thread=<optimized out>, obj=0xe027f0) at sofia.c:3001
#7 0x00007f4312db2d50 in dummy_worker (opaque=0xe07080) at threadproc/unix/thread.c:151
#8 0x00007f430fce7ea5 in start_thread () from /lib64/libpthread.so.0
#9 0x00007f430f33bb0d in clone () from /lib64/libc.so.6
(gdb) f 5
#5 0x00007f4308826bf9 in sofia_reg_check_gateway (profile=profile@entry=0xe027f0, now=1684490085) at sofia_reg.c:392
392 nua_options(nh,
(gdb) l
387 switch_copy_string(pvt->gateway_name, gateway_ptr->name, sizeof(pvt->gateway_name));
388 nua_handle_bind(nh, pvt);
389
390 gateway_ptr->pinging = 1;
391 gateway_ptr->ping_sent = switch_time_now();
392 nua_options(nh,
393 TAG_IF(gateway_ptr->register_sticky_proxy, NUTAG_PROXY(gateway_ptr->register_sticky_proxy)),
394 TAG_IF(user_via, SIPTAG_VIA_STR(user_via)),
395 SIPTAG_TO_STR(gateway_ptr->options_to_uri), SIPTAG_FROM_STR(gateway_ptr->options_from_uri),
396 TAG_IF(gateway_ptr->contact_in_ping, SIPTAG_CONTACT_STR(gateway_ptr->register_contact)),
(gdb)
397 TAG_IF(gateway_ptr->options_user_agent, SIPTAG_USER_AGENT_STR(gateway_ptr->options_user_agent)),
398 TAG_END());
399
400 switch_safe_free(user_via);
401 user_via = NULL;
402 }
(gdb) p gateway_ptr->options_user_agent
$1 = 0x7f430adc3092 <Address 0x7f430adc3092 out of bounds>
问题三,options检测不够灵敏,自动切换时间较长,通过修改“ping-min”和“ping-max”参数的值,达到故障转移40秒内自动切换,故障恢复后40秒内切回。
新的gateway配置方法
vi gw-138-5080.xml
<include>
<gateway name="gw-138-5080">
<param name="realm" value="10.55.55.138:5080"/>
<param name="caller-id-in-from" value="true"/>
<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="2"/>
<param name="ping-max" value="3"/>
</gateway>
</include>
新的参数在测试后验证成功,结果符合预期。
总结
freeswitch的gateway概念有多种类型和参数,需要在实际应用场景下测试验证。
gateway的参数详情请参考fs官网文档。
空空如常
求真得真
freeswitch的gateway配置方案优化的更多相关文章
- freeswitch的gateway配置方案
概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在voip的网络模型中,网关是我们经常会遇到的概念. 在freeswitch中,如何配置gateway,如何使用好gateway的模 ...
- 应用程序池优化配置方案(IIS7、IIS7.5)
定义: 是将一个或多个应用程序链接到一个或多个工作进程集合的配置,该池中的应用程序与其他应用程序被工作进程边界分隔, 一.一般优化方案 1.基本设置 [1]队列长度:默认1000,将原来的队列长度65 ...
- IIS 程序池优化配置方案
内容目录 IIS 程序池优化配置方案IIS高并发配置一.IIS站点绑定程序池设置二.支持万级并发请求 IIS 程序池优化配置方案 最近由于系统的客户越来越多,有客户反映访问速度变慢,尤其是api的请求 ...
- Nginx配置性能优化与压力测试webbench【转】
这一篇我们来说Nginx配置性能优化与压力测试webbench. 基本的 (优化过的)配置 我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.你应该能够在服务器的/et ...
- 大型网站的 HTTPS 实践(三)——基于协议和配置的优化
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt389 1 前言 上文讲到 HTTPS 对用户访问速度的影响. 本文就为大家介 ...
- php-fpm安装、配置与优化
转载自:https://www.zybuluo.com/phper/note/89081 1.php中fastcgi和php-fpm是什么东西 最近在研究和学习PHP的性能方面的知识,看到了factc ...
- HTTPS 性能优化 -- 基于协议和配置的优化
基于协议和配置的优化 1 前言 上文讲到 HTTPS 对用户访问速度的影响. 本文就为大家介绍 HTTPS 在访问速度,计算性能,安全等方面基于协议和配置的优化. 2 HTTPS 访问速度优化 2.1 ...
- 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联
第九节: 利用RemoteScheduler实现Sheduler的远程控制 一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...
- 程序员的 Ubuntu 19.10 配置与优化指南
原文地址:程序员的 Ubuntu 19.10 配置与优化指南 0x00 环境 CPU: Intel Core i9-9900k GPU: GeForce RTX 2070 SUPER RAM: DDR ...
- NoSQL 之 Redis配置与优化
NoSQL 之 Redis配置与优化 1.关系数据库与非关系型数据库概述 2.关系数据库与非关系型数据库区别 3.非关系型数据库产生背景 4.Redis简介 5.Redis安装部署 6.Redis 命 ...
随机推荐
- C++ Qt开发:PushButton按钮组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QPushBu ...
- 初次认识 Git (v2.x)
什么是版本控制? 版本控制,也称为源代码控制,是一种跟踪和管理软件代码变更的实践.版本控制系统是软件工具,可帮助软件团队管理源代码随时间推移而发生的变更.随着开发环境的加速,版本控制系统可以帮助软件团 ...
- 国家专用加密数据传输之rsa,3des加密方法-rasor3desc
title: 国家专用加密数据传输之rsa,3des加密方法 date: 2021-12-20 13:08:21.646 updated: 2022-03-10 16:00:58.65 url: ht ...
- BUUCTF 加固题 Ezsql WriteUp
文章目录 想直接要加固代码的点这里 题目 一.查看 二.进入目标机器加固 修改前的文件: 添加如下代码: 修改后的文件 三.Check 想直接要加固代码的点这里 题目 靶机地址解释: 第一行:目标机器 ...
- GDAL创建JPG或PNG格式图像
目录 1. 概述 2. 实现 1. 概述 根据GDAL文档,JPG/PNG格式支持读取和批量写入,但不支持实时更新.也就是不支持Create()方法,但是支持CreateCopy()方法.也可能是由于 ...
- Langchain-Chatchat项目:3-Langchain计算器工具Agent思路和实现
本文主要讨论Langchain-Chatchat项目中自定义Agent问答的思路和实现.以"计算器工具"为例,简单理解就是通过LLM识别应该使用的工具类型,然后交给相应的工具( ...
- 让gorm代码飞起来,gorm+gmodeltool生成entity,让实体类代码更轻松。
背景 不卷!php经历多年的不衰败的原因只有一个,哪就是不卷,但是由于并发和缺乏编译严谨度降低,使得长青树不得己走向了衰败. 但!叱咤风云多年,大企百度.腾讯.新浪.搜狐的首先语言的流行在于,其语言的 ...
- gitee图床不能用了,心态崩了
起因 大概上周五晚上吧,想着可以正常下班了.也没啥事,正好可以逛逛自己的小破站,看看有没有小伙伴留言什么的. 然后发现小破站图片显示不出来了... 一开始也没在意,想着可能是Gitee又挂了,可能一会 ...
- 数据库实践丨MySQL多表join分析
摘要:在数据库查询中,往往会需要查询多个表的数据,比如查询会员信息同时查询关于这个会员的订单信息,如果分语句查询的话,效率会很低,就需要用到join关键字来连表查询了. Join并行 Join并行1. ...
- 一起学习ML和DL中常用的几种loss函数
摘要:本篇内容和大家一起学习下机器学习和深度学习中常用到的几种loss函数. 本文分享自华为云社区<[MindSpore易点通]网络实战之交叉熵类Loss函数>,作者:Skytier . ...