Kamailio移除回复中的头信息

我正在处理一个需要发送 302 回复的项目。一切似乎都很正常,但我无法删除某些头信息,例如 From、Contact 等等(我不想完全删除它们,而是用自己版本的替换它们)。我使用带有Lua的 KEMI 来做到这一点:

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。就我而言,有三个头信息在处理中:

  • From (类型 4)
  • Contact (类型 7)
  • 其他 (类型 0)

所以我的问题是,为什么该功能硬编码为仅接受“其他”头信息,而不是其他头信息,例如“From”和“Contact”?这是为了防止破坏 SIP 请求(意外删除必需的头信息)吗?

作为一个后续问题,是否可能从回复信息中删除“From”和“Contact”?

原文链接 https://stackoverflow.com/questions/70192532

点赞
stackoverflow用户1743975
stackoverflow用户1743975

我假设302是由Kamailio生成的,那么从传入请求中复制了几个头文件,例如From、To、Call-Id、CSeq。因此,如果你希望在生成的回复中使用不同的From,请在请求中进行更改,然后执行**msg_apply_changes()**。

用于重定向(3xx)回复的Contact头文件是从请求的目标集合中生成的(修改后的R-URI以及可以通过**append_branch()lookup("location")**等创建的分支)。

可以使用**append_to_reply()**向生成的回复添加更多的头文件。

需要注意的是,我在原生的kamailio.cfg文件中给出了函数的名称,但是你也可以在Kemi中找到它们(由核心或textops、textopsx模块导出)。

2022-01-12 16:35:19