概述
PRACK消息是sip协议的扩展,在RFC3262中定义,标准的名称是sip协议中的可靠临时响应。
本文简单介绍标准中对PRACK消息流程的描述,以及fs配置PRACK的方式。
环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.10.7
GCC:4.8.5
PRACK消息
SIP协议中的临时响应主要是100、180、183这些。
由于某些场景下早期媒体的临时响应消息比较重要,在RFC3262中对临时响应进行了扩展,可以简单分为普通临时响应和可靠临时响应。
普通临时响应,响应码范围100-199,UAS针对invite消息的普通的临时响应,不需要UAC确认消息,没有“Require: 100rel”和“RSeq”头域。
可靠临时响应,响应码范围101-199,UAS针对invite消息的可靠的临时响应,需要UAC确认消息,使用PRACK确认,与普通临时响应的主要区别在于多了两个头域,“Require: 100rel”和“RSeq: 1852321830”。
PRACK,可靠临时响应的确认消息,由UAC发起,用来保证可靠临时响应的传递,使用“CSeq: 71146689 PRACK”和“RAck: 1 71146688 INVITE”头域匹配可靠临时响应。
RFC3262中对于UAS和UAC处理可靠临时响应的流程描述。
1, UAS在发送第一个可靠临时响应之后,未收到PRACK确认之前,不能发送第二个可靠临时响应。
2, UAC在收到第一个可靠临时响应之后,发送PRACK确认之前,如果收到第二个可靠临时响应,可以采用丢弃或缓存的处理方式,收到普通临时响应也可以采用丢弃或缓存的处理方式。
freeswitch配置测试
修改conf/sip_profiles/external.xml配置文件。
<param name="enable-100rel" value="true"/>
使用10011呼叫137,其中183消息是可靠临时响应,需要PRACK确认。
总结
freeswitch对PRACK的处理和RFC标准基本一致。
如果呼叫场景中早期媒体比较重要,而且因为网络问题经常丢失,就需要开启100rel来保证早期媒体的可靠消息。
空空如常
求真得真