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