操作系统 :CentOS 7.6_x64  
opensips版本: 2.4.9  
python版本:2.7.5

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 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 获取。

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

opensips开启python支持的更多相关文章

  1. 开启VIM的Python支持

    开启VIM的Python支持 2015年01月03日 02:57:58 forlong401 阅读数:16294更多 个人分类: VIPython   http://www.tuicool.com/a ...

  2. datax开启hana支持以及dolphinscheduler开启datax任务

    datax开启hana支持以及dolphinscheduler开启datax任务 前面(@,@) 前段时间因为要做异构数据导入导出,所以搜了下,发现这类工具收费的居多,使用起来未必趁手~ 于是我找了下 ...

  3. Linux下安装OpenCV+Python支持

    以下说明在Linux下Python和OpenCV结合安装的过程,Python要使用OpenCV模块,则必须导入OpenCV提供的包,所以要提供Python支持,首先在安装OpenCV前安装必要的组件, ...

  4. Tomcat7开启CGI支持的方法

    tomcat默认没有开启cgi支持,因此有了tomat开启cgi的探索.因为原本对tomcat没多了解,所以中间或多或少走了点弯路.还好最终配置成功了,现在jy也用上这个方法了.    该方法在apa ...

  5. 【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持

    Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.will ...

  6. 多进程IPC与Python支持

    多进程IPC与Python支持 linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因 ...

  7. python面试题之Python支持什么数据类型?

    所属网站分类: 面试经典 > python 作者:外星人入侵 链接:http://www.pythonheidong.com/blog/article/67/ 来源:python黑洞网,专注py ...

  8. LD_PRELOAD的妙用,让python支持自己编译的Sqlite

    LD_PRELOAD的妙用,让python支持自己编译的Sqlite LD_PRELOAD=/usr/local/sqlite/lib/libsqlite3.so.0 python3 -c " ...

  9. Java SpringBoot注解方式开启异步支持

    package task.demo.controller; import org.springframework.beans.factory.annotation.Autowired; import ...

  10. BloomFilter&python支持

    BloomFilter&python支持 BloomFilter 布隆过滤器是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时, ...

随机推荐

  1. SqlServer复制和订阅(实现主从同步)

    SqlServer复制和订阅 注意: 1.登录必须是服务器名称不能是ip 2.订阅服务器不需要提前创建数据库 复制 1.展开要发布的数据库节点,找到复制下的本地发布 2.右击本地发布,选择本地发布 3 ...

  2. python tcp socket 源码分享

    服务端的源码: import socketserver class Handler_TCPServer(socketserver.BaseRequestHandler): ""&q ...

  3. git 删除本地创建的仓库常用方法

    基本方法   清除本地文件夹下的git文件,然后在重新初始化新建的git仓库 具体实施 //删除文件夹下的所有 .git 文件 find . -name ".git" | xarg ...

  4. HTML <nav> 标签

    定义和用法 标签定义导航链接的部分. 提示和注释 提示:如果文档中有"前后"按钮,则应该把它放到 元素中. 实例 <!DOCTYPE html> <html> ...

  5. day11-实现Spring底层机制-01

    实现Spring底层机制-01 主要实现:初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP 前面我们实际上已经使用代码简单实现了: Spring XML 注入 bean (S ...

  6. P2602 [ZJOI2010] 数字计数:数位DP

    https://www.luogu.com.cn/problem/P2602 // #include <iostream> // #include <iomanip> // # ...

  7. Qt HTTP网络相关GET,POST(HTTP 模拟POST 表单(multipartform)最简单和正式的方法)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  8. Spring Boot学习日记12

    学习了Thymeleaf模板引擎前端交给我们的页面,是html页面.如果是我们以前开发,我们需要把他们转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面以后,我们可以用jsp轻松实现数据 ...

  9. 面试官:volatile如何保证可见性的,具体如何实现?

    写在开头 在之前的几篇博文中,我们都提到了 volatile 关键字,这个单词中文释义为:不稳定的,易挥发的,在Java中代表变量修饰符,用来修饰会被不同线程访问和修改的变量,对于方法,代码块,方法参 ...

  10. 记录--@click和@click.native有什么区别,如何阻止第三方组件内部的冒泡

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.@click和@click.native的区别 vue @click.native 原生点击事件: 1,给vue组件绑定事件时候,必须 ...