4

最初に私の問題を説明しましょう。テレフォニー アプリケーションに Sofia SIP を使用していますが、使用している SIP プロキシは NAT の背後にあります。これは、プロキシからの着信招待が Contact ヘッダーとして内部プロキシ IP (10.0.0.1 など) を持つことを意味します。これは、アプリケーションから電話を切ると、Sofia が BYE メッセージの宛先として IP 10.0.0.1 を自動的に設定することを意味します。

そこで、BYE メッセージの宛先を「外部」プロキシ IP アドレスに変更したいと思います。問題は、Sofia が SIP メッセージの宛先を変更することを許可していないように見えることです。INVITE を受信したときに取得した連絡先を常に使用します。これが私が試したことです:

  1. 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 宛てでした。

  1. ハードコードされた値を 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());

これは効果がありませんでした。

  1. SIPTAG_REQUEST_STR にハードコードされた値を適用する:

    nua_bye(op->op_handle, SIPTAG_REQUEST_STR("BYE sip:alice@54.15.123.11 SIP/2.0"), TAG_END());

これは効果がありませんでした。

  1. 同じことをしましたが、トランザクション ハンドルを介して:

    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 と混在させるのは非常に難しいようです。

どんなアイデアでも大歓迎です

よろしくお願いします、

アントニス

4

1 に答える 1

2

BYE はダイアログ内のリクエストであるため、Route ヘッダーが存在する場合はそれに従う必要があります。私はソフィアについて漠然としか知りませんが、INVITE が実際に受信された IP:port をあなたの側のルートセットに追加し、将来のダイアログ内リクエストを送信するときにそれをルート ヘッダーのリストに追加した場合、ソフィアはルーティングする必要があります最初に Route ヘッダー、次に RURI (通常は相手側の Contact から派生) によって。

于 2015-08-01T18:03:12.370 に答える