CANCEL 메소드의 처리에 대하여 알아봄
CANCEL
- 클라이언트가 보낸 request의 취소
- 서버에게 request 처리를 그만 두게 하고 error response를 발생하게 함
- final response를 보낸 UAS는 아무 동작 안함
- UA나 프록시가 생성
9.1 Client Behavior#
INVITE가 아닌 request는 cancel 할 수 없음
Request-URI, Call-ID, To, the numeric part of CSeq, and From header fields는 cancel 하려는 request와 동일함
Cancel하려는 request에 Route header field가 있다면 CANCEL에도 반드시 포함하여야 함
Require or Proxy-Require header fields. 포함하면 안됨
CANCEL request를 생성후, 그 사이 도착한 response가 있는지 확인해야 함
- provisional response를 아직 받지 않았다면 보내면 안됨
- final response를 받았다면 보내면 안됨
CANCEL request와 cancel 하려는 request의 transaction은 독립적임
9.2 Server Behavior#
TU는 pending된 transaction을 cancel
CANCEL request의 처리는 서버의 종류마다 다름
- stateful proxy : 자신의 CANCEL request를 생성
- stateless proxy : 포워딩
hop-by-hop으로 처리
resubmit되지 않음 : challenged 될 수 없음
Require header field 포함 하지 않음
CANCEL request와 매칭되는 transaction이 없을 경우
- 481 (Call Leg/Transaction Does Not Exist) response
CANCEL request와 매칭되는 transaction이 있을 경우
- final response를 보냈을 경우 : 아무런 영향 없음
final response를 보내지 않았을 경우
- original request의 method에 따라 다름
- INVITE의 경우 : 487 (Request Terminated) response
- original request의 method에 따라 다름
original request에 상관없이 CANCEL request에 대하여 200 (OK) response를 보내야 함
'Protocol > SIP' 카테고리의 다른 글
| 11. Querying for Capabilities (0) | 2013.09.25 |
|---|---|
| 10. Registrations (0) | 2013.09.25 |
| 08. General User Agent Behavior (0) | 2013.09.25 |
| 07. SIP Messages (0) | 2013.09.25 |
| 06. Definitions (0) | 2013.09.25 |