概述

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. CISC与RISC

  2. # C# 重新认识一下 IEnumerable<T>,IAsyncEnumerable<T> 以及搭配异步可能遇到的问题

    C# 重新认识一下 IEnumerable<T>,IAsyncEnumerable<T> 以及搭配异步可能遇到的问题 前言 为啥会想到写这个 为了这碟醋,包了这顿饺子 作为老鸟 ...

  3. 异常:Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.qbb.srb.core.mapper.DictMapper.batchInsert

    程序报错:Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com ...

  4. 聊一聊 C# 线程切换后上下文都去了哪里

    一:背景 1. 讲故事 总会有一些朋友是不是问一个问题,在 Windows 中线程做了上下文切换,请问被切的线程他的寄存器上下文都去了哪里?能不能给我挖出来?这个问题其实比较底层,如果对操作系统没有个 ...

  5. Linux磁盘专题-常用分区命令

    划分分区 fdisk 专门用于划分MBR类型的分区.(mbr分区类型在linx中也叫msdos) 注意:fdisk在centos7上已经可以用来划分gpt类型的分区. 详细不说了,N年之前学习过 gd ...

  6. lxml模块

    lxml主要用xpath.css选择器等来提取xml格式文档,html也是xml格式文档的一种. xpath方法返回列表的三种情况 返回空列表:没有找到任何元素 返回字符串列表:xpath规则匹配用了 ...

  7. Intellij IDE 对接SVN

    1.安装SVN(SVN安装包见附件) 注意安装时需要选择第二个选项进行安装 2.安装SVN中文包(见附件) 安装完成后随便找个文件夹右键确认SVN安装是否生效 3.Intellij IDE得Setti ...

  8. 测试member和coupon的远程调用

    测试member和coupon的远程调用 想要获取当前会员领取到的所有优惠券.先去注册中心找优惠券服务, 注册中心调一台优惠券服务器给会员,会员服务器发送请求给这台优 惠券服务器,然后对方响应. Fe ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (169)-- 算法导论13.2 2题

    二.用go语言,证明:在任何一棵有 n 个结点的二叉搜索树中,恰有 n-1种可能的旋转. 文心一言: 要证明在任何一棵有 n 个结点的二叉搜索树中,恰有 n-1 种可能的旋转,我们可以按照以下步骤逐步 ...

  10. Redis配置模式及各自优缺点

    大家好,我是闲者,今天简单聊下redis部署模式.Redis支持多种不同的数据结构和模式,以满足不同的使用场景.以下是一些常见的Redis配置和模式示例以及详解.原文地址:Redis配置模式及各自优缺 ...