opensips开启python支持

打印 上一主题 下一主题

主题 854|帖子 854|积分 2562

操作系统 :CentOS 7.6_x64  opensips版本: 2.4.9  python版本:2.7.5python作为脚本语言,使用起来很方便,查了下opensips的文档,支持使用python脚本写逻辑代码。今天整理下CentOS7环境下opensips2.4.9的python模块笔记及使用示例,并提供运行结果视频和配套文件下载。
我将从以下几方面举行睁开:

  • 模块安装阐明
  • 模块参数阐明
  • 模块函数阐明
  • 模块使用示例
python模块官方文档:
https://opensips.org/docs/modules/2.4.x/python.html

一、模块安装阐明

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

 4)编译及安装opensips
  1. 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
设置示例:
  1. #### python module
  2. loadmodule "python.so"
  3. modparam("python", "script_name", "/usr/local/etc/opensips/op-test1.py")
  4. #modparam("python", "mod_init_function", "module_initializer")
  5. #modparam("python", "child_init_method", "child_initializer")
复制代码
三、函数阐明

1、cfg文件调用函数

函数: python_exec
  1. python_exec(method_name [, extra_args])
复制代码
该函数调用python脚本里面的方法。
2、python脚本内部调用函数

2.1 LM_ERR函数
在python里面,opensips作为独立的模块,导出了LM_ERR函数,定义如下(python_iface.c):

 该函数用于打印日志,示比方下:
  1. 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):
  1. from OpenSIPS import LM_ERR
  2. class ObjA():
  3.     def child_init(self,rank):
  4.         return 0
  5.     def pytest1(self,var1):
  6.           LM_ERR("test msg from python script")
  7.           return 1
  8. def mod_init():
  9.     return ObjA()
复制代码
opensips.cfg设置如下:
  1. #### python module
  2. loadmodule "python.so"
  3. modparam("python", "script_name", "/usr/local/etc/opensips/op-test1.py")
  4. #modparam("python", "mod_init_function", "module_initializer")
  5. #modparam("python", "child_init_method", "child_initializer")####### Routing Logic ######### main request routing logicroute{    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呆板。
拨号方案等信息参考如下文章:
opensips使用drouting举行路由
示例代码及设置可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240423 获取。
运行结果如下:

 抓包结果如下:

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

本文涉及资源,可以从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20240423 获取。

 好,就这么多了,别忘了点赞哈!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表