对 INVITE 请求的 SIP 响应可能是最终的或临时的。最终响应始终可靠地发送,而临时响应通常并非这样。对于需要可靠地发送临时响应的情况,可以使用 PRACK(临时响应应答)方法。
开始之前
要开发支持 PRACK 的应用程序,必须符合下列条件:
- 为指示客户机支持 PRACK,发送 INVITE 请求的客户机必须将 100rel 标记放置在 Supported 或 Require 头中。
- SIP servlet 必须通过调用 sendReliably() 方法而不是 send() 方法进行响应。
关于此任务
PRACK 按下列标准进行了描述:
- RFC 3262(“Reliability
of Provisional Responses in the Session Initiation Protocol (SIP)”),它通过添加 PRACK 和选项标记 100rel 扩展了 RFC 3261(“SIP:
Session Initiation Protocol”)。
- JSR 289(“SIP Servlet Specification V1.1”)的第 5.7.1 节(“Reliable Provisional Responses”)。
过程
- 如果您要开发充当代理的应用程序,请让应用程序生成并发送一个可靠的临时响应给在“至”字段中任何没有标记的 INVITE 请求。
- 如果要开发充当用户代理客户机 (UAC) 的应用程序,请执行以下操作:
- 使应用程序将 100rel 标记添加至出局 INVITE
请求。此选项标记必须出现在 Supported 头或 Require 头中。
- 要创建 PRACK 请求并将该请求发送至用户代理服务器 (UAS),请在应用程序的 doProvisionalResponse(...) 方法中对入局响应调用 createPrack() 方法。该容器按 JSR 289 第 5.7.1 节中的定义处理 RAck 头。
- 充当 UAC 的应用程序接收针对 PRACK 的最终 2xx-6xx 响应,UAC 可使用 doResponse() 方法处理该响应。
- 如果要开发充当用户代理服务器 (UAS) 的应用程序,请执行以下操作: