如何转换 URI 中的字符串
How to convert string in URI
我设置了 OpenSips 2.3 代理服务器,所以任何调用都来自服务器,我的脚本从数据库中获取 sip URI,并将调用转发到该 uri。当我获得价值时,我使用 AVP 获得价值并将其保存在 $avp(didnumber) 中,如果我使用 rewrite 并手动指定 uri 它正在工作,但是当我从 DB 中获取该值并分配它时,它不起作用重写uri() 方法。
$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 或转换来转换变量,我尝试了很多语法但仍然无法做吧。请提出建议。
rewrite_uri()
已被弃用,取而代之的是简单地使用 $ru
。您的 R-URI 已被此语句完全重写:
$ru = "sip:" + $avp(didnumber);
但是,请注意上面的内容是不正确的,因为根据 SIP RFC 3261,您没有向 uri 提供 "hostport" 部分:
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”主机名。
我设置了 OpenSips 2.3 代理服务器,所以任何调用都来自服务器,我的脚本从数据库中获取 sip URI,并将调用转发到该 uri。当我获得价值时,我使用 AVP 获得价值并将其保存在 $avp(didnumber) 中,如果我使用 rewrite 并手动指定 uri 它正在工作,但是当我从 DB 中获取该值并分配它时,它不起作用重写uri() 方法。
$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 或转换来转换变量,我尝试了很多语法但仍然无法做吧。请提出建议。
rewrite_uri()
已被弃用,取而代之的是简单地使用 $ru
。您的 R-URI 已被此语句完全重写:
$ru = "sip:" + $avp(didnumber);
但是,请注意上面的内容是不正确的,因为根据 SIP RFC 3261,您没有向 uri 提供 "hostport" 部分:
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”主机名。