概述

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配置方案优化的更多相关文章

  1. freeswitch的gateway配置方案

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在voip的网络模型中,网关是我们经常会遇到的概念. 在freeswitch中,如何配置gateway,如何使用好gateway的模 ...

  2. 应用程序池优化配置方案(IIS7、IIS7.5)

    定义: 是将一个或多个应用程序链接到一个或多个工作进程集合的配置,该池中的应用程序与其他应用程序被工作进程边界分隔, 一.一般优化方案 1.基本设置 [1]队列长度:默认1000,将原来的队列长度65 ...

  3. IIS 程序池优化配置方案

    内容目录 IIS 程序池优化配置方案IIS高并发配置一.IIS站点绑定程序池设置二.支持万级并发请求 IIS 程序池优化配置方案 最近由于系统的客户越来越多,有客户反映访问速度变慢,尤其是api的请求 ...

  4. Nginx配置性能优化与压力测试webbench【转】

    这一篇我们来说Nginx配置性能优化与压力测试webbench. 基本的 (优化过的)配置 我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.你应该能够在服务器的/et ...

  5. 大型网站的 HTTPS 实践(三)——基于协议和配置的优化

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt389 1 前言 上文讲到 HTTPS 对用户访问速度的影响. 本文就为大家介 ...

  6. php-fpm安装、配置与优化

    转载自:https://www.zybuluo.com/phper/note/89081 1.php中fastcgi和php-fpm是什么东西 最近在研究和学习PHP的性能方面的知识,看到了factc ...

  7. HTTPS 性能优化 -- 基于协议和配置的优化

    基于协议和配置的优化 1 前言 上文讲到 HTTPS 对用户访问速度的影响. 本文就为大家介绍 HTTPS 在访问速度,计算性能,安全等方面基于协议和配置的优化. 2 HTTPS 访问速度优化 2.1 ...

  8. 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联

    第九节: 利用RemoteScheduler实现Sheduler的远程控制   一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...

  9. 程序员的 Ubuntu 19.10 配置与优化指南

    原文地址:程序员的 Ubuntu 19.10 配置与优化指南 0x00 环境 CPU: Intel Core i9-9900k GPU: GeForce RTX 2070 SUPER RAM: DDR ...

  10. NoSQL 之 Redis配置与优化

    NoSQL 之 Redis配置与优化 1.关系数据库与非关系型数据库概述 2.关系数据库与非关系型数据库区别 3.非关系型数据库产生背景 4.Redis简介 5.Redis安装部署 6.Redis 命 ...

随机推荐

  1. 使用nacos配置无效,原因:项目中 gateway服务配置的 application的name:@artifactId@ 和nacos上配置的DataID 不一致导致

    遇到一个问题,项目启动后一致无法正常登陆进入后端,登陆时一直报错返回null,排查后发现是自己粗心,项目中 gateway服务配置的 application的name:@artifactId@   和 ...

  2. idea2020下载、安装、破解、配置

    idea2020下载.安装.破解.配置 idea2020下载 [推荐]官方下载地址:https://www.jetbrains.com/idea/download/other.html 进入后往下找, ...

  3. ElasticSearch之Index stats API

    获取指定索引的统计数据. 获取指定索引的全部统计数据,命令样例如下: curl -X GET "https://localhost:9200/testindex_001/_stats?pre ...

  4. intel 虚拟化 VT-d VT-x VT-c 的区别

    intel 虚拟化 VT-d VT-x VT-c 有什么区别,各是什么意思,有什么作用 简单描述理解 VT-d VT-x VT-c VT-d 英文全程为 Virtualization Technolo ...

  5. java:JDBC使用步骤(mysql)java小白的第一篇博客

    1:环境要求 先在你的mysql里面创造一个数据库(并添加一点数据) 下载并导入驱动 2:jdbc的五大步骤 第一步:加载mysql驱动: 1 Class.forName("com.mysq ...

  6. ubuntu 之 lftp 上传 和下载

    1. 安装 sudo apt-get install lftp 2. 简单教程 2.0 声明:上传或下载文件 用get 或 mget,这种方式 不包含文件夹本身,如果需要连文件夹一起上传或下载则需要使 ...

  7. PowerDotNet平台化软件架构设计与实现系列(17):PCRM个人用户管理平台

    个人用户管理是业务系统中非常基础且重要的一个公共服务系统,我们写的绝大多数应用都和个人用户或会员有关,用户(会员)数据安全无小事,必须有一个完备的用户管理平台系统. 因为不同公司的主业务不同,个人用户 ...

  8. 这一次,弄明白JS中的文件相关(一):概念篇

    概念是学习的基础.在学习JS中的文件操作之前,先把文件相关的各种概念搞清楚,很有好处. 1. 二进制: 计算机硬件仅能处理和存储二进制数据,所以不管是你正在写的代码,还是你硬盘里的小姐姐,都是以二进制 ...

  9. JavaScript异步编程3——Promise的链式使用

    目录 概述 详论 1️⃣回调地狱 2️⃣Promise实现 参考 概述 在上一篇文章<JavaScript异步编程2--结合XMLHttpRequest使用Promise>中,简要介绍了A ...

  10. 基于Llama2模型的开源模型

      2023年7月18日Meta开源了Llama2,在2万亿个Token上训练,可用于商业和研究,包括从7B到70B模型权重.预训练和微调的代码.相比Llama1,Llama2有较多提升,评估结果如下 ...