option-tag 是 SIP 的擴充選項,例如 100rel 等,本身是不超過 20 字元的 alphanum 字串 (在 SIP ABNF 定義 option-tag = token),用在信頭欄位 Require、Proxy-Require、Supported 和 Unsupported 來表示是否支援及採用。
擴充選項的支援及採用
UAC 在 Supported 放可支援的 option-tag、或在 Require 放 UAS 必須支援的 option-tag、或在 Proxy-Require 放 Proxy 必須支援的 option-tag。Proxy 如果不支援 Proxy-Require 的 option-tag,回 420。UAS 如果不支援 Require 的 option-tag,回 420。UAS 需要的 option-tag 沒列在 Supported,回 421。UAS 採用的 option-tag,列在回應的 Require。
- 發請求表示可支援的或必須支援的 option-tag。
- Supported 列支援的 option-tag。
- Require 列 UAS 必須支援的 option-tag。
- Proxy-Require 列 Proxy 必須支援的 option-tag。
- CANCEL 和失敗 INVITE 的 ACK 不用 Require 和 Proxy-Require。
- 成功 INVITE 的 ACK 只能包含 INVITE Require 和 Proxy-Require 有的 option-tag。
- UAC 如果收到 420 Bad Extension,應該嘗試再次請求,但這次略過列在回應 Unsupported 的 option-tag。
- 檢查 Proxy-Require,如有不支援回 420 Bad Extension。
- 忽略 CANCEL 和失敗 INVITE 的 ACK 的 Proxy-Require。
- 檢查 Require,如有不支援回 420 Bad Extension。
- 需要某 option-tag 才能進行,但 Supported 沒列,回 421 Extension Required。
- 忽略 CANCEL 和失敗 INVITE 的 ACK 的 Require。
- 成功 INVITE 的 ACK 只能包含 INVITE Require 有的 option-tag。
- 採用時,回應含 Require 列啟用的 option-tag。
相關信頭欄位
Proxy-Require
告訴 Proxy 必須支援哪些 option-tag 才能處理請求。proxy 可新增、不能加密。
Proxy-Require = "Proxy-Require" HCOLON option-tag *(COMMA option-tag)
範例:
Proxy-Require: foo
Require
必須支援的 option-tag,用在請求、421 Extension Required、或在其它回應表示採用。Proxy 可新增、不能加密。
Require = "Require" HCOLON option-tag *(COMMA option-tag)範例:
Require: 100rel
Supported (k)
在請求是 UAC 告訴 UAS 支援哪些 option-tag。在 SIP OPTIONS 回應是 UAS 告訴 UAC 支援哪些 option-tag。空白表示所有都不支援。在 RFC2543 沒有。INVITE 及其 2xx 回應應該要有。
Supported = ( "Supported" / "k" ) HCOLON [option-tag *(COMMA option-tag)]範例:
Supported: 100rel
Unsupported
用在 420 Bad Extension,告訴 UAC 不支援的 option-tag。
Unsupported = "Unsupported" HCOLON option-tag *(COMMA option-tag)範例:
Unsupported: foo
相關回應碼
420 Bad Extension
不當擴充。
Proxy 不認得 Proxy-Require 或 UAS 不認得 Require 列的某些 option-tag。回應必須含有 Unsupported 表示不支援的 option-tag 有哪些。UAC 應該再次嘗試請求,但這次略過列在回應 Unsupported 的 option-tag。
例如: UAC->UAS: INVITE sip:watson@bell-telephone.com SIP/2.0
Require: 100rel
UAS->UAC: SIP/2.0 420 Bad Extension
Unsupported: 100rel
421 Extension Required
需要擴充。
UAS 需要特定 option-tag 處理請求,但沒列在請求的 Supported。421 回應含 Require 表示需要的 option-tag。罕用。
沒有留言:
張貼留言