最初に私の問題を説明しましょう。テレフォニー アプリケーションに Sofia SIP を使用していますが、使用している SIP プロキシは NAT の背後にあります。これは、プロキシからの着信招待が Contact ヘッダーとして内部プロキシ IP (10.0.0.1 など) を持つことを意味します。これは、アプリケーションから電話を切ると、Sofia が BYE メッセージの宛先として IP 10.0.0.1 を自動的に設定することを意味します。
そこで、BYE メッセージの宛先を「外部」プロキシ IP アドレスに変更したいと思います。問題は、Sofia が SIP メッセージの宛先を変更することを許可していないように見えることです。INVITE を受信したときに取得した連絡先を常に使用します。これが私が試したことです:
SIPTAG_TO にハードコードされた値を強制する:
nua_bye(op->op_handle, SIPTAG_TO(sip_to_make(ssc->ssc_home, "sip:alice@54.15.123.11")), TAG_END());
この結果、To ヘッダーは外部 IP で更新されましたが、SIP メッセージは依然として内部プロキシ IP 宛てでした。
ハードコードされた値を NUTAG_URL に適用:
sip_to_t * to = sip_to_make(ssc->ssc_home, "sip:alice@54.15.123.11");
ua_bye(op->op_handle, NUTAG_URL(to->a_url), TAG_END());
これは効果がありませんでした。
SIPTAG_REQUEST_STR にハードコードされた値を適用する:
nua_bye(op->op_handle, SIPTAG_REQUEST_STR("BYE sip:alice@54.15.123.11 SIP/2.0"), TAG_END());
これは効果がありませんでした。
同じことをしましたが、トランザクション ハンドルを介して:
nua_set_hparams(op->op_handle,SIPTAG_REQUEST_STR("BYE sip:alice@54.15.123.11 SIP/2.0"), TAG_NULL());
nua_bye(op->op_handle, TAG_END());
やはり効果なし
次に、着信 INVITE がプロキシから到着したときに少し早く行って、連絡先を変更することを考えました。これは、後続の BYE が送信される場所であるためです。 nua_set_params を使用したパラメーター。
私がやりたいことは非常に単純なようです (そして、そこにある NAT 構成を考えると必要です) が、ソフィアが明確にそれを禁止しているように見えます (nua_bye ドキュメントを確認すると、関連するタグが文書化されていません)。
NTA (代わりに NUA) などの Sofia の低レベル API の 1 つを使用することも考えましたが、NUA を低レベル API と混在させるのは非常に難しいようです。
どんなアイデアでも大歓迎です
よろしくお願いします、
アントニス