gpt4 book ai didi

sip - 如何在 Sofia SIP 中更改 SIP BYE 消息的目的地

转载 作者:行者123 更新时间:2023-12-04 14:22:18 25 4
gpt4 key购买 nike

让我先描述一下我的问题。我将 Sofia SIP 用于电话应用程序,而我使用的 SIP 代理位于 NAT 后面。这意味着来自代理的传入邀请将内部代理 IP(例如 10.0.0.1)作为 Contact header 。这意味着当我从我的应用程序挂断电话时,Sofia 会自动将 IP 10.0.0.1 设置为 BYE 消息的目的地,正如您想象的那样,它是不可路由的,因此它失败了。

所以我想要做的是将 BYE 消息的目的地更改为“外部”代理 IP 地址。问题是 Sofia 似乎不允许我更改 SIP 消息的目的地;它总是使用收到 INVITE 时获得的联系方式。这是我尝试过的:

  • 为 SIPTAG_TO 强制执行硬编码值:

    nua_bye(op->op_handle,
    SIPTAG_TO(sip_to_make(ssc->ssc_home, "sip:alice@54.15.123.11")),
    TAG_END());

  • 这样做的结果是 To header 已使用外部 ip 更新,但 SIP 消息仍以内部代理 ip 为目标
  • 对 NUTAG_URL 强制执行硬编码值:

    sip_to_t * to = sip_to_make(ssc->ssc_home, "sip:alice@54.15.123.11");

    ua_bye(op->op_handle,
    NUTAG_URL(to->a_url),
    TAG_END());

  • 这没有效果。
  • 为 SIPTAG_REQUEST_STR 强制执行硬编码值:

    nua_bye(op->op_handle,
    SIPTAG_REQUEST_STR("再见sip:alice@54.15.123.11 SIP/2.0"),
    TAG_END());

  • 这没有效果。
  • 做了同样的事情,但通过事务句柄:

    nua_set_hparams(op->op_handle,SIPTAG_REQUEST_STR("再见sip:alice@54.15.123.11 SIP/2.0"), TAG_NULL());

    nua_bye(op->op_handle, TAG_END());

  • 又没效果

    然后我想到当传入的 INVITE 从代理到达时更早一点,可能会改变联系人,因为这是发送后续 BYE 的地方,但再次没有运气:尝试通过 nua_set_hparams 更新它对全局没有影响参数与 nua_set_params。

    似乎我想要做的很简单(考虑到那里的 NAT 配置是必要的),但好像 Sofia 明确禁止它(如果您检查 nua_bye 文档,则没有任何相关的 TAGS 记录)。

    我还考虑过使用 Sofia 的一种较低级别的 API,例如 NTA(而不是 NUA),但是将 NUA 与任何较低级别的 API 混合使用似乎非常困难。

    任何想法都非常受欢迎

    此致,

    安东尼斯

    最佳答案

    BYE 是对话中的请求,因此它应该遵循 Route header (如果存在)。我对 Sofia 只是模糊地熟悉,但是如果你添加了 IP:port,INVITE 实际上是从你这边的路由集收到的,并在你发送 future 的对话请求时将它添加到路由 header 列表中,Sofia 应该路由首先是 Route 头,然后是 RURI(通常是从对方的 Contact 派生出来的)。

    关于sip - 如何在 Sofia SIP 中更改 SIP BYE 消息的目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31533924/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com