libjuice ( JUICE は UDP インタラクティブ接続確立ライブラリです) を使用すると、ネットワーク アドレス トランスレータ (NAT) トラバーサルを使用して双方向のユーザー データグラム プロトコル (UDP) ストリームを開くことができます。
このライブラリは、クライアント側とサーバー側の対話型接続確立 (ICE) プロトコルの簡略化された実装であり、POSIX プラットフォーム (GNU/Linux、Android、Apple macOS、iOS を含む) および Microsoft Windows に依存することなく C で書かれています。現在のほとんどのユースケースではこれで十分であるため、クライアントは標準の単一ゲートウェイ ネットワーク トポロジでセッションごとに UDP 経由で 1 つのコンポーネントのみをサポートします。
libjuice は MPL 2.0 に基づいてライセンスされています。「ライセンス」を参照してください。
libjuice は AUR および vcpkg で利用できます。 Rust ではバインディングが利用可能です。
libjuice に基づく STUN/TURN サーバー アプリケーションについては、「Violet」を参照してください。
このライブラリは、次の機能を備えた簡素化された完全な ICE エージェント (RFC5245 から RFC8445) を実装します。
STUN プロトコル (RFC5389 の後に RFC8489)
TURN リレー (RFC5766、その後 RFC8656)
ICE 同意の鮮度 (RFC7675)
ICE 接続を辛抱強く待機する (RFC 8863)
SDPベースのインターフェース(RFC8839)
IPv4 および IPv6 デュアルスタックのサポート
単一の UDP ポートでのオプションの多重化
フル機能を備えた ICE エージェントと比較した制限は次のとおりです。
トランスポート プロトコルとして UDP のみがサポートされ、他のプロトコルは無視されます。
サポートされているコンポーネントは 1 つだけであり、WebRTC データ チャネルおよび多重化された RTP+RTCP にはこれで十分です。
候補は各ネットワーク インターフェイスにバインドせずに収集され、ほとんどのクライアント システムでの完全な実装と同じように動作します。
また、軽量の STUN/TURN サーバー (RFC8489 および RFC8656) も実装されています。 NO_SERVER
フラグを使用すると、コンパイル時にサーバーを無効にすることができます。
なし!
オプションで、Nettle は内部実装の代わりに SHA1 および SHA256 アルゴリズムを提供できます。
$ git クローン https://github.com/paullouisageneau/libjuice.git $ cd リブジュース
CMake ライブラリのターゲットlibjuice
とlibjuice-static
、それぞれ共有ライブラリと静的ライブラリに対応します。デフォルトのターゲットはライブラリとテストをビルドします。名前空間LibJuice::LibJuice
およびLibJuice::LibJuiceStatic
を使用してターゲットをエクスポートし、別の CMake プロジェクトからライブラリをリンクします。
$ cmake -B ビルド $ cd ビルド $ make -j2
オプションUSE_NETTLE
使用すると、HMAC-SHA1 の内部実装の代わりに Nettle ライブラリを使用できます。
$ cmake -B build -DUSE_NETTLE=1 $ cd ビルド $ make -j2
$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake # ツールチェーン ファイルに置き換えます$ cd build $ make -j2
$ cmake -B build -G "NMake Makefiles"$ cd build $nmake
$メイク
オプションUSE_NETTLE
使用すると、HMAC-SHA1 の内部実装の代わりに Nettle ライブラリを使用できます。
$ USE_NETTLE=1 にする
完全なローカル接続の例については、test/connectivity.c を参照してください。
サーバーの例については、test/server.c を参照してください。