You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kamailio:如何在INVITE请求的Contact头中追加参数?移除操作无效

Kamailio:保存原始Contact头并替换为带新参数的Contact头

问题根源

你的代码存在三个核心问题:

  • 变量引用错误:生成新Contact头时使用了未定义的$var(contact),应该引用之前保存的$var(orig_contact)
  • 日志验证逻辑有偏差:移除头后直接调用$hdr(Contact)输出,Kamailio的$hdr()可能存在内部缓存,导致显示结果不准确,建议用已保存的变量值做验证
  • 未处理多Contact头场景:remove_hf("Contact")默认只移除第一个Contact头,如果请求中存在多个该头,就会有残留未被清除

修正后的可行代码

# 保存原始Contact头(单头场景)
$var(orig_contact) = $hdr(Contact);
xlog("L_INFO", "Original Contact: $var(orig_contact)\n");

# 循环移除所有Contact头,确保彻底清除
while($hdr(Contact)) {
    remove_hf("Contact");
}
# 验证移除结果:此时$hdr(Contact)应为空
xlog("L_INFO", "After removal, Contact exists? $hdr(Contact)\n");

# 拼接新参数生成新Contact头
$var(new_contact) = $var(orig_contact) + ";param=value";
# 添加新的Contact头,注意要带\r\n换行符
append_hf("Contact: $var(new_contact)\r\n");
xlog("L_INFO", "New Contact added: $var(new_contact)\n");

补充说明

  • 如果需要处理多个Contact头的场景,可以用$(hdr(Contact)[n])(n从0开始)遍历每个头,逐个保存、处理后再添加回去
  • 日志验证优先使用已保存的变量值,避免依赖$hdr()的实时返回值,减少缓存干扰

内容的提问来源于stack exchange,提问作者Antoine Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:05:14