libjuice ( JUICE est une bibliothèque d'établissement de connectivité interactive UDP ) permet d'ouvrir des flux bidirectionnels UDP (User Datagram Protocol) avec une traversée Network Address Translator (NAT).
La bibliothèque est une implémentation simplifiée du protocole Interactive Connectivity establishment (ICE), côté client et côté serveur, écrite en C sans dépendances pour les plateformes POSIX (y compris GNU/Linux, Android, Apple macOS et iOS) et Microsoft Windows. Le client ne prend en charge qu'un seul composant sur UDP par session dans une topologie de réseau standard à passerelle unique, car cela devrait suffire pour la majorité des cas d'utilisation de nos jours.
libjuice est sous licence MPL 2.0, voir LICENCE.
libjuice est disponible sur AUR et vcpkg. Des liaisons sont disponibles pour Rust.
Pour une application serveur STUN/TURN basée sur libjuice, voir Violet.
La bibliothèque implémente un agent ICE complet simplifié (RFC5245 puis RFC8445) comprenant :
Protocole STUN (RFC5389 puis RFC8489)
Relais TURN (RFC5766 puis RFC8656)
Fraîcheur du consentement ICE (RFC7675)
ICE attend patiemment la connectivité (RFC 8863)
Interface basée sur SDP (RFC8839)
Prise en charge de la double pile IPv4 et IPv6
Multiplexage optionnel sur un seul port UDP
Les limitations par rapport à un agent ICE complet sont :
Seul UDP est pris en charge en tant que protocole de transport et les autres protocoles sont ignorés.
Un seul composant est pris en charge, ce qui est suffisant pour les canaux de données WebRTC et RTP+RTCP multiplexés.
Les candidats sont rassemblés sans liaison avec chaque interface réseau, qui se comporte de manière identique à l'implémentation complète sur la plupart des systèmes clients.
Il implémente également un serveur STUN/TURN léger (RFC8489 et RFC8656). Le serveur peut être désactivé au moment de la compilation avec l'indicateur NO_SERVER
.
Aucun!
En option, Nettle peut fournir les algorithmes SHA1 et SHA256 au lieu de l'implémentation interne.
$ git clone https://github.com/paullouisageneau/libjuice.git $ cd libjuice
Les cibles de la bibliothèque CMake libjuice
et libjuice-static
correspondent respectivement aux bibliothèques partagées et statiques. La cible par défaut construira la bibliothèque et les tests. Il exporte les cibles avec l'espace de noms LibJuice::LibJuice
et LibJuice::LibJuiceStatic
pour lier la bibliothèque d'un autre projet CMake.
$ cmake -B construire $ cd construire $ faire -j2
L'option USE_NETTLE
permet d'utiliser la bibliothèque Nettle à la place de l'implémentation interne pour HMAC-SHA1 :
$ cmake -B build -DUSE_NETTLE=1 $ cd construire $ faire -j2
$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake # remplacer par votre fichier de chaîne d'outils$ cd build $ faire -j2
$ cmake -B build -G "NMake Makefiles" $ cd build $ nfaire
$ faire
L'option USE_NETTLE
permet d'utiliser la bibliothèque Nettle à la place de l'implémentation interne pour HMAC-SHA1 :
$ faire USE_NETTLE=1
Voir test/connectivity.c pour un exemple complet de connexion locale.
Voir test/server.c pour un exemple de serveur.