libjuice ( JUICE ist eine UDP Interactive Connectivity Establishment-Bibliothek ) ermöglicht das Öffnen bidirektionaler User Datagram Protocol (UDP)-Streams mit Network Address Translator (NAT)-Traversal.
Die Bibliothek ist eine vereinfachte Implementierung des Interactive Connectivity Establishment (ICE)-Protokolls, clientseitig und serverseitig, geschrieben in C ohne Abhängigkeiten für POSIX-Plattformen (einschließlich GNU/Linux, Android, Apple macOS und iOS) und Microsoft Windows. Der Client unterstützt nur eine einzige Komponente über UDP pro Sitzung in einer Standard-Single-Gateway-Netzwerktopologie, da dies heutzutage für die meisten Anwendungsfälle ausreichen sollte.
libjuice ist unter MPL 2.0 lizenziert, siehe LIZENZ.
libjuice ist auf AUR und vcpkg verfügbar. Bindungen sind für Rust verfügbar.
Informationen zu einer STUN/TURN-Serveranwendung basierend auf libjuice finden Sie unter Violet.
Die Bibliothek implementiert einen vereinfachten vollständigen ICE-Agenten (RFC5245, dann RFC8445) mit:
STUN-Protokoll (RFC5389, dann RFC8489)
TURN-Weiterleitung (RFC5766, dann RFC8656)
Frische der ICE-Zustimmung (RFC7675)
ICE wartet geduldig auf Konnektivität (RFC 8863)
SDP-basierte Schnittstelle (RFC8839)
IPv4- und IPv6-Dual-Stack-Unterstützung
Optionales Multiplexing auf einem einzelnen UDP-Port
Die Einschränkungen im Vergleich zu einem voll ausgestatteten ICE-Agenten sind:
Als Transportprotokoll wird nur UDP unterstützt, andere Protokolle werden ignoriert.
Es wird nur eine Komponente unterstützt, was für WebRTC-Datenkanäle und gemultiplextes RTP+RTCP ausreichend ist.
Kandidaten werden ohne Bindung an jede Netzwerkschnittstelle gesammelt, was sich auf den meisten Client-Systemen identisch mit der vollständigen Implementierung verhält.
Es implementiert auch einen einfachen STUN/TURN-Server (RFC8489 und RFC8656). Der Server kann zur Kompilierungszeit mit dem Flag NO_SERVER
deaktiviert werden.
Keiner!
Optional kann Nettle anstelle der internen Implementierung SHA1- und SHA256-Algorithmen bereitstellen.
$ Git-Klon https://github.com/paullouisageneau/libjuice.git $ cd libjuice
Die CMake-Bibliotheksziele libjuice
und libjuice-static
entsprechen jeweils den gemeinsam genutzten und statischen Bibliotheken. Das Standardziel erstellt die Bibliothek und testet. Es exportiert die Ziele mit den Namensräumen LibJuice::LibJuice
und LibJuice::LibJuiceStatic
um die Bibliothek aus einem anderen CMake-Projekt zu verknüpfen.
$ cmake -B Build $ cd bauen $ make -j2
Die Option USE_NETTLE
ermöglicht die Verwendung der Nettle-Bibliothek anstelle der internen Implementierung für HMAC-SHA1:
$ cmake -B build -DUSE_NETTLE=1 $ cd bauen $ make -j2
$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake # durch Ihre Toolchain-Datei ersetzen$ cd build $ make -j2
$ cmake -B build -G "NMake Makefiles"$ cd build $ nmake
$ machen
Die Option USE_NETTLE
ermöglicht die Verwendung der Nettle-Bibliothek anstelle der internen Implementierung für HMAC-SHA1:
$ make USE_NETTLE=1
Ein vollständiges lokales Verbindungsbeispiel finden Sie unter test/connectivity.c.
Ein Serverbeispiel finden Sie unter test/server.c.