libjuice ( JUICE es una biblioteca de establecimiento de conectividad interactiva UDP ) permite abrir transmisiones bidireccionales del Protocolo de datagramas de usuario (UDP) con recorrido del Traductor de direcciones de red (NAT).
La biblioteca es una implementación simplificada del protocolo Interactive Connectivity Establishment (ICE), del lado del cliente y del servidor, escrita en C sin dependencias para plataformas POSIX (incluidas GNU/Linux, Android, Apple macOS e iOS) y Microsoft Windows. El cliente admite solo un componente a través de UDP por sesión en una topología de red estándar de puerta de enlace única, ya que esto debería ser suficiente para la mayoría de los casos de uso hoy en día.
libjuice tiene licencia MPL 2.0, consulte LICENCIA.
libjuice está disponible en AUR y vcpkg. Hay fijaciones disponibles para Rust.
Para una aplicación de servidor STUN/TURN basada en libjuice, consulte Violet.
La biblioteca implementa un agente ICE completo simplificado (RFC5245 y luego RFC8445) que incluye:
Protocolo STUN (RFC5389 y luego RFC8489)
Retransmisión TURN (RFC5766 y luego RFC8656)
Frescura del consentimiento ICE (RFC7675)
ICE espera pacientemente la conectividad (RFC 8863)
Interfaz basada en SDP (RFC8839)
Compatibilidad con doble pila IPv4 e IPv6
Multiplexación opcional en un único puerto UDP
Las limitaciones en comparación con un agente ICE con todas las funciones son:
Sólo se admite UDP como protocolo de transporte y se ignoran otros protocolos.
Solo se admite un componente, que es suficiente para canales de datos WebRTC y RTP+RTCP multiplexado.
Los candidatos se reúnen sin vincularse a cada interfaz de red, lo que se comporta de manera idéntica a la implementación completa en la mayoría de los sistemas cliente.
También implementa un servidor STUN/TURN liviano (RFC8489 y RFC8656). El servidor se puede desactivar en tiempo de compilación con el indicador NO_SERVER
.
¡Ninguno!
Opcionalmente, Nettle puede proporcionar algoritmos SHA1 y SHA256 en lugar de la implementación interna.
$ git clon https://github.com/paullouisageneau/libjuice.git $ cd libjugo
Los destinos de la biblioteca CMake libjuice
y libjuice-static
corresponden respectivamente a las bibliotecas compartidas y estáticas. El objetivo predeterminado construirá la biblioteca y las pruebas. Exporta los objetivos con el espacio de nombres LibJuice::LibJuice
y LibJuice::LibJuiceStatic
para vincular la biblioteca desde otro proyecto de CMake.
$ cmake -B construir $ cd construir $ hacer -j2
La opción USE_NETTLE
permite utilizar la biblioteca Nettle en lugar de la implementación interna para HMAC-SHA1:
$ cmake -B construir -DUSE_NETTLE=1 $ cd construir $ hacer -j2
$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake # reemplaza con tu archivo de cadena de herramientas$ cd build $ hacer -j2
$ cmake -B build -G "NMake Makefiles"$ cd build $ nhacer
$ hacer
La opción USE_NETTLE
permite utilizar la biblioteca Nettle en lugar de la implementación interna para HMAC-SHA1:
$ hacer USE_NETTLE=1
Consulte test/connectivity.c para ver un ejemplo completo de conexión local.
Consulte test/server.c para ver un ejemplo de servidor.