我正在開發SIP客戶端。我瞭解SIP請求和SIP響應,但在SIP消息中,如何生成呼叫標識和分支標記? RFC3261沒有指定這個。SIP協議中的呼叫ID和分支標記
2
A
回答
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
開頭。
0
爲什麼重新發明輪子?
有開源的SIP項目,它們的實現可能會激勵你。 你沒有提到你使用的是什麼編程語言。所以我假設你可以閱讀C代碼。
獲取kamailio server的源代碼。 Call-ID的實現在kamailio-4.0.x/modules/tm/callid.c中。我相信你很聰明,可以自己瞭解分支標籤:o)
相關問題
- 1. SIP協議/呼叫等待
- 2. 如何使用扭曲SIP協議進行SIP呼叫?
- 3. Sip呼叫與G729支持
- 4. Android獲得會話初始化協議(SIP)呼叫狀態
- 5. 加入呼叫ID在SIP-的servlet
- 6. 分佈式呼叫的SIP中繼
- 7. 對SIP協議
- 8. C#SIP協議
- 9. 呼叫控制sip呼叫星號
- 10. SIP - > XMPP呼叫問題
- 11. SIP用Javascript結束呼叫
- 12. Sip/Voip呼叫支持Android中的所有設備
- 13. 呼叫標記圖標
- 14. 從電話到PC的呼叫協議和實現
- 15. 在SIP中設置SIP帳戶的Voip呼叫
- 16. 如何在併發呼叫時撥打SIP呼叫會話
- 17. 來自SIP的多個呼叫
- 18. 對IP的直接SIP呼叫
- 19. SIP API或SDK支持呼叫者應用程序
- 20. Wifi呼叫協議可以編程到FirefoxOS中嗎?
- 21. SIP呼叫的媒體地址可以在呼叫中改變嗎?
- 22. JMETER使用Microsoft遠程桌面協議記錄包含呼叫的方案
- 23. Asterisk SIP呼叫沒有音頻
- 24. 執行SIP呼叫到話機.NET
- 25. 通過意向發起SIP呼叫
- 26. 使用星號設置SIP呼叫
- 27. 嘗試呼叫時發生異常(SIP)
- 28. 禁止呼叫連接Android Pjsip SIP庫
- 29. 通知SIP代理呼叫已結束
- 30. 任何Android意圖使SIP呼叫?
對於唯一標記+「@」+主機名,不需要使用Call-ID。你會發現一堆SIP堆棧使用GUID或類似的。將IP地址放在Call-ID值中實際上是個不錯的主意。我已經看到SIP ALG會破壞他們在SIP數據包中找到的每個私有IP地址,並且如果它們恰好包含私有IP地址,則會使Call-ID標頭搞砸。 – sipwiz
@sipwiz你說得對,我自己也看到過這種「光禿禿的」Call-ID。我編輯了我的答案。 – Celada
@sipwiz是的,你是對的,我自己生成它。 – lucky