sipp模拟uas发送update

news/2024/10/5 19:15:50

 

概述

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

但是fs在处理update消息时候有BUG,为了复现问题,使用sipp模拟uas,发送update并发送DTMF码。

本文档记录sipp的配置方案。

环境

CentOS 7.9

freeswitch 1.10.7

sipp.3.6.2

问题描述

在与运营商对接的过程中,运营商内部会先返回183,然后B路落地端再通过update修改媒体参数。

但是fs在处理update消息时,sofia-sip协议栈会直接响应200 OK,并且200响应消息中sdp的媒体参数不是经过协商后的结果。

当update消息上报fs的业务层后,fs的业务层会根据update的sdp协商并设置媒体参数,但是fs业务层的协商结果和B路落地端的结果可能会存在差异,造成媒体丢失问题。

sipp脚本

测试环境模块。

eyebean --> fs-reg --> fs --> sipp

sipp作为uas端,并在183消息后发送update消息。

其中,183消息中使用101作为rfc2833的payload,update消息中使用103作为rfc2833的payload。

脚本 uas-test-update.xml 内容如下。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">

<scenario name="Basic UAS responder">
<recv request="INVITE" crlf="true" >
<action>
<ereg regexp=".*"
search_in="hdr"
header="From:"
check_it="true"
assign_to="1" />
<ereg regexp=".*"
search_in="hdr"
header="To:"
check_it="true"
assign_to="2" />
<ereg regexp="sip:[^;&gt;]+"
search_in="hdr"
header="Contact:"
check_it="true"
assign_to="3" />
<ereg regexp=".*"
search_in="hdr"
header="CSeq:"
check_it="true"
assign_to="4" />
</action>
</recv>

<send>
<![CDATA[

SIP/2.0 100 Trying
[last_Via:]
[last_From:]
[last_To:];tag=sippTag01
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Length: 0

]]>
</send>

<pause milliseconds="1000"/>

<send>
<![CDATA[

SIP/2.0 183 Session Progress
[last_Via:]
[last_From:]
[last_To:];tag=sippTag01
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Type: application/sdp
Content-Length: [len]

v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[media_ip_type] [media_ip]
t=0 0
m=audio [media_port] RTP/AVP 8 18 101
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20

]]>
</send>

<pause milliseconds="1000"/>

<!-- The 'crlf' option inserts a blank line in the statistics report. -->
<send retrans="500" crlf="true">
<![CDATA[

UPDATE [$3] SIP/2.0
[last_Via:]
To: [$1]
From: [$2];tag=sippTag01
[last_Call-ID:]
CSeq: 11 UPDATE
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Type: application/sdp
Content-Length: [len]

v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[media_ip_type] [media_ip]
t=0 0
m=audio [media_port] RTP/AVP 8 18 103
a=rtpmap:18 G729/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:103 telephone-event/8000
a=fmtp:103 0-15
a=ptime:20

]]>
</send>

<recv response="200" crlf="true"> </recv>

<pause milliseconds="1000"/>

<send retrans="500">
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
From: [$1]
To: [$2];tag=sippTag01
[last_Call-ID:]
CSeq: [$4]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Type: application/sdp
Content-Length: 0

]]>
</send>

<recv request="ACK" crlf="true"> </recv>

<pause milliseconds="2000"/>

<nop>
<action>
<exec play_pcap_audio="../pcap/dtmf_2833_9.pcap"/>
</action>
</nop>

<pause milliseconds="500"/>

<nop>
<action>
<exec play_pcap_audio="../pcap/dtmf_2833_5.pcap"/>
</action>
</nop>

<pause milliseconds="500"/>

<nop>
<action>
<exec play_pcap_audio="../pcap/dtmf_2833_2.pcap"/>
</action>
</nop>

<pause milliseconds="500"/>

<nop>
<action>
<exec play_pcap_audio="../pcap/dtmf_2833_7.pcap"/>
</action>
</nop>

<pause milliseconds="500"/>

<recv request="BYE">
</recv>

<send>
<![CDATA[

SIP/2.0 200 OK
[last_Via:]
[last_From:]
[last_To:]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Length: 0

]]>
</send>

<timewait milliseconds="3000"/>

<ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>

<CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>

</scenario>

 

文件目录结构如下。

sipp.3.6.2/conf/uas-test-update.xml

sipp.3.6.2/pcap/dtmf_2833_9.pcap

 

启动sipp-uas。

cd sipp.3.6.2/conf

sudo sipp -i 10.55.55.138 -p 5555 -sf uas-test-update.xml

 

发起呼叫测试。

使用eyebean发起呼叫,并在10秒后挂机,查看fs节点对DTMF的处理情况,fs有收到sipp的DTMF码,但是并没有转发到A路,和上述的问题现象一致。

sip信令和媒体截图

整个呼叫流程的sip信令和媒体截图。

 

总结

sipp很灵活,可以帮助我们在测试中构建各种模拟场景。

修复方案有多种,后续安排上。

 

空空如常

求真得真

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/54741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

PbootCms模板中如何写 PHP 代码?

模板中编写 PHP 代码 在 PbootCms 中,执行 PHP 代码存在两种方式: 其一: /方法一/ {php} echo Hello Word! {/php} 其二: /方法二/ 鉴于 PbootCms 的模板机制,在原生 PHP 代码当中,是不能够对 pb 标签里的值予以二次处理的。 比如说(错误示范) 在后台存在一个字段{cont…

后台传值与dialog的使用

1.后台在给前端传值时需要id来作为唯一索引查找,前后端对应才能查找到对应的数据 我今天后端写好了代码但是前端没有把id引入导致更新信息不好使获取数据时一定要把id取到 2.dialog方法 这是一个简单的弹出框,里面是编辑内容的form卡片 将dialog的属性为true就能在页面显示,…

PbootCMS全站模板date时间标签/时间格式常见的8种调用方式

首页/列表标签:列表页时间:[list:date] 效果:2021-12-06 09:12:30列表页时间:[list:date style=Y-m-d] 效果:2021-12-06列表页时间:[list:date style=Y 效果:2021列表页时间:[list:date style=m-d] 效果:12-06列表页时间:[list:date style=y-m-d] 效果:21…

pbootcms调用标题和摘要描述字数限制方法

长度截取可以采用 len=* 或者 lencn=* 的方式。其中,使用 lencn=* 能够规避中英文长度不一致的问题,因为在这种设置下,一个英文字符被算作半个字。 在(V1.3.5+)版本中,进行内容截取时,可以通过 more=*来设置省略号内容,而若设置 more=则不会显示省略号。 例如:在对内容…

构建智慧人才档案,驱动未来发展新引擎 —— 解锁人才管理新篇章

在这个日新月异的时代,人才已成为企业最宝贵的资源,是推动社会进步和企业持续发展的核心动力。如何高效、精准地管理人才,让每一位员工的潜能得以最大化释放,成为了每一个组织面临的重大课题。人才档案报表不仅仅是一份简单的信息汇总,它是基于大数据与人工智能技术,对每…

标签贴错,AMD召回所有新一代CPU

前言 上个月,AMD 首席执行官苏姿丰博士在 ComputeX 开幕主题演讲上揭开了 Zen 5 架构的神秘面纱。作为 AMD 未来几年 CPU 的台柱子,Zen 5 立刻被引入消费级市场,面向笔记本和台式机的产品在几周内相继发布。 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术…

pbootcms模板发布文章显示的默认作者如何修改?

扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复等。专业解决各种疑难杂症,您有任何网站问题都…

PbootCMS文章列表没有缩略图时也不显示默认图片怎么办

在运用 pbootcms 模板来构建网站的整个流程之中,如果列表采用了缩略图予以显示,那么即使在后台未曾上传缩略图的情况下,依然会展示出默认图片。 倘若我们并不期望显示默认图片,在此种情形下,我们便能够借助 PB 自身所带有的缩略图返回值,来对是否上传了缩略图进行判定。 …