脚本变量不应该用于调用处理吗?

时间:2019-02-12 06:38:36

标签: opensips

先生,

我正在尝试在opensips 2.4中创建有状态代理。

我只是想要一个变量来保存接收到的消息信息并对其进行处理。

所以我在opensips manual中检查了“核心变量”。它说,脚本变量是明智的。所以我不应该使用$ var(Ruri)= $ ru这样的脚本值来保存标头值?它将被其他调用覆盖??

$var(userName)=$rU;
$var(removePlus) = '+';
# Search the string starting at 0 index
if($(var(userName){s.index, $var(removePlus)})==0){ 
  $rU=$(var(userName){s.substr,1,0});
}

1 个答案:

答案 0 :(得分:1)

$var变量是局部过程的,这意味着即使您愿意也不能与其他SIP工作人员共享它们!实际上,它们是如此优化,以至于它们的起始值通常与上一个SIP消息处理过程中留下的相同过程相同(提示:您可以通过使用children = 1运行opensips并进行两次调用来证明这一点)。 / p>

另一方面,诸如$avp之类的变量在进程之间共享,但不必以“危险”的方式来担心两个并行的INVITE重传处理,每个重写都会覆盖另一个{{1 }},等等。这是在后台进行的。 “共享”仅表示,例如,在200 OK答复中,通过与中继初始INVITE的答复不同的处理,您仍然可以读取和写入设置的同一$avp在处理请求期间。

最后,您的代码似乎正确,但是可以大大简化:

$avp