All Projects → paullouisageneau → libjuice

paullouisageneau / libjuice

Licence: LGPL-2.1 license
JUICE is a UDP Interactive Connectivity Establishment library

Programming Languages

c
50402 projects - #5 most used programming language
CMake
9771 projects
Makefile
30231 projects

Projects that are alternatives of or similar to libjuice

violet
Lightweight STUN/TURN server
Stars: ✭ 112 (-43.15%)
Mutual labels:  stun, rfc-5389, ice, rfc-5766, rfc-8489, rfc-8656
mystery
WebRTC Server implemented by ❤️ Rust + Node.js.
Stars: ✭ 150 (-23.86%)
Mutual labels:  stun, sdp, ice
kvazzup
Open software for HEVC video calls
Stars: ✭ 30 (-84.77%)
Mutual labels:  sip, sdp, ice
Stun
A Go implementation of STUN
Stars: ✭ 141 (-28.43%)
Mutual labels:  sip, peer-to-peer, ice
Gnb
GNB is open source de-centralized VPN to achieve layer3 network via p2p with the ultimate capability of NAT Traversal.GNB是一个开源的去中心化的具有极致内网穿透能力的通过P2P进行三层网络交换的VPN。
Stars: ✭ 225 (+14.21%)
Mutual labels:  udp, nat-traversal
Rnl
RNL - Realtime Network Library - The opensource reliable UDP network library
Stars: ✭ 59 (-70.05%)
Mutual labels:  udp, peer-to-peer
go-sip-ua
Go SIP UA library for client/b2bua
Stars: ✭ 129 (-34.52%)
Mutual labels:  sip, sdp
SentryPeer
A distributed peer to peer list of bad actor IP addresses and phone numbers collected via a SIP Honeypot.
Stars: ✭ 108 (-45.18%)
Mutual labels:  sip, peer-to-peer
sdp
A Go implementation of the SDP
Stars: ✭ 89 (-54.82%)
Mutual labels:  sip, sdp
Re
Generic library for real-time communications with async IO support
Stars: ✭ 444 (+125.38%)
Mutual labels:  sip, ice
Pjproject
PJSIP project
Stars: ✭ 786 (+298.98%)
Mutual labels:  sip, nat-traversal
Libzt
ZeroTier Sockets - Put a network stack in your app
Stars: ✭ 486 (+146.7%)
Mutual labels:  udp, peer-to-peer
opengnb
GNB is open source de-centralized VPN to achieve layer3 network via p2p with the ultimate capability of NAT Traversal.GNB是一个开源的去中心化的具有极致内网穿透能力的通过P2P进行三层网络交换的VPN。
Stars: ✭ 440 (+123.35%)
Mutual labels:  udp, nat-traversal
Ejabberd
Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server)
Stars: ✭ 5,077 (+2477.16%)
Mutual labels:  sip, stun
ministun
A zero dependency STUN server
Stars: ✭ 26 (-86.8%)
Mutual labels:  stun, rfc-5389
Ice
WIP RFC 8445 ICE implementation in go
Stars: ✭ 95 (-51.78%)
Mutual labels:  nat-traversal, ice
Ice4j
A Java implementation of the ICE protocol
Stars: ✭ 332 (+68.53%)
Mutual labels:  nat-traversal, ice
Ice
A Go implementation of ICE
Stars: ✭ 114 (-42.13%)
Mutual labels:  peer-to-peer, ice
Sipsorcery
A WebRTC, SIP and VoIP library for C# and .NET Core. Designed for real-time communications apps.
Stars: ✭ 449 (+127.92%)
Mutual labels:  sip, ice
Mts
Project of Multi-protocol Test Tool opensourced by Ericsson
Stars: ✭ 34 (-82.74%)
Mutual labels:  sip, udp

libjuice - UDP Interactive Connectivity Establishment

License: LGPL v2.1 or later Build and test Gitter Discord AUR package Vcpkg package

libjuice 🍋💦 (JUICE is a UDP Interactive Connectivity Establishment library) allows to open bidirectionnal User Datagram Protocol (UDP) streams with Network Address Translator (NAT) traversal.

The library is a simplified implementation of the Interactive Connectivity Establishment (ICE) protocol, client-side and server-side, written in C without dependencies for POSIX platforms (including GNU/Linux, Android, Apple macOS and iOS) and Microsoft Windows. The client 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.

libjuice is licensed under LGPLv2.1 or later, see LICENSE.

libjuice is available on AUR and vcpkg. Bindings are available for Rust.

For a STUN/TURN server application based on libjuice, see Violet.

Compatibility

The library implements a simplified but fully compatible ICE agent (RFC5245 then RFC8445) featuring:

  • STUN protocol (RFC5389 then RFC8489)
  • TURN relaying (RFC5766 then RFC8656)
  • SDP-based interface (RFC8839)
  • IPv4 and IPv6 dual-stack support
  • Optional multiplexing on a single UDP port

The limitations compared to a fully-featured ICE agent are:

  • Only UDP is supported as transport protocol and other protocols are ignored.
  • Only one component is supported, which is sufficient for WebRTC Data Channels and multiplexed RTP+RTCP.
  • Candidates are gathered without binding to each network interface, which behaves identically to the full implementation on most client systems.

It also implements a lightweight STUN/TURN server (RFC8489 and RFC8656). The server can be disabled at compile-time with the NO_SERVER flag.

Dependencies

None!

Optionally, Nettle can provide SHA1 and SHA256 algorithms instead of the internal implementation.

Building

Clone repository

$ git clone https://github.com/paullouisageneau/libjuice.git
$ cd libjuice

Build with CMake

The CMake library targets libjuice and libjuice-static respectively correspond to the shared and static libraries. The default target will build the library and tests. It exports the targets with namespace LibJuice::LibJuice and LibJuice::LibJuiceStatic to link the library from another CMake project.

POSIX-compliant operating systems (including Linux and Apple macOS)

$ cmake -B build
$ cd build
$ make -j2

The option USE_NETTLE allows to use the Nettle library instead of the internal implementation for HMAC-SHA1:

$ cmake -B build -DUSE_NETTLE=1
$ cd build
$ make -j2

Microsoft Windows with MinGW cross-compilation

$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake # replace with your toolchain file
$ cd build
$ make -j2

Microsoft Windows with Microsoft Visual C++

$ cmake -B build -G "NMake Makefiles"
$ cd build
$ nmake

Build directly with Make (Linux only)

$ make

The option USE_NETTLE allows to use the Nettle library instead of the internal implementation for HMAC-SHA1:

$ make USE_NETTLE=1

Example

See test/connectivity.c for a complete local connection example.

See test/server.c for a server example.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].