• 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

    运行效果如下:

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

  • 相关阅读:
    【并发编程】线程间的通信
    基于gRPC编写golang简单C2远控
    1990-2022年上市公司常用控制变量数据(1300+变量)
    1.Linux端SVN的搭建及多项目权限配置
    持续提升信息安全运维保障服务能力,天玑科技助力企业快速实现数字化转型
    蚂蚁集团、浙江大学联合发布开源大模型知识抽取框架OneKE
    java计算机毕业设计学生勤工助学管理系统源程序+mysql+系统+lw文档+远程调试
    Javaweb之Vue指令案例的详细解析
    maven仓库-阿里镜像-下载问题
    GSCoolink GSV6708 HDMI4to2 CrossSwitch
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/18202208/oplua20240520