opensips开启lua支持

opensips,lua · 浏览次数 : 0

小编点评

## 1. 安装lua模块依赖的开发库 ```bash yum install lua-devel.x86_64 libmemcached-devel.x86_642 ``` **注意:** * `lua-devel` 包含所有 `lua` 和 `memcached` 库的开发包。 * `libmemcached-devel` 包含 `memcached` 库的开发包。 ## 2. 模块参数说明 **`luafilename`** 参数:指定 lua脚本文件的路径。 **其他参数:** * `xlog` 参数控制日志级别,可选值包括: * `ALERTCRITERRWARNNOTICEINFODBG`:默认值,显示所有异常、警告和信息日志。 * `INFO` * `DEBUG` ## 3. 函数说明 **`lua_exec`** 函数用于执行 lua 函数。 **`getMethod`** 函数获取sip 消息的类型。 **`getType`** 函数获取sip 消息的类型。 **`getURI_User`** 函数获取dst uri里面的值。 **`getHeader`** 函数获取sip头,示例如下:`sip.Content-Type: "text/plain"` **`moduleFunc`** 函数调用其他模块的函数。 ## 4. 使用示例 **`op-test1.lua`** 模块示例: ```lua function luaTest1(msg) xlog("this is a lua test message") return 1 end ``` **`op-test1.cfg`** 配置文件示例: ```lua modparam("lua", "luafilename", "/usr/local/etc/opensips/op-test1.lua") ``` **运行代码:** ```bash moduleLoadmodule "lua.so" moduleFunc(msg, 'sl_send_reply', "483", "Too Many Hops") ``` **运行效果:** ``` this is a lua test message luaTest1 return true ``` **完整代码:** ```lua function luaTest1(msg) xlog("this is a lua test message") return 1 end function luaTest2(msg) xlog("Type : " .. getType(msg) .. " ") xlog("msg method : " .. getMethod(msg) .. " ") xlog("URI_User: " .. getURI_User(msg) .. " ") xlog("sip.Content-Type: " .. getHeader(msg, "Content-Type") .. " ") moduleFunc(msg, 'sl_send_reply', "483", "Too Many Hops") return 1 end # 配置 lua 模块 moduleLoadmodule "lua.so" moduleFunc(msg, 'sl_send_reply', "483", "Too Many Hops") ```

正文

操作系统 :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

运行效果如下:

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

与opensips开启lua支持相似的内容: