我有一个奇怪的问题,pjsip在发送确认时会忽略记录路由信息。以下是来自日志的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参数?
答案 0 :(得分:2)
Received Record-Route在对话框中的新传出请求中被复制为Route。
例外情况是Record-Route URI没有携带“; lr”参数。这是RFC 2543
的向后兼容行为传出请求的请求URI设置为收到的Contact头。
UAC使用远程目标和路由集来构建 Request-URI和请求的Route头字段。
如果路由集为空,则UAC必须放置远程目标URI 进入Request-URI。 UAC绝不能将路由头字段添加到
请求。如果路由集不为空,并且路由集中的第一个URI为 包含lr参数(参见第19.1.1节),UAC必须放置 远程目标URI进入Request-URI并且必须包含路由
标题字段按顺序包含路径设置值,包括全部
参数。如果路由集不为空,并且其第一个URI不包含 在lr参数中,UAC必须放置路由中的第一个URI 设置为Request-URI,剥离任何不是的参数 允许在Request-URI中。 UAC必须添加Route头字段 按顺序包含剩余的路径设置值, 包括所有参数。然后UAC必须放置遥控器 将URI作为最后一个值放入Route头字段中。
路由集可以预先配置,也可以通过Record-Route学习。
目标URI在从另一方收到联系人标头时更新。