首页 > 其他分享 >sipp模拟uas发送reinvite

sipp模拟uas发送reinvite

时间:2024-09-13 17:38:45浏览次数:12  
标签:last ip uas Content rtpmap sipp reinvite

概述

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

在更新了sipp模拟update的配置方案之后,我希望对比一下fs对update和reinvite的处理流程。

本文档记录sipp的配置方案,该方案中包含了update和reinvite的信令。

环境

CentOS 7.9

freeswitch 1.10.7

sipp.3.6.2

方案描述

测试环境模块。

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

sipp作为uas端,模拟update和reinvite消息。

fs作为测试服务器,响应sipp的update和reinvite消息。

后续应该会针对fs的响应流程做优化。

sipp脚本

sipp的脚本中,分别模拟update消息和reinvite消息。

183消息中使用105作为rfc2833的payload。

update消息中使用103作为rfc2833的payload。

200接通之后,sipp会发送2个DTMF码(payload=101),fs会丢弃这2个码。

reinvite消息中使用101作为rfc2833的payload。

reinvite完成之后,sipp会再发送2个DTMF码(payload=101),fs会转发这2个码。

脚本 uas-test-reinvite.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 105
      a=rtpmap:8 PCMA/8000
      a=rtpmap:18 G729/8000
      a=rtpmap:105 telephone-event/8000
      a=fmtp:105 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="1000"/>

  <send retrans="500" crlf="true">
    <![CDATA[

      INVITE [$3] SIP/2.0
      [last_Via:]
      To: [$1]
      From: [$2];tag=sippTag01
      [last_Call-ID:]
      CSeq: 12 INVITE
      Max-Forwards: 64
      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:18 G729/8000
      a=rtpmap:8 PCMA/8000
      a=rtpmap:101 telephone-event/8000
      a=fmtp:101 0-15
      a=ptime:20

      ]]>
  </send>

  <recv response="100" optional="true">
  </recv>

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

  <send>
    <![CDATA[

      ACK [$3] SIP/2.0
      [last_Via:]
      To: [$1]
      From: [$2];tag=sippTag01
      [last_Call-ID:]
      CSeq: 12 ACK
      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
      Max-Forwards: 64
      Content-Length: 0

    ]]>
  </send>

  <pause milliseconds="1000"/>

  <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-reinvite.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-reinvite.xml

 

10011发起呼叫测试。

使用eyebean发起呼叫,并在10秒后挂机,查看fs节点对DTMF的处理情况。

sip信令和媒体截图

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

 

总结

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

先比对update消息和reinvite消息的处理流程,再针对具体问题进行优化。

 

空空如常

求真得真

 

标签:last,ip,uas,Content,rtpmap,sipp,reinvite
From: https://www.cnblogs.com/qiuzhendezhen/p/18412595

相关文章

  • Dockerfile说明-镜像最小化-docker-squash镜像压缩工具
     概述很多时候,构建的镜像总是在构建完之后分了好几个镜像层,有些镜像层还是因为只改变了一点东西,就多了整个目录的大小。那么,如何让镜像在构建的时候保持最小化,就是我们运维需要关心的问题。毕竟,有时候镜像太大,可能会被某些厂家的云仓库给限制上传的问题。 Dockerfile用法介......
  • Kuasar 最前沿:KubeCon China 2024 精彩回顾
    8月21日-23日,由云原生计算基金会(CNCF)和Linux基金会联合主办的KubeCon+CloudNativeCon+OpenSourceSummit+Al_devChina2024大会在中国香港盛大召开。会上,多位Kuasar社区Maintainer分享了关于云原生容器运行时与大模型等领域前沿技术的案例实践与经验思考。KubeConChina......
  • sipp模拟uas发送update
     概述freeswitch是一款简单好用的VOIP开源软交换平台。但是fs在处理update消息时候有BUG,为了复现问题,使用sipp模拟uas,发送update并发送DTMF码。本文档记录sipp的配置方案。环境CentOS7.9freeswitch1.10.7sipp.3.6.2问题描述在与运营商对接的过程中,运营商内部会先返......
  • openGuass——表空间、数据库、Schema详解
    目录一、表空间二、数据库三、模式:Schema四、databaseschematable之间的关系五、表六、分区表七、索引八、视图九、序列十、同义词十一、约束一、表空间自带了两个表空间:pg_default和pg_global。查看命令:\db默认表空间pg_default:用来存储非共享系统表、用......
  • 嵌入式文件系统介绍合集:FAT32、exFAT、ext3、ext4、jffs2、yaffs2、ubifs、squashf
    liwen012024.07.21前言在嵌入式Linux系统中常用的文件系统有:FAT32、exFAT、ext3、ext4、jffs2、yaffs2、ubifs、squashfs。不管是在文件系统类型选型还是嵌入式应用软件面试中,关于文件系统的问题都会经常被提起。就目前而言,并没有哪款文件系统可以适用于所有应用场景,它们各......
  • 文件系统(十一):Linux Squashfs只读文件系统介绍
    liwen012024.07.21前言嵌入式Linux系统中,squashfs文件系统使用非常广泛。它主要的特性是只读,文件压缩比例高。对于flash空间紧张的系统,可以将一些不需要修改的资源打包成压缩的只读文件系统格式,从而达到节省空间的目的。另外还有个特性就是它可以分块解压缩,使用数据会更加灵活......
  • quasar项目中用js调用串口
    参考链接:NodeSerialPort  (网站中https://serialport.io/docs/guide-electron提到了ElectronSerialportExample,这个项目中涉及到serialport的代码在renderer.js中)WebSerialAPI,web端通过串口与硬件通信电脑上已有的端口:(选择“在新标签页中打开图片”查看原图)看到网页......
  • Quasar+Electron开发打包为桌面端exe
    上一篇博客写了Quasar+Cordova开发打包移动端app,今天来写一下Quasar+Electron如何开发打包为桌面端exe。Electron英文文档:https://www.electronjs.org/docs/latest/  Electron中文文档:https://electron.nodejs.cn/Quasar+Electron文档:https://www.quasar-cn.cn/quasar-cli......
  • Quasar +Cordova 开发移动端app
    使用cordova开发移动端app安装、配置教程见:https://www.cnblogs.com/sunshine233/p/18241626quasar+cordova文档:https://www.quasar-cn.cn/quasar-cli-vite/developing-cordova-apps/introduction按照 使用Cordova运行项目到android 安装、配置完以后,quasar文档可以直接从......
  • Quasar (.NET3.5)通信建立,持续更新中
    Quasar(.NET3.5)通信建立quasar是一个知名的远控软件,这里解析它在.net3.5的版本。3.5可以解决windows的兼容性问题,即:经过一些方法编译为特定的计算机代码,可以在windows7-windows11的内存中加载执行Client端初始化函数Initialize()包含一些系统参数的获取,以及初始化客户......