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,可参考如下文章:
CentOS7环境源码安装opensips2.4.9
二、模块参数说明
模块文件:python.so
模块参数如下:
-
script_name
用于设置python脚本的路径。 -
mod_init_function
用于设置python脚本的初始化函数,默认是mod_init -
child_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_REPLY -
Method
msg的方法,比如:”INVITE” -
Status
msg的状态,只适用于reply -
RURI
msg的R-URI,只适用于request -
src_address
msg的源地址信息 -
dst_address
msg的目的地址信息 -
copy()
复制当前SIP消息 -
rewrite_ruri(uri)
修改msg的request URI,仅适用于request -
set_dst_uri(uri)
修改msg的destination URI ,仅适用于request -
getHeader(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 truen"); } exit;
运行效果如下:
运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024042301 获取。
2、调用其它模块函数
示例代码及配置可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240423 服务器托管获取。
运行效果如下:
运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024042302 获取。
3、实现呼叫路由
这里演示下python实现话务路由的功能。
机器列表:
freeswitchA :192.168.137.31:5080
opensips :192.168.137.33:5060
freeswitchB :192.168.137.32:5080
测试目标:将freeeswitchA呼叫opensips的通话路由到freeswitchB机器。
拨号方案等信息参考如下文章:
opensips使用drouting进行路由
示例代码及配置可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240423 获取。
运行效果如下:
抓包效果如下:
运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024042303 获取。
五、资源下载
本文涉及资源,可以从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240423 获取。
好,就这么多了,别忘了点赞哈!
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
一、RabbitMQ的集群模式 主要有两种:普通集群模式和镜像队列模式。下面分别介绍这两种模式的原理: 1.普通集群模式: 在普通集群模式下,RabbitMQ的集群节点之间主要同步元数据,而不同步存储的消息数据。这意味着消息本身只存储在创建该消息队列的节点上,…