2019年2月15日 星期五

SIP 回應碼

SIP 回應碼 (Response Code, Status-Code) 用在 SIP 回應的頭行 (狀態行、Status-Line) 第 2 個欄位,有 3 位數字。回應碼分成暫時回應 (Provisional Response) 和最後回應 (Final Response)。依第 1 位數字分類:
回應碼分類說明
1xx暫時回應 (SIP transaction 進行中)收到請求,還在處理中。
2xx最後回應
(結束 SIP transaction)
Success請求成功。
3xxFailRedirection請改洽新位址。
4xxRequest Error特定 Server 的回應請求失敗,可能語法有誤或無法在此 server 提供。
5xxServer Error有效的請法無法在此 server 提供。
6xxGlobal Failure請求無法在任何 server 提供。

回應碼適用大部分 HTTP/1.1 回應碼,6xx 類是 SIP 新增,完整列表可見 IANA SIP 參數 登記的回應碼。每個回應碼會有對應的預設 Reason-Phrase。

UAC 必須能處理每個 class 的 x00 和 183,不認得的最後回應 MUST 當作同 class 的 x00 處理,不認得的暫時回應當作 183 Session Progress 處理。[RFC3261 8.1.3.2]

Provisional 1xx

暫時回應 (Provisional Response),表示還在進行中,要再等最後回應。

如果預期還要 200 ms 以上才會有結果,先送 1xx 回應。 可包括信體,如含 session 描述。

1xx 回應並不會可靠地傳送,不會讓 UAC 送 ACK。使用 PRACK 可可靠傳送暫時回應。

100 Trying

嘗試中。表示下一站 Proxy 已經收到請求,一些未知的動作正在進行中 (例如:資料庫查詢中),和其它暫時的回應一樣會停止 UAC 重傳 INVITE。但不同於其它暫時的回應,stateful proxy 不回送 100 Trying。

180 Ringing

振鈴中。被叫端用戶正在響鈴,一般主叫端需要產生回鈴音。

一般不含 SDP,需要主叫端自己產生回鈴音。

181 Call Is Being Forwarded

轉接中。可用來表示呼叫已經轉送到不同的目的地。

182 Queued

排隊等候中。被叫暫時 unavailable,server 決定 queue the call。當被叫 available,再回適當最後回應。Reason-Phrase 可提供更多等候細節,例如「5 calls queued; expected waiting time is 15 minutes」,可發多次 182 更新等候狀態。

183 Session Progress

呼叫進行中 。不清楚被叫是否正在響鈴或是其它狀態,可在 Reason-Phrase 信頭欄位、或信體提供更多資訊。

UAC 必須能處理 183,不認得的暫時回應當作 183 處理。[RFC3261 8.1.3.2]

一般會含 SDP,在接通前建立不收費的 early-media,由局端提供音訊,可能應用:

  • 彩鈴,可能是不同的回鈴音、或音樂。(該用 180?)
  • 錯誤語音,「您撥的號碼錯誤,請察明後再撥」、「您撥的號碼通話中,請稍後再撥」等。
  • IVR。

early-media 需要 INVITE 提供 SDP early-offer 才能送到主叫端,如果 INVITE 沒提供 SDP 呢?回 503?

P-Early-Media header

https://thanhloi2603.wordpress.com/2017/08/05/sip-180-vs-183-vs-early-media/

待讀:https://www.ietf.org/archive/id/draft-ietf-sip-183-00.txt

Successful 2xx

請求成功。

200 OK

請求成功,附帶回傳的資訊視請求使用的 method。

204 No Notification

成功,但沒有其它 Notification,用在 SUBSCRIBE。

Redirection 3xx

提供可能滿足呼叫的用戶新位址或服務。

300 Multiple Choices

多重選擇

301 Moved Permanently

已永久遷移。受話端不再使用 Request-URI 上的位址,應該改嘗試 Contact 信頭欄位給的新位址。
發話端應該更新自己紀錄的相關資料 (如電話簿),改用新位址。

302 Moved Temporarily

暫時遷移。

305 Use Proxy

請改用代理伺服器存取。UAS 回應要求的資源必須透過給定在 Contact 欄位的 proxy 存取。

380 Alternative Service

有另外的服務。呼叫失敗,但可用說明在訊息體的另外服務。

Request Failure 4xx

來自特定 server 失敗的回應 (到其它 server 可能成功)。UAC 不應該重試沒修改的相同請求。

400 Bad Request

不當請求。請求由於 syntax 錯誤而無法處理。Reason-Phrase 應該要指出 syntax 問題細節,例如「Missing Call-ID header field」。

401 Unauthorized

未授權

402 Payment Required

要求付費

403 Forbidden

禁止

404 Not Found

用戶找不到。

405 Method Not Allowed

方法不允許。Request-URI 指定的位址不允許請求的 method 。必須包含 Allow 信頭欄位列出指定的位址允許的 method。

406 Not Acceptable

不可接受

407 Proxy Authentication Required

需要代理伺服器授權

408 Request Timeout

呼叫超時:在預定時間內無法找到用戶

410 Gone

已消失:用戶曾經存在,但已從此處消失

413 Request Entity Too Large

請求實體過大

414 Request-URI Too Long

請求 URI 過長

415 Unsupported Media Type

不支援的媒體類型。請求的信體格式不支援,*必須* 在 Accept、Accept-Encoding、或 Accept-Language 回可接受的列表。

UAC 收到回應可再依據這些信頭欄位重試。

416 Unsupported URI Scheme

不支援的URI方案

420 Bad Extension

421 Extension Required

423 Interval Too Brief

時間間隔過短

480 Temporarily Unavailable

暫時不可使用。用戶不在 (例如沒登入、啟用「勿干擾」(do not disturb)。可加 Retry-After 表示適當的再撥時間。用戶可能有其它聯繫方式。應該在 Reason-Phrase 表示更精確原因,如為什麼用戶不在。
也可能是 redirect 或 proxy server 沒有可用的轉送位置。

481 Call/Transaction Does Not Exist

通話不存在。

482 Loop Detected

偵測到迴圈。

483 Too Many Hops

經由過多。

484 Address Incomplete

地址不全。

485 Ambiguous

模糊不清。

486 Busy Here

受話端在這忙線中。回應可加 Retry-After 說明適當的再撥時間。受話端可能有其它聯繫方式,例如 voice mail,否則該用 600 Busy Everywhere。

487 Request Terminated

請求已結束。請求已經由 BYECANCEL 結束。487 不會用在回應 CANCEL。

用在 re-INVITE 需要掛斷嗎?

488 Not Acceptable Here

此處不可接受。

491 Request Pending

已經有待處理的 re-INVITE 進行中。
RFC 3261 新增,處理雙方同時互送 re-INVITE 的碰撞 (glare) 情況。

493 Undecipherable

無法解讀。

Server Failure 5xx

500 Internal Server Error

伺服器內部錯誤。

501 Not Implemented

未實作。

502 Bad Gateway

閘道器錯誤。

503 Service Unavailable

服務不可使用。

504 Server Time-out

伺服器超時。

505 SIP Version not supported

SIP 版本不支援。

513 Message Too Large

訊息過長。

Global Failures 6xx

全域失敗。

600 Busy Everywhere

各處皆忙線中。回應可加 Retry-After 說明適當的再撥時間。如果受話端不想 reveal 拒答原因,使用 603 Decline 取代。已知沒其它其它聯繫方式 (如 voice mail),否則應該使用 486 Busy Here

603 Decline

受話端拒絕。回應可加 Retry-After 說明適當的再撥時間。已知沒其它其它聯繫方式。

604 Does Not Exist Anywhere

無處存在

606 Not Acceptable

不可接受。

參考

  1. RFC 3261 Section 21

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...