发送ack时忽略了记录路由



我遇到了一个奇怪的问题,pjsip在发送ack时忽略了记录路由信息。以下是来自日志的sip消息流:

INVITE sip:+110@xxx.com;transport=tls SIP/2.0
Via: SIP/2.0/TLS ipv4.addr:38890;rport;branch=z9hG4bKPjdYP6TZrj4w7v8kicC3cBgABBNb47QHH2;alias
Max-Forwards: 70
From: "+558" <sip:+558@xxx.com>;tag=qfc3TEYcpfIBQHVXMOmh.7pyvqgmVdMh
To: sip:+110@xxx.com
Contact: "+558" <sip:+558@xxx.com>
Call-ID: 7FdLGhQ1L5BjAQsUrCPEOB3WbXipRfs1
CSeq: 18162 INVITE
Route: <sip:xxx.com:5061;transport=tls;lr>
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
User-Agent: SecuVOICE BB10 CSE 2.14.0.1 on Z10 10.3.1.2243
Authorization: Digest xxxx
Content-Type: application/x-x509-user-cert
Content-Length:
SIP/2.0 200 OK
Max-Forwards: 10
Via: SIP/2.0/TLS ipv4.addr:38890;rport=38890;received=ipv4.addr;branch=z9hG4bKPjdYP6TZrj4w7v8kicC3cBgABBNb47QHH2;alias
Record-Route:<sip:xxx.com:5061;transport=tls;lr;ftag=qfc3TEYcpfIBQHVXMOmh.7pyvqgmVdMh;cookie_=e43.052768f7>
Call-ID: 7FdLGhQ1L5BjAQsUrCPEOB3WbXipRfs1
From: "+558" <sip:+558@xxx.com>;tag=qfc3TEYcpfIBQHVXMOmh.7pyvqgmVdMh
To: <sip:+110@xxx.com>;tag=RuDb.RX-9YD0V.BKh0rpj61-SK-ORE5B
CSeq: 18162 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Contact: "+110" <sip:+110@ipv4.addr:25365>
Supported: replaces, 100rel, timer, norefersub
Content-Type: multipart/mixed;boundary=SBC1hJLGTAfp3t2j3HYWIvvgUBsC1RpJ
Content-Length: 27
ACK sip:+110@ipv4.addr:25365 SIP/2.0 
"+110" <sip:+110@ipv4.addr:25365>
Via: SIP/2.0/TLS ipv4.addr:38890;rport;branch=z9hG4bKPjkp-dUZmmgpXNWrZHe2ykqvrr9CgRvlm2;alias
Max-Forwards: 70
From: "+558" <sip:+558@xxx.com>;tag=qfc3TEYcpfIBQHVXMOmh.7pyvqgmVdMh
To: sip:+110@xxx.com;tag=RuDb.RX-9YD0V.BKh0rpj61-SK-ORE5B
Call-ID: 7FdLGhQ1L5BjAQsUrCPEOB3WbXipRfs1
CSeq: 18162 ACK
Route: <sip:xxx.com:5061;transport=tls;lr;ftag=qfc3TEYcpfIBQHVXMOmh.7pyvqgmVdMh;cookie_=e43.052768f7>
Content-Type: application/sdp
Content-Length:   709

从200 OK的记录路线来看,我预计ACK看起来像ACK sip:+110@ipv4.addr:25365;transport=tls;lr SIP/2.0

为什么pjsip忽略传输uri参数?

接收到的记录路由被复制为对话框中新传出请求中的路由。

例外情况是如果记录路由URI不携带"0";;lr";参数这是与RFC 2543 向后兼容的行为

传出请求的请求URI设置为接收到的Contact标头。

参见RFC 3261第12.2.1.1节

UAC使用远程目标和路由集来构建请求的请求URI和路由标头字段。

如果路由集为空,则UAC必须放置远程目标URI进入请求URI。UAC不得将Route标头字段添加到
请求中。

如果路由集不为空,并且路由集
中的第一个URI包含lr参数(请参阅第19.1.1节),则UAC必须将
远程目标URI放入请求URI中,并且必须包括一个route
标头字段,该字段按顺序包含路由集值,包括所有
参数。

如果路由集不为空,并且其第一个URI不包含lr参数,UAC必须放置路由中的第一个URI设置到请求URI中,剥离任何不是请求URI中允许。UAC必须添加一个Route头字段按顺序包含路由集值的剩余部分,包括所有参数。然后UAC必须放置遥控器目标URI作为最后一个值输入到Route头字段中。

路由集是预先配置的,或通过记录路由学习的。

当接收到来自另一方的Contact标头时,会更新目标URI。

最新更新