libjuice ( JUICE é uma biblioteca de estabelecimento de conectividade interativa UDP ) permite abrir fluxos bidirecionais de User Datagram Protocol (UDP) com travessia de Network Address Translator (NAT).
A biblioteca é uma implementação simplificada do protocolo Interactive Connectivity Establishment (ICE), do lado do cliente e do lado do servidor, escrito em C sem dependências para plataformas POSIX (incluindo GNU/Linux, Android, Apple macOS e iOS) e Microsoft Windows. O cliente suporta apenas um único componente sobre UDP por sessão em uma topologia de rede padrão de gateway único, pois isso deve ser suficiente para a maioria dos casos de uso atualmente.
libjuice está licenciado sob MPL 2.0, consulte LICENÇA.
libjuice está disponível em AUR e vcpkg. Vinculações estão disponíveis para Rust.
Para um aplicativo de servidor STUN/TURN baseado em libjuice, consulte Violet.
A biblioteca implementa um agente ICE completo simplificado (RFC5245 e depois RFC8445) apresentando:
Protocolo STUN (RFC5389 e depois RFC8489)
Retransmissão TURN (RFC5766 e depois RFC8656)
Frescura do consentimento ICE (RFC7675)
ICE aguardando pacientemente a conectividade (RFC 8863)
Interface baseada em SDP (RFC8839)
Suporte para pilha dupla IPv4 e IPv6
Multiplexação opcional em uma única porta UDP
As limitações em comparação com um agente ICE completo são:
Apenas o UDP é suportado como protocolo de transporte e outros protocolos são ignorados.
Apenas um componente é suportado, o que é suficiente para canais de dados WebRTC e RTP+RTCP multiplexados.
Os candidatos são reunidos sem vinculação a cada interface de rede, que se comporta de forma idêntica à implementação completa na maioria dos sistemas clientes.
Ele também implementa um servidor STUN/TURN leve (RFC8489 e RFC8656). O servidor pode ser desabilitado em tempo de compilação com o sinalizador NO_SERVER
.
Nenhum!
Opcionalmente, o Nettle pode fornecer algoritmos SHA1 e SHA256 em vez da implementação interna.
$ git clone https://github.com/paullouisageneau/libjuice.git $cd libjuice
A biblioteca CMake tem como alvo libjuice
e libjuice-static
respectivamente, correspondendo às bibliotecas compartilhadas e estáticas. O destino padrão construirá a biblioteca e os testes. Ele exporta os destinos com namespace LibJuice::LibJuice
e LibJuice::LibJuiceStatic
para vincular a biblioteca de outro projeto CMake.
$ cmake -B compilação $cd compilação $faça-j2
A opção USE_NETTLE
permite utilizar a biblioteca Nettle em vez da implementação interna do HMAC-SHA1:
$ cmake -B compilação -DUSE_NETTLE=1 $cd compilação $faça-j2
$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake # substitua pelo arquivo do conjunto de ferramentas$ cd build $faça-j2
$ cmake -B build -G "NMake Makefiles"$ cd build $nmake
$ fazer
A opção USE_NETTLE
permite utilizar a biblioteca Nettle em vez da implementação interna do HMAC-SHA1:
$façaUSE_NETTLE=1
Consulte test/connectivity.c para obter um exemplo completo de conexão local.
Consulte test/server.c para obter um exemplo de servidor.