本文转载自我的公众号Code2Fun

目录

前言

1、lumps system简介

2、lumps system函数接口

2.1 创建指定被操作lumps的函数

2.2 创建用于新插入或替换lumps的函数

3、修改Contact头域与lump操作图解

3.1 使用lumps实现FixContact函数

3.2 图解FixContact函数的lumps操作过程

小结


前言

SIP消息交互的过程中,经常需要对sip消息进行修改,如修改/添加SIP头域,修改SDP内容等,在使用过程中多少也会遇到需要开发来修改信令实现功能的情况。在OpenSIPS中对SIP消息执行更改的标准机制是使用所谓的块系统(lumps system)。

1、lumps system简介

OpenSIPS的lumps system效率很高,这也是opensips性能高效的一个原因之一。这些要修改的块(lumps)存储在一个列表中,并且只在OpenSIPS脚本执行完毕之后并且在SIP消息被转发之前应用到消息中(重新组包)。因此,对SIP消息所做的更改在进一步检查时不会立即反映在SIP消息中。

lumps system虽然设计巧妙,但是使用起来不容易理解,我也是用过几次之后,专门翻了下代码实现来研究,才慢慢理解lumps操作的。

Lumps分为两种,SIP消息块(SIP Message Lumps)和SIP响应块(SIP Reply Lumps)。这里主要介绍常会用到的SIP消息块操作。将“lumps”直接翻译为“块”对于后文的叙述而言容易造成意义不清,后面的叙述将都使用lumps来说明。

2、lumps system函数接口

SIP消息块这种类型的lumps用于操作当前SIP消息。从操作的角度来看,SIP消息块也分为两类:删除lumps(Delete Lumps)和添加lumps(Add Lumps)。但从函数接口角度来分又可以分为两类:创建指定被操作lumps的函数和创建插入或替换lumps的函数。

下面从函数接口角度对几个常用的具有代表性的lumps操作函数进行分类介绍。

2.1 创建指定被操作lumps的函数

del_lump函数接口:

/*
Parameters :msg - the SIP message the lump will affectoffset - the offset in the SIP message at which to start deletinglen - the number of characters to delete from the SIP messagetype - indication on which header the current lump affects ( can be 0 )
Returns :the created lump structure for deleting part of the SIP message.       Can be further used to chain together different types of lumps in       the message attached list of lumps. NULL is returned in case of internal error.
*/struct lump* del_lump(struct sip_msg* msg, unsigned int offset, unsigned int len, enum _hdr_types_t type);

del_lump函数用于指定在当前sip_msg buffer中要删除的消息块的内存位置和删除长度。del_lump函数创建一个lump对象,指定删除的lump在sip_msg buffer中的位移(offset)以及删除长度(len)、lump类型LUMP_DEL(函数内部指定,不是参数type指定,下同)等,并将lump对象插入到sip_msg中的lump链表中,最后返回该lump对象的指针。

.....

全文请进入公众号查看

OpenSIPS实战(一):OpenSIPS使用简介
OpenSIPS实战(二):日志文件配置

OpenSIPS实战(三):路由脚本介绍与实战

OpenSIPS实战(四):使用自定义账号系统鉴权
OpenSIPS实战(五):负载均衡
OpenSIPS实战(六):在脚本中添加自定义变量
OpenSIPS实战(七):模块开发

OpenSIPS实战(八):修改sip消息-使用lumps system

Code Too Funny

长按订阅Code2Fun,获取更多内容

OpenSIPS实战(八):修改sip消息-使用lumps system相关推荐

  1. OpenSIPS 3.1 开发手册(二)--SIP消息及Opensips配置文件

    https://www.opensips.org/Documentation/Development-Manual 目录 5.  改变SIP 消息 5.1  SIP 消息Lump 5.2  SIP 应 ...

  2. 【网络通信 -- SIP 电话】项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试

    [网络通信 -- SIP 电话]项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试 [1]SIP 服务器 OPENSIPS 搭建 1.1 安装环 ...

  3. JMS学习八(ActiveMQ消息持久化)

    JMS学习八(ActiveMQ消息持久化) ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,还有一种内存存储的方式,由于内存不属于持久化范畴,而且如果使用内存队列,可 ...

  4. SIP消息头域的说明

    当前位置: 主页>流媒体开发>规范及协议> SIP消息头域的说明 编辑:落鹤生 时间:2011-03-11 09:16 点击:378次 为描述消息基本属性的通用头域,可用于请求消息或 ...

  5. CE实战:修改植物大战僵尸中阳光数值

    CE实战:修改植物大战僵尸中阳光数值 游戏版本:植物大战僵尸中文版( PlantsVsZombies ) Cheat Engine 版本:Cheat Engine 7.0 一.打开游戏 二.打开CE并 ...

  6. SIP消息格式详解(基于XML消息体)

    SIP消息分为请求和响应,格式由一个请求行/状态行.几个标题头.一个空行和一个消息体(可选)组成,之间使用回车换行符表示终结,即使消息中未包含消息体,空行也不能省略: 1.请求行/状态行 <1& ...

  7. R语言ggplot2可视化轴标签重叠问题解决实战:修改轴标签字体、轴标签垂直于坐标轴(或者旋转特定角度)

    R语言ggplot2可视化轴标签重叠问题解决实战:修改轴标签字体.轴标签垂直于坐标轴(或者旋转特定角度) 目录

  8. RabbitMQ-从基础到实战(3)— 消息的交换(上)

    转载请注明出处 0.目录 RabbitMQ-从基础到实战(1)- Hello RabbitMQ RabbitMQ-从基础到实战(2)- 防止消息丢失 RabbitMQ-从基础到实战(4)- 消息的交换 ...

  9. sip消息概念(一)

    SIP 也是类似 HTTP 的一个协议集合,在网上搜索了一下相关的信息,摘录如下: SIP消息的第一行包含消息的类型和所使用的SIP版本(2.0).在请求中,这一行还包含一个叫做SIP URI的地址. ...

最新文章

  1. Zend Framework Mail通过网易免费邮箱发送邮件
  2. 发布一个定制的webpart:R***eader
  3. 计算机视觉 | 计算机视觉相关算法及工具
  4. 【Demo 0085】导出EXE文件资源
  5. 四年级上册数学计算机笔记,四年级数学下册笔记整理
  6. thinkphp 模板 php函数调用,thinkphp模版调用函数方法
  7. input全选和取消全选
  8. 861. Score After Flipping Matrix
  9. BZOJ1018 堵塞的交通(线段树)
  10. 用计算机处理表格信息教案,表格信息的加工与表达教案
  11. java判断是否是英文_Java 判断输入是否为英文字符
  12. An unexpected connection driver error occured错误(亲测有效)
  13. 计算机函数名功能,修改计算机名的 API 函数 SetComputerName
  14. 在houdini中旋转某条曲线上多个点的法线方法(vop方法)
  15. 泰克示波器CVI开发|泰克示波器波形抓取数据控制软件NS-Scope
  16. 华为鸿蒙系统nova5i,华为nova 5i评测:极点全面屏+后置2400万AI四摄 让美更进一步...
  17. win10实现debug
  18. tomcat不能自动解压war包
  19. Thinkphp 5.0 购物网站
  20. interface 是什么类型?

热门文章

  1. Java中String字符串截取几种方法(substring,split)
  2. PHP isset()与empty()的区别
  3. java ftpClient 下载文件损坏问题
  4. ros中rviz不显示摄像头视频问题的解决
  5. LaTeX 数学公式和符号
  6. 介绍2款最流行的画PCB工具
  7. GA-SVM算法python实现
  8. 风向值与风向描述定义
  9. input type=file 禁止让用户手动输入
  10. 如何选择一款好相机?