sofia ライブラリを使用し、sofia-sip クライアントの例に基づいて、C で小さな voip クライアント アプリケーションを開発しました。Evertyhing は問題なく動作しますが、アプリケーションの実行中に IP アドレスが変更されると、sofia 自体が更新されません。私は自分自身を説明します:
voip アプリケーション (Linux で実行) を実行すると、sofia は現在の IP アドレスを取得し、アプリケーションはそのアドレスへのすべての着信呼び出しを受け入れます。
アプリケーションが実行されているデバイスの IP が変更された場合 (Linux のネットワーク構成の更新) 、新しい ip で動作するように sofia を更新できないため、着信コールが受信されません。
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を使用するには、アプリケーション全体を再起動する必要があります。
アプリケーションを再起動せずにソフィア IP を実際に更新する方法を知っている人はいますか?
ありがとうございました。