当前位置:首页 > 高端制造 > 正文

freeswitch的gateway配置方案优化

概述freeswitch是一款简单好用的VOIP开源软交换平台。在之前的文章中,我们简单介绍过gateway的三种配置方案,但是实际应用之后发现,方案中的参数设置有缺陷,会导致一些问题。本文档中,针对具体的gateway配置问题进行分析和解决。环境centos:(Final)或以上版本freeswi...

概述freeswitch是一款简单好用的VOIP开源软交换平台。在之前的文章中,我们简单介绍过gateway的三种配置方案,但是实际应用之后发现,方案中的参数设置有缺陷,会导致一些问题。本文档中,针对......


概述

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

在之前的文章中,我们简单介绍过gateway的三种配置方案,但是实际应用之后发现,方案中的参数设置有缺陷,会导致一些问题。

本文档中,针对具体的gateway配置问题进行分析和解决。

环境

centos:(Final)或以上版本

freeswitch:

GCC:4.8.5

之前的gateway配置和问题

配置conf/sip_profile/external/,设置网关参数,例子中只列举了必须的参数,非注册模式。

include

gatewayname="gw-138-5080"

paramname="username"value="not-used"/

paramname="realm"value="10.55.55.138:5080"/

paramname="password"value="not-used"/

paramname="register"value="false"/

!--sanoptionspingeveryxseconds,failurewillunregisterand/ormarkitdown--

paramname="ping"value="20"/

paramname="ping-min"value="3"/

paramname="ping-max"value="6"/

paramname="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

10x00007f4310d96974int_str_xtra()from/lib64/

30x00007f4310d3d990innua_signal()from/lib64/

50x00007f4308826bf9insofia_reg_check_gateway(profile=profile@entry=0xe027f0,now=1684490085)atsofia_:392

70x00007f4312db2d50indummy_worker(opaque=0xe07080)atthreadproc/unix/:151

90x00007f430f33bb0dinclone()from/lib64/

(gdb)f5

#50x00007f4308826bf9insofia_reg_check_gateway(profile=profile@entry=0xe027f0,now=1684490085)atsofia_:392

392nua_options(nh,

(gdb)l

387switch_copy_string(pvt-gateway_name,gateway_ptr-name,sizeof(pvt-gateway_name));

388nua_handle_bind(nh,pvt);

389

390gateway_ptr-pinging=1;

391gateway_ptr-ping_sent=switch_time_now();

392nua_options(nh,

393TAG_IF(gateway_ptr-register_sticky_proxy,NUTAG_PROXY(gateway_ptr-register_sticky_proxy)),

394TAG_IF(user_via,SIPTAG_VIA_STR(user_via)),

395SIPTAG_TO_STR(gateway_ptr-options_to_uri),SIPTAG_FROM_STR(gateway_ptr-options_from_uri),

396TAG_IF(gateway_ptr-contact_in_ping,SIPTAG_CONTACT_STR(gateway_ptr-register_contact)),

(gdb)

397TAG_IF(gateway_ptr-options_user_agent,SIPTAG_USER_AGENT_STR(gateway_ptr-options_user_agent)),

398TAG_END());

399

400switch_safe_free(user_via);

401user_via=NULL;

402}

(gdb)pgateway_ptr-options_user_agent

$1=0x7f430adc3092Address0x7f430adc3092outofbounds

问题三,options检测不够灵敏,自动切换时间较长,通过修改“ping-min”和“ping-max”参数的值,达到故障转移40秒内自动切换,故障恢复后40秒内切回。

新的gateway配置方法

include

gatewayname="gw-138-5080"

paramname="realm"value="10.55.55.138:5080"/

paramname="caller-id-in-from"value="true"/

paramname="register"value="false"/

!--sanoptionspingeveryxseconds,failurewillunregisterand/ormarkitdown--

paramname="ping"value="20"/

paramname="ping-min"value="2"/

paramname="ping-max"value="3"/

/gateway

/include

新的参数在测试后验证成功,结果符合预期。

总结

freeswitch的gateway概念有多种类型和参数,需要在实际应用场景下测试验证。

gateway的参数详情请参考fs官网文档。

空空如常

求真得真

最新文章