opensips開啓lua支持

操作系統 :CentOS 7.6_x64

opensips版本 :2.4.9

lua版本:5.1

今天整理下CentOS7環境下opensips2.4.9的lua模塊筆記及使用示例,並提供運行效果截圖。我將從以下幾方面進行展開:
  • 模塊安裝說明

  • 模塊參數說明

  • 模塊函數說明

  • 模塊使用示例

lua模塊官方文檔:

https://opensips.org/docs/modules/2.4.x/lua.html

 

一、安裝lua模塊

1)安裝lua模塊依賴的開發庫

yum install lua-devel.x86_64 libmemcached-devel.x86_64

2)進入opensips源碼目錄

cd opensips-2.4.9

3)編譯時選中 lua 模塊

4)編譯及安裝opensips

make && make install

CentOS7環境下源碼安裝opensips,可參考如下文章:

CentOS7環境源碼安裝opensips2.4.9

二、模塊參數說明

這裏列舉下常用參數,完整內容參考官方文檔。模塊文件:lua.so模塊參數如下:

  • luafilename

lua腳本文件的路徑,該文件包含需要調用的lua函數。
該參數只能設置一次,設置多次的話後面的會把前面的替換掉,只加載最後一個lua文件。

示例如下:

modparam("lua", "luafilename", "/usr/local/etc/opensips/op-test1.lua")

三、函數說明

這裏列下常用的函數,其它函數參考官方文檔。

1、模塊函數(op配置文件中使用)

  • lua_exec
    用於執行lua函數。

2、lua腳本可用函數

這裏列下常用的函數,其它函數參考官方文檔。

  • xlog

輸出日誌,級別(可選)如下:
ALERT
CRIT
ERR
WARN
NOTICE
INFO
DBG
示例如下:

xlog("luaTest1 return true\n");
  • getMethod

獲取sip msg的方法,比如INVITE等。
示例如下:

xlog("msg method : " ..  getMethod(msg) .. "\n")
  • getType

獲取sip msg的類型,返回 "SIP_REQUEST" 或 "SIP_REPLY"
示例代碼:

xlog("Type : " ..  getType(msg) .. "\n")
  • getURI_User

獲取dst uri裏面的值
示例代碼:

xlog("URI_User: " ..  getURI_User(msg) .. "\n")
  • getHeader

獲取sip頭,示例如下:

xlog("sip.Content-Type: " ..  getHeader(msg,"Content-Type") .. "\n")
  • moduleFunc

調用opensips其它模塊的函數。
比如:

moduleFunc(msg,'sl_send_reply',"483","Too Many Hops")

四、使用示例

這裏演示下lua模塊的加載,及使用該模塊進行簡單測試。

opensips機器:192.168.137.33
Freeswitch機器:192.168.137.32

1、模塊加載及日誌打印

使用 xlog 函數打印日誌。

示例代碼(op-test1.lua):

function luaTest1(msg)
    xlog("this is a lua test message\n")
    return 1
end

其中,msg是默認參數。

opensips.cfg配置如下:

#### lua module
loadmodule "lua.so"
modparam("lua", "luafilename", "/usr/local/etc/opensips/op-test1.lua")

####### Routing Logic ########

# main request routing logic

route{

    if (lua_exec("luaTest1")) {
        xlog("luaTest1 return true\n");
    }

重啓opensips :opensipsctl restart

呼叫測試:

originate {}sofia/external/111@192.168.137.33:5060 &echo

運行效果如下:

2、調用msg函數

lua腳本示例如下:

function luaTest2(msg)
    xlog("Type : " ..  getType(msg) .. "\n")
    xlog("msg method : " ..  getMethod(msg) .. "\n")
    xlog("URI_User: " ..  getURI_User(msg) .. "\n")
    xlog("sip.Content-Type: " ..  getHeader(msg,"Content-Type") .. "\n")
    moduleFunc(msg,'sl_send_reply',"483","Too Many Hops")
    return 1
end

opensips.cfg配置如下:

重啓opensips :opensipsctl restart

呼叫測試:

originate {}sofia/external/111@192.168.137.33:5060 &echo

運行效果如下:

 好,就這麼多了,別忘了點贊哈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章