先生,
我正在尝试在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});
}
答案 0 :(得分:1)
$var
变量是局部过程的,这意味着即使您愿意也不能与其他SIP工作人员共享它们!实际上,它们是如此优化,以至于它们的起始值通常与上一个SIP消息处理过程中留下的相同过程相同(提示:您可以通过使用children = 1
运行opensips并进行两次调用来证明这一点)。 / p>
另一方面,诸如$avp
之类的变量在进程之间共享,但不必以“危险”的方式来担心两个并行的INVITE重传处理,每个重写都会覆盖另一个{{1 }},等等。这是在后台进行的。 “共享”仅表示,例如,在200 OK答复中,通过与中继初始INVITE的答复不同的处理,您仍然可以读取和写入设置的同一$avp
在处理请求期间。
最后,您的代码似乎正确,但是可以大大简化:
$avp