13.2.1 Creating the Initial INVITE
13.2.2 Processing INVITE Responses
13.2.2.3 4xx, 5xx and 6xx Responses
13.3.1 Processing of the INVITE
13.3.1.2 The INVITE is Redirected
13.3.1.3 The INVITE is Rejected
13.1 Overview#
INVITE request를 통하여 session을 생성 함
2xx response : ACK를 transaction에 포함하지 않음
non-2xx final response : ACK를 transaction에 포함
2xx response는 session을 생성
각각의 2xx response 마다 dialog 생성
13.2 UAC Processing#
13.2.1 Creating the Initial INVITE#
Section 8.1.1의 절차를 따라서 dialog 밖에서 INVITE 메세지를 생성
Header field
- Allow : dialog 동안 호출될 method을 나타냄
- Supported : UAC가 이해 할 수 있는 확장들
- Accept : UA가 받아 들일 수 있는 Content-Types
- Expires : invitation의 유효시간
- etc.. (Subject, Organization, User-Agent)
- Allow : dialog 동안 호출될 method을 나타냄
Body를 이용한 session description
- offer/answer model
Offer/answer model 사용 제약
- offer의 생성은 INVITE나 INVITE에 없을 경우엔 UAS에서 보내는 첫 non-failure 메시지(final 2xx response)에 포함 됨
- INVITE에서 offer를 생성하면 answer는 반드시 UAS에서 보내는 첫 non-failure 메시지(final 2xx response)에 포함 됨
- UAS에서 보내는 첫 non-failure 메시지(final 2xx response)에 offer가 생성되면 answer는 ACK에 반드시 포함
- 이번에 offer에 대해서 answer를 받고 현재 보낸 offer가 없다면 새로운 offer를 생성 할 수도 있음
- 이전에 offer를 보냈으면 transaction을 완료하기 전에는 또 보낼수 없음
- Content-Disposition header field의 값을 "session"으로 해야 함 - header field가 없을 경우 Content-Type이 application/sdp면 "session"으로 간주 아닐 경우는 "render"로 간주
SDP를 사용 가능해야 함
13.2.2 Processing INVITE Responses#
UAC는 INVITE client transaction으로 넘겨주고 기다림
timeout이 발생하면 408 (Request Timeout) response을 받은것 처럼 동작
13.2.2.1 1xx Responses#
Early dialog 상태로 들어감 - initail INVITE가 transaction이 완료되기전 dialog 안에서 request를 보낼 수 있음
13.2.2.2 3xx Responses#
UAC는 새로운 주소로 시도 할 수도 있음
13.2.2.3 4xx, 5xx and 6xx Responses#
Error가 발생하였음을 알고 early dialog를 종료
이후에 발생한 final response는 무시
13.2.2.4 2xx Responses#
Multiple 2xx response : forking에 의해 발생, To tag로 구분
만약 매칭되는 dialog가 있다면 "confirmed" 상태로 천이, 2xx response를 이용하여 dialog 정보 recompute
ACK를 생성
- CSeq의 숫자는 INVITE와 동일하고 문자는 ACK로 함
- INVITE와 동일한 credential 사용
- 2xx에 offer가 있다면 answer 포함, 허용되지 않는 offer일 경우 valid answer를 이용 ACK를 생성한 후 즉시 BYE를 보냄
64*T1 초 동안 INVITE transaction을 유지
dialog를 진행하고 싶지 않을 경우는 BYE를 보내야 함
13.3 UAS Processing#
13.3.1 Processing of the INVITE#
Transaction layer로 부터 INVITE request를 받고 Section 8.2와 같은 처리를 함
위의 처리 과정은 response를 생산하지 않음
UAS core에서 처리하는 절차
- INVITE request에 Expires header field가 있다면 타이머 시작, 타이머가 종료되면 487 (Request Terminated) response 생성 request
- mid-dialog라면 method 독립적으로 Section 12.2.2의 처리, 세션을 수정하려 한다면 Section 14장에서와 같이
- To tag는 있으나 dialog 매칭이 되지 않는다면 Section 12.2.2의 가이드 라인을 따름
Dialog 밖에서 새로운 session 생성
INVITE가 dialog 밖에서도 session description은 가질 수 있음 (Multicast conference와 같은 경우)
session description이 없을 경우는 UAS가 offer 생성
progress, accept, redirect, or reject 으로 처리 가능
13.3.1.1 Progress#
UAS는 request에 대하여 즉시 대답을 하지 않는다면 Provisional response를 보내 early dialog 상태로 만들 수 있음
UAS가 INVITE에 대하여 응답 시간을 연장하기를 원한다면 매분 non-100 provisional response를 보내야 함
13.3.1.2 The INVITE is Redirected #
UAS가 3xx response를 보내기로 결정하였다면, 300 (Multiple Choices), 301 (Moved Permanently) or 302 (Moved Temporarily) response는 반드시 Contact header field에 하나 혹은 그 이상의 새로운 주소를 포함하여야 함
13.3.1.3 The INVITE is Rejected#
Callee가 전화를 받고 싶지 않거나 다른 전화를 받고 있다면 486 (Busy Here) response 전달
UAS 모든 end system이 받을 수 없다는걸 안다면 600 (Busy Everywhere) response 전달
UAS가 INVITE의 offer를 거절할 경우 488 (Not Acceptable Here) response 전달
13.3.1.4 The INVITE is Accepted#
2xx response 생성
- header field : Allow, Supported, Accept(MAY)
- INVITE에 offer가 있다면 answer를 없다면 offer를 포함
INVITE server transaction을 통해 response 전달
- transaction은 response를 보내자 마자 종료
- ACK가 도착할때까지 주기적으로 response 전달
- 64*T1 시간동안 ACK가 오지 않는다면 dialog를 confirmed 상태로 만들고 BYE를 통해 세션 종료
'Protocol > SIP' 카테고리의 다른 글
| 15. Terminating a Session (0) | 2013.09.25 |
|---|---|
| 14. Modifying an Existing Session (0) | 2013.09.25 |
| 12. Dialogs (0) | 2013.09.25 |
| 11. Querying for Capabilities (0) | 2013.09.25 |
| 10. Registrations (0) | 2013.09.25 |