【问题标题】:Kamailio removing headers from replyKamailio 从回复中删除标题
【发布时间】: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 标头,而不采用其他标头,即 FromContact?这是为了防止破坏 SIP 请求(无意中删除所需的标头)?

作为后续问题,是否可以从回复消息中删除 FromContact

【问题讨论】:

  • From 根本不是要被删除的,它是用来用 from-tag 来标识对话框的。理论上可以删除联系人,但应将其替换为有效的联系人标题。毕竟重定向 302 的目的是使用联系人字段提供新的目标 uri。你能准确地说你想做什么吗?即使无法删除和联系,也可以修改标题。

标签: c lua header sip kamailio


【解决方案1】:

我假设 302 是由 Kamailio 生成的,然后从传入请求中复制几个标头,例如 From、To、Call-Id、CSeq。因此,如果您想在生成的回复中使用不同的 From,请在请求中更改它,然后执行 msg_apply_changes()

重定向 (3xx) 回复的联系人标头是从请求的目标集生成的(修改后的 R-URI 和可以通过 append_branch()lookup("location ") 等)。

可以使用 append_to_reply() 将更多标题添加到生成的回复中。

请注意,我给出了本机 kamailio.cfg 的函数名称,但您也可以发现它们也导出到 Kemi(通过 core 或 textops、textopsx 模块)。

【讨论】:

    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 2011-01-25
    • 2014-02-28
    • 2013-07-13
    • 2017-10-24
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多