libjuice ( JUICE — это библиотека установления интерактивных соединений UDP ) позволяет открывать двунаправленные потоки протокола пользовательских дейтаграмм (UDP) с обходом транслятора сетевых адресов (NAT).
Библиотека представляет собой упрощенную реализацию протокола Interactive Connectivity Making (ICE) на стороне клиента и сервера, написанную на C без зависимостей для платформ POSIX (включая GNU/Linux, Android, Apple macOS и iOS) и Microsoft Windows. Клиент поддерживает только один компонент через UDP за сеанс в стандартной топологии сети с одним шлюзом, поскольку в настоящее время этого должно быть достаточно для большинства случаев использования.
libjuice распространяется под лицензией MPL 2.0, см. ЛИЦЕНЗИЮ.
libjuice доступен на AUR и vcpkg. Привязки доступны для Rust.
Информацию о серверном приложении STUN/TURN на основе libjuice см. в разделе 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 clone https://github.com/paullouisageneau/libjuice.git $ cd libjuice
Цели библиотеки CMake libjuice
и libjuice-static
соответственно соответствуют общим и статическим библиотекам. Цель по умолчанию будет собирать библиотеку и тесты. Он экспортирует целевые объекты с пространством имен LibJuice::LibJuice
и LibJuice::LibJuiceStatic
чтобы связать библиотеку с другим проектом CMake.
$ cmake -B сборка $ сборка компакт-диска $ сделать -j2
Опция USE_NETTLE
позволяет использовать библиотеку Nettle вместо внутренней реализации HMAC-SHA1:
$ cmake -B сборка -DUSE_NETTLE=1 $ сборка компакт-диска $ сделать -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 для примера сервера.