libjuice - UDP Interactive Connectivity Establishment
The library is a simplified implementation of the Interactive Connectivity Establishment (ICE) in C99 for POSIX platforms. It supports only a single component over UDP per session in a standard single-gateway network topology, as this should be sufficient for the majority of use cases nowadays.
Licensed under LGPLv2, see LICENSE.
The limitations compared to a fully-featured ICE agent are:
- Only UDP is supported as transport protocol. Other protocols are ignored.
- Only one component is supported. This is sufficient for WebRTC Data Channels or multiplexed RTP/RTCP (RFC5731).
- Only the default gateway is used when gathering candidates. This should behave identically to the full implementation on most client systems and allows to greatly reduce complexity.
- Nettle (https://www.lysator.liu.se/~nisse/nettle/) or OpenSSL (https://www.openssl.org/) for HMAC-SHA1
- That's it!
Building with CMake (preferred)
$ mkdir build $ cd build $ cmake -DUSE_NETTLE=1 .. $ make
Building directly with Make
$ make USE_NETTLE=1
See test/main.c for a complete local connection example.