OpenSIPS3.2保存和恢复sdp

uac                              opensips                 uas

     --->invite with sdp-->

                                                    --->invite with sdp

                                                    <---183 with sdp

        <--- 183 with sdp

                                                    <--- 200 without sdp

          <---200 without sdp

这是最近的一个case,需要在路由里面做如下处理:

收到183 reply的时候保存sdp

收到200 reply的时候恢复sdp

主要的路由代码如下:

loadmodule "cachedb_local.so"
modparam("cachedb_local", "cachedb_url", "local://")
...route[invite] {$du = "sip:192.168.1.100"; t_on_branch("per_branch_ops");t_on_reply("handle_nat");t_on_failure("missed_call");t_relay();exit;
}onreply_route[handle_nat] {xlog("incoming reply, status = $rs\n");# xlog("****$mb\n");if (($rs =~ "18[30]") && has_body("application/sdp")) {# save sdp# xlog("****$rb\n");	$var(key) = $ci + "+body";cache_store("local", $var(key), $rb, 120); # 120 秒超时$var(key) = $ci + "+length";		cache_store("local", $var(key), $hdr(Content-Length), 120); # 120 秒超时}if (($rs == "200") && !has_body("application/sdp")) {# restore sdp$var(key) = $ci + "+body";cache_fetch("local", $var(key), $var(sdp));xlog("****$var(sdp)\n");$var(key) = $ci + "+length";		cache_fetch("local", $var(key), $var(length));xlog("****$var(length)\n");if (($var(sdp) != NULL) && ($var(length) != NULL)) {insert_hf("Content-Type: application/sdp\r\n", "Call-ID");insert_hf("Content-Length: $var(length)\r\n", "Call-ID");add_body_part($var(sdp), "application/sdp");		}}
}

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

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

相关文章

从比亚迪的整车智能战略,看王传福的前瞻市场布局

众所周知&#xff0c;作为中国新能源汽车的代表企业&#xff0c;比亚迪在中国乃至全球的新能源汽车市场一直都扮演着引领者的角色。2024年新年伊始&#xff0c;比亚迪又为新能源汽车带来了一项重磅发布。 整车智能才是真智能 近日&#xff0c;在“2024比亚迪梦想日”上&#xf…

BERT问答模型回答问题

在数据准备阶段&#xff0c;确保您有一个高质量的问答对数据集非常重要。这个数据集应该包含问题和对应的答案&#xff0c;以及答案在上下文中的位置&#xff08;起始和结束索引&#xff09;。 预处理数据时&#xff0c;清洗数据、去除无用信息、分词、转换为小写等操作可以帮…

基于二值化图像转GCode的斜向扫描实现

基于二值化图像转GCode的斜向扫描实现 什么是斜向扫描斜向扫描代码示例 基于二值化图像转GCode的斜向扫描实现 什么是斜向扫描 在激光雕刻中&#xff0c;斜向扫描&#xff08;Diagonal Scanning&#xff09;是一种雕刻技术&#xff0c;其中激光头沿着对角线方向来回移动&…

C++面试:表结构设计规范

目录 表结构设计规范 示例 第一个 第二个 1. 合理选择数据类型 2. 使用主键 3. 避免使用NULL 4. 规范命名 5. 规范化 6. 使用索引优化查询 7. 考虑关系完整性 8. 避免过宽的表 9. 预留扩展性 10. 安全性考虑 表结构设计是数据库设计的重要组成部分&#xff0c;它…

编译opencv4.6问题汇总,第三方软件包见我发的资源

win10系统 python3.8.2&#xff0c;cmake-3.15.5-win64-x64&#xff0c;opencv4.6 编译方式见&#xff1a;OpenCV的编译 - 知乎 本文主要总结问题。赠人玫瑰手留余香。 问题1 Problem with installing OpenCV using Visual Studio and CMake (error code: MSB3073) 解决方法…

c# textbox 提示文字

1. 定义提示文字内容 private readonly string RemarkText "最多输入100字"; // 提示文字 2. 添加textbox 焦点事件&#xff0c; 初始化textbox提示文字和字体颜色 public UserControl(){InitializeComponent();tb_Remark.Text RemarkText;tb_Remark.ForeColor…

R语言基础学习-01 (此语言用途小众 用于数学 生物领域 基因分析)

R 语言特点 R 语言环境软件属于 GNU 开源软件&#xff0c;兼容性好、使用免费语法十分有利于复杂的数学运算数据类型丰富&#xff0c;包括向量、矩阵、因子、数据集等常用数据结构代码风格好&#xff0c;可读性强 简单 虽然 R 主要用于统计分析或者开发统计相关的软件&#x…

微信小程序(二十六)列表渲染基础核心

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.列表渲染基础写法 2.外部索引和自身索引 源码&#xff1a; index.wxml <view class"students"><view class"item"><text>序号</text><text>姓名</text…

JUC并发编程

Java 并发编程&#xff08;Java Concurrency&#xff09;是指在 Java 程序中同时进行多个任务的一种编程方式。Java 提供了一套丰富的并发编程工具&#xff0c;其中包括 Java 并发包&#xff08;Java Concurrency Utilities&#xff0c;简称 JUC&#xff09;&#xff0c;用于简…

Unity2D_单向平台

类似空洞骑士 马里奥等各种2D游戏&#xff0c;其中都存在单向平台。 单向平台&#xff1a;角色可以从下穿过平台停在平台上&#xff0c;也可以从平台上按下或往下跳穿过平台 这里用Unity实现角色能跳上平台&#xff0c;也能按’下’穿过平台 平台需要使用Rigidbody2D Collid…

jQuery html的使用

jquery中的html方法可以获取和设置标签的html内容 var $div $("div")// 获取标签div的html内容alert($div.html())console.log($div.html()) .html: 设置标签的html内容&#xff0c;之前的内容会清除&#xff08;只会显示 CSDN&#xff09; // 设置标签的html内容&…

字符串中的单词反转【leetcode】

本题选自leetcode图解算法数据结构一书 你在与一位习惯从右往左阅读的朋友发消息&#xff0c;他发出的文字顺序都与正常相反但单词内容正确&#xff0c;为了和他顺利交流你决定写一个转换程序&#xff0c;把他所发的消息 message 转换为正常语序。 注意&#xff1a;输入字符串…

java学习笔记:java所有关键字汇总、解析及应用

文章目录 一、java的所有关键字汇总、解析及应用1. abstract2. assert3. boolean4. break5. byte6. case7. catch8. char9. class10. const11. continue12. default13. do14. double15. else16. enum17. extends18. final19. finally20. float21. for22. goto23. if24. impleme…

走迷宫-bfs

package Test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main {static int N 110,hh 0,tt -1,n,m;static int[][] g new int[N][N]; //用来存储迷宫static int[][] d new int[N][N]; //用来存储d[i…

【C/Python】Gtk部件ListStore的使用

一、C语言 在GTK中&#xff0c;Gtk.ListStore是一个实现了Gtk.TreeModel接口的存储模型&#xff0c;用于在如Gtk.TreeView这样的控件中存储数据。以下是一个简单的使用Gtk.ListStore的C语言示例&#xff0c;该示例创建了一个列表&#xff0c;并在图形界面中显示&#xff1a; …

EasyExcel实现Excel文件导入导出

1 EasyExcel简介 EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址: https://github.com/alibaba/easyexcel 官方文档: https://www.yuque.com/easyexcel/doc/easyexcel Excel解析流程图: EasyExcel读取…

TensorFlow2实战-系列教程11:RNN文本分类3

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 6、构建训练数据 所有的输入样本必须都是相同shape&#xff08;文本长度&#xff0c;…

视网膜长尾数据

视网膜长尾数据 问题&#xff1a;视网膜疾病分类&#xff0c;解法&#xff1a;深度学习模型问题&#xff1a;数据复杂性处理&#xff0c;解法&#xff1a;多任务框架&#xff08;同时处理多种疾病&#xff09;和少量样本学习&#xff08;提高对罕见疾病的识别&#xff09;问题&…

记录解决报错--vue前后端分离,接口401(Unauthorized)

1.场景 前端访问不了后端接口。报错401。 2.解决步骤 ①在页面console.log(111)查看走到代码的位置没有。&#xff08;走到了&#xff0c;没问题&#xff09; ②查看vue.config.js配置。这段配置就是vue访问api的url。&#xff08;没问题&#xff09; devServer: {port: 80…

【Delphi】IDE 工具栏错乱恢复

由于经常会在4K和2K显示器上切换Delphi开发环境(IDE)&#xff0c;导致IDE工具栏错乱&#xff0c;咋样设置都无法恢复&#xff0c;后来看到红鱼儿的博客&#xff0c;说是通过操作注册表的方法&#xff0c;能解决&#xff0c;试了一下&#xff0c;果真好用&#xff0c;非常感谢分…