我正在开发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