操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...
操作系統 :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,可參考如下文章:
二、模塊參數說明
模塊文件: 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實現話務路由的功能。
機器列表:
freeswitchA :192.168.137.31:5080
opensips :192.168.137.33:5060
freeswitchB :192.168.137.32:5080
測試目標:將freeeswitchA呼叫opensips的通話路由到freeswitchB機器。
撥號方案等信息參考如下文章:
示例代碼及配置可從如下渠道獲取:
關註微信公眾號(聊聊博文,文末可掃碼)後回覆 20240423 獲取。
運行效果如下:
抓包效果如下:
運行效果視頻可從如下渠道獲取:
關註微信公眾號(聊聊博文,文末可掃碼)後回覆 2024042303 獲取。
五、資源下載
本文涉及資源,可以從如下途徑獲取:
關註微信公眾號(聊聊博文,文末可掃碼)後回覆 20240423 獲取。
好,就這麼多了,別忘了點贊哈!
微信公眾號:轉載請註明出處,謝謝!