OpenSIPS 脚本中,路由块可以调用的函数分为两种类型:一种是由OpenSIPS core提供的;另一种是由外围模块提供的。
OpenSIPS core实现的函数通常简约而不简单,其原型是非常灵活,它们的参数数量不固定(不限制参数数量),任何路由块都能调用,它们接受的参数类型也是可变的。保持这种灵活性是为了保证core函数不受内核与模块之间的接口限制限制。
模块提供的函数,原型定义比较严格,它们最多只能有六个参数,只能接受string类型的参数,即使参数本质上是数字,也必须以string形式传递。比如:
sl_send_reply("404","Not Found");
模块函数可以限定其使用范围,只允许某些特定类型的路由调用。具体的限定,请参考对应的模块文档。如果在受限范围之外调用函数,那么启动时的检查会返回错误。
所有OpenSIPS 函数都会返回一个int值,说明执行结果。后续脚本可以通过$rc变量捕获函数返回值,并实现相应的处理逻辑。
注意:后续的函数调用会覆盖$rc的值,即$rc只反应最近一次函数调用的返回结果。返回值为正整数表示true;负整数表示false;返回零则直接退出脚本的执行。所以,如非必要,永远不要返回零。
参数的含义是什么,返回码应该如何解释,因功能而异; 具体请查阅说明文档。
最后,看一段简单的实例代码
lookup("location");
#here the $rc holds the return code of the lookup$var(n) = $rc;
xlog("The return code of lookup() is $var(n)\n");
#here the $rc holds the return code of the xlog function
switch ( $var(n) ) {
case -1:
# no contacts found
send_reply("404","Not Found");
break;
case -2:
# contacts found but method not supported
send_reply("405","Method not supported");
break;
case -3:
# some error occurred
send_reply("500","Server error");
break;
default:
xlog("registration found\n");
}