Openser中文网

专注于VoIP,Opensips,Kamailio等技术,QQ群:QQ群:293697898

一、OpenSIPS脚本语法(机翻,时间有限,机翻为主)


tags:OpenSIPS 脚本语法 创建时间:2023-10-27 10:58:40

  1. 脚本格式

OpenSIP 配置脚本有三个主要逻辑部分:

全局参数

模块部分

路由逻辑

1.1 全局参数

通常,在第一部分,您声明OpenSIPS全局参数 - 这些全局或核心参数会影响OpenSIPS核心和可能的模块。

配置网络侦听器、可用的传输协议、分叉(和进程数)、日志记录和其他全局内容由这些全局参数提供。

例:

bash disable_tcp = yes listen = udp:192.168.3.40:5060 listen = udp:192.168.3.40:5070 fork = yes children = 4 log_stderror = no

1.2 模块部分

对于 OpenSIPS 模块,要加载的模块(默认情况下不加载任何模块)是使用指令 loadmodule 指定的。模块应按名称和可选路径(指向 .so 文件)指定。如果没有提供路径(并且只是模块的名称),则将假定默认路径来定位加载模块(默认路径是 /usr/lib/opensips/modules,如果不是在编译时配置的其他路径。对于配置不同的路径,可以使用模块名称直接推送路径(以获得每个模块的控制),也可以通过 mpath 全局参数全局配置路径(对于所有模块)。

加载模块后,可以使用modparam指令设置模块的参数 - 要列出每个模块的可用参数,参数值的类型(整数或字符串)可以在模块的文档“参数”部分中找到。

例子:

bash loadmodule "modules/mi_datagram/mi_datagram.so" modparam("mi_datagram", "socket_name", "udp:127.0.0.1:4343") modparam("mi_datagram", "children_count", 3)

bash mpath="/usr/local/opensips_proxy/lib/modules" loadmodule "mi_datagram.so" modparam("mi_datagram", "socket_name", "udp:127.0.0.1:4343") modparam("mi_datagram", "children_count", 3) loadmodule "mi_fifo.so" modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")

1.3 路由逻辑

路由逻辑实际上是包含用于路由 SIP 流量的 OpenSIPS 逻辑的路由(脚本路由)的总和。与 SIP 流量相关的 OpenSIPS 行为描述是通过此路由完成的。

有不同类型的路线:

顶级路由 - 当某些事件发生时由 OpenSIP 直接触发的路由(如收到 SIP 请求、收到 SIP 回复、事务失败等)

子路由 - 从脚本中的其他路由触发/使用的路由。

路由类型部分中记录了现有的顶级路由、触发时间、处理的 SIP 消息类型、允许的 SIP 操作以及其他操作。

子路由具有名称,并且将通过其名称从脚本中的任何其他路由(top 或 sub)调用它们。子路由可以采用参数(调用时)或返回数字代码(避免返回 0 值,因为这将终止整个脚本。子路由类似于任何编程语言中的函数/过程。请参阅路由指令的说明。

  1. 数据类型

OpenSIPS 脚本语言支持以下数据类型:

基本

整数(32 位,有符号)。

最大值:+2,147,483,647 == 2 ^ 31 - 1

最小值:-2,147,483,648 == - 2 ^ 31

字符串(大小不限)

请注意,某些使用字符串的函数可能具有内部缓冲区,这些缓冲区限制了字符串的最大大小(例如,xlog() 函数的输出缓冲区可通过xlog_buf_size)

浮点型(打包为字符串),通过 Mathops 模块

复杂

通过$avp变量**列出

通过$json和$xml变量进行映射

  1. 函数调用约定

所有 OpenSIPS 核心和模块函数在内部共享相同的函数接口,因此它们受益于以下调用约定:

任何整数或字符串函数参数也可以使用“持有者”变量传递

ds_select_dst(1, 1);

...相当于:

$var(x) = 1; ds_select_dst($var(x), $var(x));

任何字符串函数参数都可以作为格式字符串传递

set_dlg_profile("caller", "var(country_code)_var(area)_$fU");

文本“$”字符可以使用“$$”转义序列包含在格式字符串中

注意:由于性能优化,在字符串参数的情况下,上述约定仍然存在一些例外,因为某些函数仍然要求某些参数是纯静态字符串(例如 save(“location”))。这种情况将在函数的文档中注明。

传递给函数的输入或输出变量不得用引号括起来:

ds_count(1, "a", $var(out_result));

整数不再需要作为双引号字符串传递:

ds_select_dst("1", "1");

ds_select_dst(1, 1);


如果在有疑问或需要沟通的地方,可以QQ:1354608370 或 加FreeSWITCH+Kamailio+Opensips QQ群: 293697898 沟通交流!