0

我使用 sofia 库并基于 sofia-sip 客户端示例在 C 中开发了一个小型 voip 客户端应用程序。Evertyhing 工作正常,但有一件事,如果我的 IP 地址在应用程序运行后发生更改,sofia 不会自行更新。我自己解释一下:

当我执行我的 voip 应用程序(在 Linux 中运行)时,sofia 会获取当前的 IP 地址,并且该应用程序将接受对该地址的所有传入呼叫。

如果运行应用程序的设备的 IP 发生更改(更新 Linux 的网络配置),我无法更新 sofia 以使用新的 ip,因此不会收到任何来电。

我尝试过使用 ssc_set_public_address,它会更新 ssc_address 并使用 nua_set_params 在 nua 中设置新值:

/**
* Sets the public address used for invites, messages,
* registrations, etc method.
*/
void ssc_set_public_address(ssc_t *ssc, const char *address)
{
  if (address) {
    su_free(ssc->ssc_home, ssc->ssc_address);
    ssc->ssc_address = su_strdup(ssc->ssc_home, address);

    nua_set_params(ssc->ssc_nua,
    SIPTAG_FROM_STR(ssc->ssc_address),
    TAG_NULL());
  }
}

完成后,内部 IP 地址似乎已更改(如果我使用 get_params 读取它,我会得到新的),但是由于不会收到来电,因此遗漏了一些东西。

为了使用新 IP ,我需要重新启动整个应用程序

有谁知道如何在不重新启动应用程序的情况下真正更新 sofia IP?

谢谢你。

4

0 回答 0