1

我设置了 OpenSips 2.3 代理服务器,所以任何调用都在服务器上,我的脚本从 DB 中获取 sip URI,并将调用转发到该 uri。当我得到值时,我使用 AVP 来获取值并将其保存在 $avp(didnumber) 中,如果我使用 rewrite 并手动指定 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 或转换来转换变量,我尝试了很多语法但仍然无法做到。请建议。

4

1 回答 1

0

rewrite_uri()已被弃用,取而代之的是简单地使用$ru. 您的 R-URI 已经被以下语句完全重写:

$ru = "sip:" + $avp(didnumber);

但是,请注意,上述内容不正确,因为根据 SIP RFC 3261,您没有向 uri 提供“主机端口”部分:

SIP-URI          =  "sip:" [ userinfo ] hostport
                    uri-parameters [ headers ]

解析器可能会报告错误。对此有两个修复:

  • 要么只重写 R-URI “userinfo” 部分,像这样:

    $rU = $avp(didnumber);
    
  • 提供目标主机名:

    $ru = "sip:" + $avp(didnumber) + "@" + $var(destination);
    

从这里开始,您可以只t_relay()使用新的 R-URI。

编辑: OpenSIPS URI 解析器实际上会容忍诸如“sip:44776772882”之类的 URI,但它会将 DID 解释为主机名,因此如果脚本编写者尝试将消息传递给无效的“ 44776772882" 主机名。

于 2018-04-03T05:51:51.687 回答