【发布时间】:2022-01-08 12:52:01
【问题描述】:
我正在做一个项目,我需要发回302 回复。一切似乎都有效,除了我无法删除某些标题,即 From、Contact 等(我不想完全删除它们,而是用我自己的版本代替)。我使用 KEMI 和 Lua 来做到这一点:
KSR.hdr.remove("From")
正如我所提到的,这不起作用(而来自 hdr 的其他函数在相同的上下文中工作正常,即 KSR.hdr.append_to_reply(...)。
我决定查看 Kamailio 源代码,并在 kemi.c 文件中找到以下代码行:
int sr_kemi_hdr_remove(sip_msg_t *msg, str *hname)
{
...
anchor=del_lump(msg, hf->name.s - msg->buf, hf->len, 0);
if (anchor==0) {
LM_ERR("cannot remove hdr %.*s\n", hname->len, hname->s);
return -1;
}
}
return 1;
}
查看del_lump 采用的最后一个参数,它是_hdr_types_t 类型,它描述了不同标头类型的enum。现在,特别是对我来说,我正在使用三个标头:
- 从(类型 4)
- 联系方式(类型 7)
- 其他(类型 0)
所以我的问题是,为什么该函数被硬编码为仅采用 OTHER 标头,而不采用其他标头,即 From 和 Contact?这是为了防止破坏 SIP 请求(无意中删除所需的标头)?
作为后续问题,是否可以从回复消息中删除 From 和 Contact?
【问题讨论】:
-
From 根本不是要被删除的,它是用来用 from-tag 来标识对话框的。理论上可以删除联系人,但应将其替换为有效的联系人标题。毕竟重定向 302 的目的是使用联系人字段提供新的目标 uri。你能准确地说你想做什么吗?即使无法删除和联系,也可以修改标题。