操作系统 :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_642)进入opensips源码目录
cd opensips-2.4.93)编译时选中 lua 模块

4)编译及安装opensips
make && make install
CentOS7环境下源码安装opensips,可参考如下文章:
二、模块参数说明
这里列举下常用参数,完整内容参考官方文档。模块文件: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
endopensips.cfg配置如下:

重启opensips :opensipsctl restart
呼叫测试:
originate {}sofia/external/111@192.168.137.33:5060 &echo运行效果如下:

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