发送确认时记录路由被忽略

时间:2015-04-14 12:35:27

标签: sip pjsip

我有一个奇怪的问题,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参数?

1 个答案:

答案 0 :(得分:2)

Received Record-Route在对话框中的新传出请求中被复制为Route。

例外情况是Record-Route URI没有携带“; lr”参数。这是RFC 2543

的向后兼容行为

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

请参阅RFC 3261 Section 12.2.1.1

  

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在从另一方收到联系人标头时更新。