sipp脚本中被叫挂机事件BYE: 481 Call Leg Does Not Exist错误处理

被叫挂机时,由被叫发起BYE消息给主叫,执行sipp脚本时出现481错误,考虑是由于bye消息中call-id、from-tag、to-tag值不匹配导致的,这时抓取日志进行确认tag值。


被叫UAS脚本:

发现被叫UAS的日志中显示from-tag和to-tag同bye消息中填写的不一致,其中的to-tag可以根据SIPP脚本之前的tag值取到,而from-tag无法直接取到,但是可以考虑使用正则表达式从收到的消息中获取,如返回的PRack消息或183消息等

<recv request="PRACK">

<action>

  <ereg regexp=".*" search_in="hdr" header="From: " assign_to="header_from_tag"/>(从头域中取出from的值存放到header_from_tag里)

  <ereg regexp="tag=(.*)" search_in="var" variable="header_from_tag" assign_to="2" />(从header_from_tag里匹配tag=xxx的变量值存放到2参数里)

  </action>

</recv>

然后在bye消息中引用取到的tag值即可

<![CDATA[

BYE sip:10.1.xx.xx:xxxx SIP/2.0

Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]

To:<sip:[field2]@IP:端口>;[$2](主叫号码地址)

From:<sip:[field0]@IP:端口;user=phone>;tag=[pid][call_number](被叫号码地址)

[last_Call-ID:]

[last_Allow]

Max-Forwards: 70

CSeq: 5 BYE

Content-Length: 0

]]>


主叫UAC脚本:

主叫sipp脚本中发出的200 OK(BYE)中from-tag和to-tag也需要同整个脚本中使用的tag保持一致,且特别需要注意这里发出的bye对应的200 ok消息中from和to需要同被叫脚本中的from和to一致

<send retrans="1000">
<![CDATA[
SIP/2.0 200 OK
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From:<sip:[field2]@IP:端口;user=phone>;tag=[call_number](被叫号码地址)
To:<sip:[field0]@IP:端口>;tag=[pid][call_number](主叫号码地址)
[last_Call-ID:]
CSeq: 5 BYE
Content-Length: [len]
]]>
</send>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值