我设置了OpenSips 2.3代理服务器,所以任何调用都来自服务器,我的脚本从数据库中获取sip URI,并将调用转发给该uri。当我获得价值时,我使用AVP获取价值并将其保存在$ avp(didnumber)中,如果我使用重写手动指定uri它正在工作,但是当我从DB中获取此值而不是分配它时,它不起作用rewriteuri()方法。
$ru = "sip:"+$avp(didnumber)
如果我写
rewriteuri("[$ru]")
它会抛出以下错误
ERROR:core:parse_sip_msg_uri: bad uri <[$ru>
ERROR:tm:new_t: uri invalid
ERROR:tm:t_newtran: new_t failed
我认为这个方法不接受正常变量,所以我添加了引号使其成为字符串变量,现在它在日志中显示正常但似乎我必须使用AVP或转换转换变量,我尝试了很多语法但仍然无法做到。请建议。
答案 0 :(得分:0)
rewrite_uri()
已弃用,仅支持使用$ru
。您的R-URI已被此语句完全重写:
$ru = "sip:" + $avp(didnumber);
但请注意,上述内容不正确,因为您没有提供&#34; hostport&#34;根据SIP RFC 3261,它是uri的一部分:
SIP-URI = "sip:" [ userinfo ] hostport
uri-parameters [ headers ]
解析器可能会报告错误。有两个修复:
要么只重写R-URI&#34; userinfo&#34;部分,像这样:
$rU = $avp(didnumber);
提供目标主机名:
$ru = "sip:" + $avp(didnumber) + "@" + $var(destination);
从此处开始,您可以t_relay()
使用新的R-URI。
编辑: OpenSIPS URI解析器实际上会容忍诸如&#34; sip:44776772882&#34;之类的URI,但它会将DID解释为主机名,因此错误可能会开始出现之后,如果脚本编写者试图将消息转发给无效的&#34; 44776772882&#34;主机名。