2012-05-15 40 views

回答

11

Call-ID標頭值可以是任何你想要的,但必須是唯一的,以避免請求被分類爲重複。

Via頭部的分支參數需要以魔術cookie值z9hG4bK開頭,並且還必須是唯一的,以避免請求被分類爲重複。對於希望進行循環檢測的SIP代理來說,RFC 16.6第8點中的準則也詳細說明了構建分支參數值時需要考慮的因素。

1

你的措辭很難理解。我假設你想知道如何 UAC應該生成一個Call-ID如何一個UAC或代理服務器應該生成一個branch參數。

Call-ID的唯一要求是它應該是唯一的。它通常採用獨特的標記形式+「@」+主機名稱,例如電子郵件的Message-ID,但它不一定是。它可以只是一個獨特的令牌。唯一的標記可以是任何合理確定爲唯一的東西。爲了避免泄露私人信息,你可以只讓僞隨機的或私人的獨特信息的加密哈希(時間,進程ID,等...)

相若方式中,branch參數只是一個唯一令牌,但要注意它必須以RFC中規定的z9hG4bK開頭。

+1

對於唯一標記+「@」+主機名,不需要使用Call-ID。你會發現一堆SIP堆棧使用GUID或類似的。將IP地址放在Call-ID值中實際上是個不錯的主意。我已經看到SIP ALG會破壞他們在SIP數據包中找到的每個私有IP地址,並且如果它們恰好包含私有IP地址,則會使Call-ID標頭搞砸。 – sipwiz

+0

@sipwiz你說得對,我自己也看到過這種「光禿禿的」Call-ID。我編輯了我的答案。 – Celada

+0

@sipwiz是的,你是對的,我自己生成它。 – lucky

0

爲什麼重新發明輪子?

有開源的SIP項目,它們的實現可能會激勵你。 你沒有提到你使用的是什麼編程語言。所以我假設你可以閱讀C代碼。

獲取kamailio server的源代碼。 Call-ID的實現在kamailio-4.0.x/modules/tm/callid.c中。我相信你很聰明,可以自己瞭解分支標籤:o)