libjuice( JUICE 是一個 UDP 互動式連線建立函式庫)允許透過網路位址轉換器 (NAT) 遍歷開啟雙向使用者資料報協定 (UDP) 流。
該程式庫是互動式連接建立 (ICE) 協定、用戶端和伺服器端的簡化實現,以 C 語言編寫,不依賴 POSIX 平台(包括 GNU/Linux、Android、Apple macOS 和 iOS)和 Microsoft Windows。在標準單網關網路拓撲中,客戶端僅支援每個會話通過 UDP 的單一元件,因為這對於當今的大多數用例來說應該足夠了。
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 作為傳輸協議,其他協定將被忽略。
僅支援一個元件,足以支援 WebRTC 資料通道和復用 RTP+RTCP。
候選者的收集無需綁定到每個網路接口,其行為與大多數客戶端系統上的完整實現相同。
它還實作了輕量級 STUN/TURN 伺服器(RFC8489 和 RFC8656)。可以在編譯時使用NO_SERVER
標誌來停用伺服器。
沒有任何!
Nettle 可以選擇提供 SHA1 和 SHA256 演算法而不是內部實作。
$ git 克隆 https://github.com/paullouisageneau/libjuice.git $ cd libjuice
CMake 庫目標libjuice
和libjuice-static
分別對應於共享庫和靜態庫。預設目標將建置庫和測試。它使用名稱空間LibJuice::LibJuice
和LibJuice::LibJuiceStatic
匯出目標,以連結來自另一個 CMake 專案的庫。
$ cmake -B 構建 $ cd 構建 $ 使-j2
選項USE_NETTLE
允許使用 Nettle 函式庫而不是 HMAC-SHA1 的內部實作:
$ cmake -B 建置 -DUSE_NETTLE=1 $ cd 構建 $ 使-j2
$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake # 替換為您的工具鏈檔案$ cd build $ 使-j2
$ cmake -B build -G "NMake Makefiles"$ cd build $ nmake
$ 製作
選項USE_NETTLE
允許使用 Nettle 函式庫而不是 HMAC-SHA1 的內部實作:
$使USE_NETTLE=1
有關完整的本地連線範例,請參閱 test/connectivity.c。
有關伺服器範例,請參閱 test/server.c。