INVITE 요청에 대한 SIP 응답은 최종 응답 또는 임시 응답 중 하나입니다.
최종 응답은 항상 안정적으로 전송되지만 임시 응답은 보통 그렇지 않습니다. 임시
응답을 안정적으로 전송해야 하는 경우 PRACK(Provisional Response
Acknowledgement) 메소드를 사용할 수 있습니다.
시작하기 전에
PRACK을 지원하는 애플리케이션을 개발하려면 다음 기준에 부합해야 합니다.
- INVITE 요청을 전송하는 클라이언트는 Supported 또는 Require 헤더에 클라이언트가 PRACK을 지원함을 표시하는 100rel 태그를 놓아야 합니다.
- SIP 서블릿은 응답을 전송하는 데 send() 메소드 대신에 sendReliably() 메소드를 호출하여 응답을 받습니다.
이 태스크 정보
PRACK은 다음 표준에 설명되어 있습니다.
- RFC 3261("SIP:
Session Initiation Protocol")를 확장하여 PRACK 및 옵션 태그 100rel을 추가하는
RFC 3262("SIP(Session Initiation Protocol)에서
임시 응답의 신뢰도").
- JSR 116("SIP 서블릿 API 버전 1.0")의
섹션 6.7.1("신뢰할 수 있는 임시 응답").
프로시저
- 프록시 역할을 하는 애플리케이션의 경우 다음을 수행하십시오.
- 애플리케이션이 INVITE 요청에 대해 To 필드에 태그가 없는 신뢰 가능 임시 응답을 생성하고 전송하도록 하십시오.
- UAC(User Agent Client) 역할을 하는 애플리케이션의 경우 다음을 수행하십시오.
- 애플리케이션이 발신 INVITE 요청에 대해 100rel 태그를 추가하도록 하십시오.
옵션 태그가 Supported 헤더 또는 Require
헤더에 표시되어야 합니다.
- 애플리케이션의 doProvisionalResponse(...)
메소드 내에서 애플리케이션이 수신되는 신뢰 가능 임시
응답에 대해 PRACK 요청을 작성하고 전송하도록 준비하십시오. 애플리케이션은 응답의 대화 상자에서 SipSession.createRequest(...) 메소드를 통해 PRACK 요청을 작성해야 하고
RFC 3262 섹션 7.2("RAck")에 따라 RAck 헤더를 설정해야 합니다.
- UAC 역할을 하는 애플리케이션은 doPrack(
) 메소드를 수신하지 않습니다. UAC는 INVITE를 전송하고 신뢰 가능한 응답을 수신합니다. UAC가
신뢰 가능한 응답을 수신하면 PRACK에 UAS에 대한 요청을 전송하고 PRACK에서
200 OK를 받으므로 이를 수신하기 위해서는 다음에 doResponse( )를 구현해야 합니다.
- UAS(User Agent Server) 역할을 하는 애플리케이션의 경우 다음을 수행하십시오.
- 수신되는 INVITE 요청에 100rel 태그가 필요한 경우 send() 메소드를 사용하여 101-199
응답을 신뢰할 수 없는 방식으로 전송하려고 시도하면 예외가 발생합니다.
- 애플리케이션이 신뢰 가능한 임시 응답을 64*T1초 내에 수신확인하지 않는 경우
noPrackReceived() 이벤트를 수신하도록 SipErrorListener를 선언하도록 하십시오. 여기서
T1은 SIP 타이머입니다. noPrackReceived() 이벤트 처리 중 애플리케이션은
JSR 116 섹션 6.7.1에 따라 연관된 INVITE 요청에 대해 5xx 오류 응답을 생성하고
전송해야 합니다.
- 애플리케이션에 하나 이상의 미해결된 수신확인되지 않은 신뢰 가능한 임시 응답이 있도록 하십시오. 첫 번째 응답의
수신확인 전에 다른 응답을 전송하려고 시도하면 예외가 발생합니다.
- 애플리케이션이 세션 설명이 들어 있는 PRACK 요청을 둘러싼 RFC 3262 제공/응답
시맨틱을 강제 실행하도록 하십시오.
특히, 서블릿은 수신확인되지 않은 임시 응답에 세션 설명이 들어 있는 경우 2xx 최종 응답을 전송하면 안됩니다.