我正在开发一个 SIP 客户端。我了解 SIP 请求和 SIP 响应,但是在 SIP 消息中,呼叫 ID 和分支标签是如何生成的?RFC3261没有指定这一点。
3 回答
Call-ID 标头值可以是您想要的任何值,但必须是唯一的,以避免请求被归类为重复。
Via 标头上的分支参数需要以 z9hG4bK 的魔法 cookie 值开头,并且还必须是唯一的,以避免请求被归类为重复请求。对于 SIP 代理想要进行环路检测,RFC 中第 16.6 节第 8 点中的指南也详细说明了构建分支参数值时要采取的因素。
你的措辞很难理解。我假设您想知道UAC 应该如何Call-ID
生成参数,或者UAC 或代理服务器应该如何生成branch
参数。
唯一的要求Call-ID
是它应该是唯一的。它通常采用唯一令牌 + "@" + 主机名(如 email's )的形式Message-ID
,但并非必须如此。它可以只是一个独特的令牌。唯一令牌可以是任何可以合理确定是唯一的东西。为了避免泄露私人信息,您可以将其设为伪随机或私人唯一信息(时间、进程 ID 等)的加密哈希
同样,branch
参数只是一个唯一的标记,但请注意它必须以z9hG4bK
RFC 中指定的开头。
为什么要重新发明轮子?
有开源 SIP 项目,它们的实施可能会激发您的灵感。你没有提到你使用什么编程语言。所以我假设你可以阅读 C 代码。
获取kamailio 服务器的源代码。Call-ID 的实现在 kamailio-4.0.x/modules/tm/callid.c 中。我相信你很聪明,可以自己找出分支标签 :o)