1

Resiprocate SIP スタックを使用して C++ で SIP プロキシを実装する必要があります。プロキシは常に UAC と UAS の間に位置し、着信 SIP 要求と応答を双方向に転送する必要があります。

SIP プロトコルに関する私の読み物/理解によると、SIP プロキシが UAC と UAS の間に入りたい場合、受信している SIP メッセージのルート フィールドに SIP アドレスを挿入する必要があります。私のプロキシ実装で着信 SIP メッセージのルート フィールドを追加/操作する方法を誰か教えてもらえますか? より正確に知る必要があるのは、どのヘッダー ファイル/クラス/ハンドル関数を参照する必要があるかということです。私はSIPに慣れていないので、ソースコードで迷子になりました。前もって感謝します。

PS: なぜ resiprocate 独自のプロキシ実装を使用しないのか不思議に思うかもしれません。これは、SIP スタック API 自体を使用するだけで、特別なニーズに対応する軽量のプロトタイプを開発する必要があるためです。プロトタイプは、SIP トラフィックのフォワーダーとして機能するだけで、それ以上のものではありません。

4

1 に答える 1

1

以下は、else ブロックでジョブを実行します。

  void insertRouteField(SipMessage * received)
        {
          ErrLog ( << "***********************************\n");
          NameAddr& to = received->header(h_To);
          ErrLog ( << "To Field: " << to.uri().toString());

          NameAddr& from = received->header(h_From);
          ErrLog ( << "From Field: " << from.uri().toString() );

          ParserContainer<NameAddr>& rRoutes = received->header(h_RecordRoutes);
          if(!rRoutes.empty())
          {
              NameAddr& frontRRoute = rRoutes.front();
              ErrLog ( << "rRoutes: " << frontRRoute.uri().toString());

              ErrLog ( << "***********************************\n");
          }
          else
          {
              NameAddr route;
              route.uri().scheme() = "sip";
              route.uri().user() = "proxy";
              route.uri().host() = SipStack::getHostname();
              route.uri().port() = 5070;
              route.uri().param(p_transport) = Tuple::toData(mTransport);
              rRoutes.push_front(route);

              NameAddr& frontRRoute = rRoutes.front();
              ErrLog ( << "rRoute: " << frontRRoute.uri().toString());
              ErrLog ( << "***********************************");
          } 

        }

あなたが見たいと思うかもしれないヘッダーファイラー: " "rutil/ThreadIf.hxx" "resip/stack/ParserContainer.hxx"

于 2012-10-08T14:30:59.777 に答える