如何在URI

时间:2018-04-03 04:09:03

标签: voip opensips

我设置了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或转换转换变量,我尝试了很多语法但仍然无法做到。请建议。

1 个答案:

答案 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;主机名。