opensips开启python支持
python作为脚本语言,使用起来很方便,查了下opensips的文档,支持使用python脚本写逻辑代码。今天整理下CentOS7环境下opensips2.4.9的python模块笔记及使用示例,并提供运行效果视频和配套文件下载。
我将从以下几方面进行展开:
模块安装说明
模块参数说明
模块函数说明
模块使用示例
python模块官方文档:
https://opensips.org/docs/modules/2.4.x/python.html

一、模块安装说明
1)安装python开发库
yum install python-devel.x86_64
2)进入opensips源码目录
cd opensips-2.4.9
3)选中 python 模块
make menuconfig

4)编译及安装opensips
make && make install

CentOS7环境下源码安装opensips,可参考如下文章:
二、模块参数说明
模块文件: python.so
模块参数如下:
script_name
用于设置python脚本的路径。mod_init_function
用于设置python脚本的初始化函数,默认是mod_initchild_init_method
用于设置python脚本的子进程(子类)的初始化函数,默认是child_init
模块加载及配置数据库
文件:opensips.cfg
配置示例:
#### python module
loadmodule "python.so"
modparam("python", "script_name", "/usr/local/etc/opensips/op-test1.py")
#modparam("python", "mod_init_function", "module_initializer")
#modparam("python", "child_init_method", "child_initializer")
三、函数说明
1、cfg文件调用函数
函数: python_exec
python_exec(method_name [, extra_args])
该函数调用python脚本里面的方法。
2、python脚本内部调用函数
2.1 LM_ERR函数
在python里面,opensips作为独立的模块,导出了LM_ERR函数,定义如下(python_iface.c):

该函数用于打印日志,示例如下:
LM_ERR('test msg from python')
2.2 sip msg相关属性及方法
属性定义如下(python_msgobj.c):

方法定义如下(python_msgobj.c):

Type
msg的类型,SIP_REQUEST 或 SIP_REPLYMethod
msg的方法,比如:"INVITE"Status
msg的状态,只适用于replyRURI
msg的R-URI,只适用于requestsrc_address
msg的源地址信息dst_address
msg的目的地址信息copy()
复制当前SIP消息rewrite_ruri(uri)
修改msg的request URI,仅适用于requestset_dst_uri(uri)
修改msg的destination URI ,仅适用于requestgetHeader(hdr)
获取SIP头的具体内容call_function(funName,...)
调用其它模块的函数
四、使用示例
这里演示下python模块的加载,及使用该模块进行简单测试。
1、打印日志
使用LM_ERR函数进行日志打印。
示例代码(op-test1.py):
from OpenSIPS import LM_ERR class ObjA():
def child_init(self,rank):
return 0 def pytest1(self,var1):
LM_ERR("test msg from python script")
return 1 def mod_init():
return ObjA()
opensips.cfg配置如下:
#### python module
loadmodule "python.so"
modparam("python", "script_name", "/usr/local/etc/opensips/op-test1.py")
#modparam("python", "mod_init_function", "module_initializer")
#modparam("python", "child_init_method", "child_initializer") ####### Routing Logic ######## # main request routing logic route{
if(python_exec("pytest1")) {
xlog("python test1 return true\n");
}
exit;
运行效果如下:

运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024042301 获取。
2、调用其它模块函数
示例代码及配置可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240423 获取。
运行效果如下:

运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024042302 获取。
3、实现呼叫路由
这里演示下python调用drouting模块函数实现话务路由的功能。
机器列表:
freeswitchA :192.168.137.31:5080
opensips :192.168.137.33:5060
freeswitchB :192.168.137.32:5080
测试目标:将freeeswitchA呼叫opensips的通话路由到freeswitchB机器。
拨号方案等信息参考如下文章:
示例代码及配置可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240423 获取。
运行效果如下:

抓包效果如下:

运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024042303 获取。
五、资源下载
本文涉及资源,可以从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240423 获取。

好,就这么多了,别忘了点赞哈!
opensips开启python支持的更多相关文章
- 开启VIM的Python支持
开启VIM的Python支持 2015年01月03日 02:57:58 forlong401 阅读数:16294更多 个人分类: VIPython http://www.tuicool.com/a ...
- datax开启hana支持以及dolphinscheduler开启datax任务
datax开启hana支持以及dolphinscheduler开启datax任务 前面(@,@) 前段时间因为要做异构数据导入导出,所以搜了下,发现这类工具收费的居多,使用起来未必趁手~ 于是我找了下 ...
- Linux下安装OpenCV+Python支持
以下说明在Linux下Python和OpenCV结合安装的过程,Python要使用OpenCV模块,则必须导入OpenCV提供的包,所以要提供Python支持,首先在安装OpenCV前安装必要的组件, ...
- Tomcat7开启CGI支持的方法
tomcat默认没有开启cgi支持,因此有了tomat开启cgi的探索.因为原本对tomcat没多了解,所以中间或多或少走了点弯路.还好最终配置成功了,现在jy也用上这个方法了. 该方法在apa ...
- 【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持
Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.will ...
- 多进程IPC与Python支持
多进程IPC与Python支持 linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因 ...
- python面试题之Python支持什么数据类型?
所属网站分类: 面试经典 > python 作者:外星人入侵 链接:http://www.pythonheidong.com/blog/article/67/ 来源:python黑洞网,专注py ...
- LD_PRELOAD的妙用,让python支持自己编译的Sqlite
LD_PRELOAD的妙用,让python支持自己编译的Sqlite LD_PRELOAD=/usr/local/sqlite/lib/libsqlite3.so.0 python3 -c " ...
- Java SpringBoot注解方式开启异步支持
package task.demo.controller; import org.springframework.beans.factory.annotation.Autowired; import ...
- BloomFilter&python支持
BloomFilter&python支持 BloomFilter 布隆过滤器是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时, ...
随机推荐
- FIR滤波器的设计和实现
FIR的作用和价值 FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时 ...
- Typora自定义主题详解--打造自己的专属样式
你真的会使用Typora吗? 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「主题」, 获取大师使用的typora主题: http://www.javaman.cn/ ...
- CSS(三大特性、盒子模型的组成(boder、padding、margin)、ps基本操作)
一.css三大特性 1.层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式.层叠性主要解决样式冲突的问题 层叠性原则: 样式冲突,遵循的原则是就近原则,哪个样式离结构近, ...
- 记录--10个超级实用的Set、Map使用技巧
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Set是一种类似于数组的数据结构,但是它的值是唯一的,即Set中的每个值只会出现一次.Set对象的实例可以用于存储任何类型的唯一值,从而使 ...
- 一个基于.NET Core构建的简单、跨平台、模块化的商城系统
前言 今天大姚给大家分享一个基于.NET Core构建的简单.跨平台.模块化.完全开源免费(MIT License)的商城系统:Module Shop. 商城后台管理端功能 商品:分类.品牌.单位.选 ...
- Kingbase Create Type 语句使用
Kingbase create type类型创建语句 说明: KingbaseES 数据库中,可以通过CREATE TYPE语句定义一种新的数据类型. 有八种形式的CREATE TYPE.它们分别创建 ...
- 谈谈MyBatis持久层框架
谈谈 MyBatis 源自官方文档:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作. ...
- Unity 2022.3.20f1新功能,异步实例化预制体Object.InstantiateAsync
今天查看Unity 2022.3.20f1更新日志,发现新增了个异步实例化的功能,这个功能解决了Unity历史上实例化预制体卡顿的痛点,简直不要太爽. 具体的API文档请点击跳转. 做了个简单的实例化 ...
- Debug模式调试技巧
Debug模式调试技巧 断点管理窗口 菜单栏方式 Run -> view breakpoints Actions方式 双击shift调出Actions窗口,输入view breakpoint ...
- 程序员必备上传服务器Xftp及连接服务器工具Xshell
1.下面截图为破解工具,点击执行就可以用了 压缩包放云盘了,私信我即可 (不知道咋上传,有点尴尬Q.Q)