当前的IP地址发生变化时,如何更新sofia?

时间:2017-01-11 13:34:33

标签: c voip sofia-sip

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

当我执行我的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吗?

谢谢。

0 个答案:

没有答案