专注于VoIP,Opensips,Kamailio等技术,QQ群:QQ群:293697898
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 值,因为这将终止整个脚本。子路由类似于任何编程语言中的函数/过程。请参阅路由指令的说明。
OpenSIPS 脚本语言支持以下数据类型:
基本
整数(32 位,有符号)。
最大值:+2,147,483,647 == 2 ^ 31 - 1
最小值:-2,147,483,648 == - 2 ^ 31
字符串(大小不限)
请注意,某些使用字符串的函数可能具有内部缓冲区,这些缓冲区限制了字符串的最大大小(例如,xlog() 函数的输出缓冲区可通过xlog_buf_size)
浮点型(打包为字符串),通过 Mathops 模块
复杂
通过$avp变量**列出
通过$json和$xml变量进行映射
所有 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);