首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在URI中转换字符串

如何在URI中转换字符串
EN

Stack Overflow用户
提问于 2018-04-03 04:09:03
回答 1查看 263关注 0票数 1

我设置了OpenSips 2.3代理服务器,因此任何调用都会出现在服务器上,我的脚本从DB获取sip uri,并将调用转发到该URI。当我获得值时,我使用AVP来获取值并将其保存在$avp(didnumber)中,如果我使用重写并手动指定uri,则它正在工作,但是当我从DB获取这个值并将其赋值时,它并不在rewriteuri()方法中工作。

代码语言:javascript
运行
复制
$ru = "sip:"+$avp(didnumber)

如果我写

代码语言:javascript
运行
复制
rewriteuri("[$ru]")

它抛出以下错误

代码语言:javascript
运行
复制
ERROR:core:parse_sip_msg_uri: bad uri <[$ru>
ERROR:tm:new_t: uri invalid
ERROR:tm:t_newtran: new_t failed

我认为这个方法不接受普通变量,所以我增加了引号使它成为字符串变量,现在它在日志上显示得很好,但似乎我不得不使用AVP或转换来转换变量,我尝试了很多语法,但仍然做不到。请建议一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 05:51:51

有人反对rewrite_uri()只使用$ru。您的R已经被以下语句完全重写:

代码语言:javascript
运行
复制
$ru = "sip:" + $avp(didnumber);

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

代码语言:javascript
运行
复制
SIP-URI          =  "sip:" [ userinfo ] hostport
                    uri-parameters [ headers ]

解析器可能会报告一个错误。对此有两个解决方案:

  • 要么只重写R "userinfo“部分,如下所示: $rU =$avp(教学编号);
  • 提供目标主机名: $ru = "sip:“+$avp(教学编号)+ "@”+$var(目的地);

接下来,您可以使用新的R进行t_relay()操作。

编辑: URI解析器实际上将容忍一个URI,如"sip:44776772882",但是它会将DID解释为主机名,因此如果脚本编写者试图将消息转发给无效的"44776772882“主机名,那么错误可能会在稍后出现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49622113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档