我设置了OpenSips 2.3代理服务器,因此任何调用都会出现在服务器上,我的脚本从DB获取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或转换来转换变量,我尝试了很多语法,但仍然做不到。请建议一下。
发布于 2018-04-02 21:51:51
有人反对rewrite_uri()
只使用$ru
。您的R已经被以下语句完全重写:
$ru = "sip:" + $avp(didnumber);
但是,请注意,上面的内容是不正确的,因为根据SIP RFC 3261,您没有向uri提供“主机端口”部分:
SIP-URI = "sip:" [ userinfo ] hostport
uri-parameters [ headers ]
解析器可能会报告一个错误。对此有两个解决方案:
接下来,您可以使用新的R进行t_relay()
操作。
编辑: URI解析器实际上将容忍一个URI,如"sip:44776772882",但是它会将DID解释为主机名,因此如果脚本编写者试图将消息转发给无效的"44776772882“主机名,那么错误可能会在稍后出现。
https://stackoverflow.com/questions/49622113
复制相似问题