sipp模拟uas发送reinvite

news2024/11/16 23:44:42

概述

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消息的处理流程,再针对具体问题进行优化。

空空如常

求真得真

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

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

相关文章

Linux入门攻坚——32、Mini Linux制作

制作一个mini linux&#xff0c;需要对linux的启动流程很熟悉&#xff0c;这里又一次学习Linux的启动过程。 启动流程&#xff1a;CentOS 6 / 5&#xff1a; POST -->BootSequence(BIOS) --> BootLoader --> kernel (ramdisk) --> rootfs --> /sbin/init …

MySQL——数据类型(二)

目录 一、日期与时间类型 1.1 date 1.2 datetime 1.3 timestamp 二、枚举和联合 2.1 enum 2.2 set 2.2.1 set 的插入 2.2.2 set 的查找 思维导图可以参考如下链接&#xff1a; 数据类型.xmind 夜夜亮晶晶/MySQL - Gitee.com 一、日期与时间类型 1.1 date 日期 yyy…

2024 年最佳 Chrome 验证码扩展,解决 reCAPTCHA 问题

验证码&#xff0c;特别是 reCAPTCHA&#xff0c;已成为在线安全的不可或缺的一部分。虽然它们在区分人类和机器人方面起着至关重要的作用&#xff0c;但它们也可能成为合法用户和从事网络自动化的企业的主要障碍。无论您是试图简化在线体验的个人&#xff0c;还是依赖自动化工…

easy-es动态索引支持

背景 很多项目目前都引入了es&#xff0c;由于es弥补了mysql存储及搜索查询的局限性&#xff0c;随着技术的不断迭代&#xff0c;原生的es客户端使用比较繁琐不直观&#xff0c;上手代价有点大&#xff0c;所以easy-es框架就面世了&#xff0c;学习成本很低&#xff0c;有空大…

Ubuntu下安装最新版本Apache2文件服务器

文章目录 1.最新版本Apache2安装2. Apache2配置2.1 端口配置2.2 创建软连接,生成文件服务2.3 隐藏Apache2服务版本号2.4 添加用户&#xff0c;设置Apache2文件服务密码2.5 重启Apache2服务3. 执行后效果 1.最新版本Apache2安装 注意&#xff1a;安装最新版本必须升级Ubuntu为20…

Linux 中System V IPC的共享内存

1. 概念介绍 System V IPC&#xff08;Inter-Process Communication&#xff09;是一组在UNIX系统中用于进程间通信的机制&#xff0c;包括共享内存、消息队列和信号量。这些机制由System V内核提供&#xff0c;并且它们的存在不依赖于创建它们的进程&#xff0c;而是由内核管…

JSON数组

数组作为JSON对象 ["Google","Runoob","Taobao"] JSON数组在中括号中书写。 中括号[]保存的数组是值&#xff08;value&#xff09;的有序集合。一个数组以左中括号[开始&#xff0c;右中括号]结束&#xff0c;值之间使用逗号&#xff0c;分隔…

【第28章】Spring Cloud之Sentinel注解支持

文章目录 前言一、注解埋点支持二、SentinelResource 注解三、实战1. 准备2. 纯资源定义3. 添加资源配置 四、熔断(fallback)1. 业务代码1.1 Controller1.2 Service1.3 ServiceImpl 2. 熔断配置3. 熔断测试 总结 前言 上一章我们已经完成了对Sentinel的适配工作&#xff0c;这…

物联网架构

1 三层架构 三层架构就像我们拿着一个设备&#xff0c;通过网络直接连接到服务器获取结果&#xff0c;步骤简单。 举个例子&#xff1a;智能家居的温度监控系统 1. 感知层&#xff08;设备与传感器&#xff09; 在智能家居系统中&#xff0c;温度传感器被安装在家里的各个房间…

数据结构C //线性表(顺序表)ADT结构及相关函数

数据结构&#xff08;C语言版&#xff09;严蔚敏 吴伟民 线性表&#xff08;顺序表&#xff09;ADT结构及相关函数 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块&#xff08;头文件&#xff0c;函数文件&#xff0c;主文件&am…

JVM字节码与局部变量表

文章目录 局部变量表javap字节码指令分类 指令指令数据类型前缀加载和存储指令加载常量算术指令其他指令 字节码示例说明 局部变量表 每个线程的帧栈是独立的&#xff0c;每个线程中的方法调用会产生栈帧&#xff0c;栈帧中保存着方法执行的信息&#xff0c;例如局部变量表。 …

Alinx MPSoC驱动开发第11章异步IO实验按下按键报IO Possibile后结束进程

实验现象 使用Alinux官方提供的驱动和应用程序代码&#xff0c;petalinux工程基于自身需要进行了一定的修改&#xff08;主要是SD卡根文件系统&#xff09;。在把petalinux工程编译后打包的boot.scr、BOOT.BIN、image.ub放入FAT分区&#xff0c;把驱动程序与应用程序放在NFS共享…

万界星空科技电池MES具体功能及解决方案

电池的生产工艺具有高度的复杂性和精细度。从原材料的准备、电池的组装到最终的测试与包装&#xff0c;每一道工序都需要严格控制&#xff0c;以确保产品的质量和性能。 万界星空科技在电池MES&#xff08;制造执行系统&#xff09;领域提供了全面的解决方案&#xff0c;这些解…

JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)

前言 我们想要部署一个javaWeb项目到tomcat上&#xff0c;需要了解一些概念 什么是tomcat&#xff1f; Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;下的一个开源项目&#xff0c;主要用于实现 Java Servlet、JavaServer Pages&#xff08;…

在 PyCharm 中配置 Anaconda 环境

1. 安装 Anaconda 如果尚未安装 Anaconda&#xff0c;你可以从 Anaconda 官方网站 下载或者从清华镜像网站下载并安装适合你操作系统的版本。 2. 创建 Anaconda 虚拟环境 打开 Anaconda Prompt&#xff08;Windows&#xff09;或终端&#xff08;macOS/Linux&#xff09;。 …

EmguCV学习笔记 VB.Net 11.6 图像分割

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

如何升级用 Helm 安装的极狐GitLab Runner?

本分分享如何对 Helm 安装的 Runner 进行升级。整个过程分为三步&#xff1a;1、确定 Runner 最新版本或者想要升级的版本是否存在&#xff1b;2、用 Helm upgrade 命令进行升级&#xff1b;3、升级确认。 极狐GitLab 为 GitLab 的中国发行版&#xff0c;中文版本对中国用户更…

【西电电装实习】6. 手装无人机的蓝牙断连debug

文章目录 前言零、闪灯状态零零、翻滚角&#xff0c;俯仰角&#xff0c;偏航角一、问题描述二、现象解释三、解决方案参考文献 前言 在 西电无人机电装实习 时遇到的问题使用蓝牙芯片 CH582F。沁恒的蓝牙芯片CH582F是一款集成了BLE&#xff08;Bluetooth Low Energy&#xff0…

华为初级认证HCIA怎么样?

想在网络技术领域实现职业突破吗&#xff1f;华为HCIA初级认证是专为网络领域的新手与初学者设计的一项入门级认证。它旨在评估并确认个人对网络基本原理和技术知识的扎实掌握&#xff0c;是步入华为认证体系大门的基石。 一、华为HCIA 初级认证概述 华为初级认证网络工程师&am…

分类预测|基于黑翅鸢优化核极限学习机的数据分类预测Matlab程序BKA-KELM 多特征输入多类别输出 含基础KELM

分类预测|基于黑翅鸢优化核极限学习机的数据分类预测Matlab程序BKA-KELM 多特征输入多类别输出 含基础KELM 文章目录 一、基本原理BKA-HKELM 分类预测原理和流程总结 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 BKA-HKELM 分类预测原理和流程 1. 黑翅鸢优化…