概述

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

freeswitch对于180/183的消息处理有默认的规则,但是在3GPP的标准中,消息流程会更加复杂,场景更多变。

这样就需要我们根据实际环境中的场景定制消息流程。

本文只讨论带SDP的183/180消息。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

fs中183/180的默认处理

fs收到183(SDP)的时候,会透传183(SDP)到A路。

fs收到180(SDP)的时候,默认将180(SDP)转换为183(SDP)传给A路。

在设置了参数“early_use_180”的场景下,fs会把183(SDP)和180(SDP)都转换为180(SDP)传给A路。

期望的183/180处理流程。

fs收到183(SDP)的时候,会透传183(SDP)到A路。

fs收到180(SDP)的时候,会透传180(SDP)到A路。

修改方案

修改方案,在B路处理180(SDP)消息的流程中,设置通道变量“180withsdp=true”,在A路响应183/180消息的流程中,检查通道变量“180withsdp”的值并设置响应的消息码。

修改 src\mod\endpoints\mod_sofia\sofia.c,7537行

if (status == 180 && r_sdp) {

status = 183;

if (switch_true(switch_channel_get_variable(channel, "passthrough180")))

{

//设置通道变量,标记B路的180+SDP,在A路响应时,处理send_sip_code为180+SDP

if (switch_core_session_get_partner(session, &other_session) == SWITCH_STATUS_SUCCESS)

{

other_channel = switch_core_session_get_channel(other_session);

switch_channel_set_variable(other_channel, "180withsdp", "true");

switch_core_session_rwunlock(other_session);

}

}

}

修改 src\mod\endpoints\mod_sofia\mod_sofia.c,2548行

if (switch_true(switch_channel_get_variable(channel, "passthrough180")) &&

switch_true(switch_channel_get_variable(channel, "180withsdp")) )

{

send_sip_code = 180;

p_send_sip_msg = sip_180_Ringing;

}

重新编译安装mod_sofia模块。

修改拨号计划如下。

<include>

<context name="out2in">

<extension name="sbc-out2in" continue="true">

<condition field="destination_number" expression="^(\d+)$">

<action application="export" data="passthrough180=true" />

<action application="bridge" data="{sip_invite_call_id=${sip_call_id}

}sofia/external/sip:${destination_number}@10.55.55.138:5555"/>

</condition>

</extension>

</context>

</include>

测试

搭建测试环境,B路响应180(SDP)。

总结

常见的消息处理流程都可以在mod_sofia中找到,但是对于AB路之间的消息透传,以及涉及到codec媒体协商的流程会比较复杂。

空空如常

求真得真

freeswitch透传带SDP的180的更多相关文章

  1. NodeMCU透传数据到TcpServer和Yeelink平台

    准备工作 1. NodeMCU  LUA ESP8266 CP2102  WIFI Internet Development Board,仔细看背面可以看出自带cp2102模块,可以通过普通的手机充电 ...

  2. ESP8266串口和MQTT服务器消息互传(版本一) 单纯透传+保存WIFI账号信息

    目标 制作一个ESP8266串口和MQTT相互透传的小WIFI,可用手机修改其连接的路由器,由此该模块可以任意加载到各种串口传输的单片机上,完成硬件到云端的传输. 1 实物图 2 MQTT网页测试客户 ...

  3. Dubbo透传traceId/logid的一种思路

    前言: 随着dubbo的开源, 以及成为apache顶级项目. dubbo越来越受到国内java developer欢迎, 甚至成为服务化自治的首选方案. 随着微服务的流行, 如何跟踪整个调用链, 成 ...

  4. NodeMCU入门(1):刷入At固件,透传数据到TcpServer和Yeelink平台

    准备工作 1. NodeMCU  LUA ESP8266 CP2102  WIFI Internet Development Board,仔细看背面可以看出自带cp2102模块,可以通过普通的手机充电 ...

  5. 手把手教你开发BLE数据透传应用程序

    如何开发BLE数据透传应用程序?什么是BLE service和characteristic?如何开发自己的service和characteristic?如何区分ATT和GATT?有没有什么工具可以对B ...

  6. CC1101 433无线模块,STM8串口透传

    CC1101 433无线模块,STM8串口透传   原理图:http://download.csdn.net/detail/cp1300/7496509 下面是STM8程序 CC1101.C /*** ...

  7. 16-ESP8266 SDK开发基础入门篇--TCP 服务器 非RTOS运行版,串口透传(串口回调函数处理版)

    https://www.cnblogs.com/yangfengwu/p/11105466.html 其实官方给的RTOS的版本就是在原先非RTOS版本上增加的 https://www.cnblogs ...

  8. Arduino uno r3 使用 ESP8266 UART-WiFi 透传模块

    一.所需硬件材料 1.ESP8266:01s某宝上3.5块钱 2.杜邦线:某宝几块钱一组40P,这里只需要三根,用于连接 树莓派与继电器 3.烧录器 二.ESP8266 AT固件烧录 ESP8266主 ...

  9. 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环

    一.预言 要实现一个智能篮球场套件,需要设计一个佩戴在篮球运动员手臂上的可以检测投篮.记步的手环,以及一套可以根据RSSI定位运动员的蓝牙定位装置.下面是大致需要的步骤: 首先,需要用CC2541透传 ...

  10. 个推+DCLOUD,推送消息和透传消息

    DCLOUD方案中集成了个推方案,最好是用个推来做推送相关的东西 消息分2类: 1.推送消息,这种一般会出现在手机的最上面的通知栏,用户是肯定会知道的 2.透传消息,这种一般就是一个Alert提示框, ...

随机推荐

  1. RV1126 快速启动

    一.硬件信息 RV1126/RV1109 系列芯⽚内置硬件解压缩模块 -- decom,可以极⼤得提升系统启动速度 RV1126/RV1109 内置⼀个 MCU,MCU 在 SoC 上电后就会快速启动 ...

  2. scrapy 请求meta参数使用案例-豆瓣电影爬取

    num = 0 import scrapy from scrapy.http import HtmlResponse from scrapy_demo.items import DoubanItem ...

  3. 【UniApp】-uni-app-项目实战页面布局(苹果计算器)

    前言 经过前面的文章介绍,基本上 UniApp 的内容就介绍完毕了 那么从本文开始,我们就开始进行一个项目的实战 这次做的项目是苹果计算器,这个项目的难度不是很大,但是也不是很简单,适合练手 创建项目 ...

  4. 【C++】关于引用类型学习记录

    学习模板(泛型)的时候针对定义为引用类型有些费解 1 class BigType { 2 // 假设这里有大量的数据和复杂的操作 3 }; 4 5 template <typename T> ...

  5. C#如何对List中的Object进行排序

    首先定义一个List类,这个类里面包含了Name和Total两个属性变量,下面就是针对这两个变量进行排序. public class Player { public string Name { get ...

  6. Blazor快速开发框架Known-V2.0.0

    Known2.0 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行. 官网:http://known.pumantech.com Gitee: https ...

  7. 如何在SAP GUI中快速执行新的事务代码

    当我们成功登录SAP的某个连接后,在SAP GUI起始页(SAP轻松访问),我们可以通过点击[收藏夹]或者在界面左上角的输入框输入对应的事务代码,直接进入对应事务的界面.但是下面列举的场景,你是否知道 ...

  8. Sequelize的简单连接和使用

    Sequelize是一个基于Node.js的ORM框架 特点: 1.支持多种数据库:Sequelize支持多种关系型数据库,包括MySQL.PostgreSQL.SQLite和MSSQL等,适用于需要 ...

  9. JavaImprove--Lesson03--String的工具类,Math,Runtime,BigDecimal,Date

    一String的工具类 String的作为字符串对象,也是使用最多的数据类型对象 所以难免有很多操作,字符串的常见操作包括:字符串拼接,字符串反转,字符串长度,字符串转换等 直接使用String类型来 ...

  10. Vue接入谷歌广告(Google Adsense)

    1.注册账户 首先你要拥有一个google账号,点击注册谷歌账号,点击个人账号根据提示一步一步来即可注册成功.(当然你需要魔法才可以正常访问谷歌服务) 2.补充账户信息,申请广告授权 点击进入Goog ...