当前位置: 首页 > 工具软件 > OpenSIPS > 使用案例 >

openSIPS脚本里的函数

吕灿
2023-12-01

        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");
}

 类似资料: