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。