我使用 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?
谢谢你。