rust turnclient
A release to attach some pre-builts
Простой клиент Rust TURN (RFC 5766) для UDP - проходит даже строгий NAT; асинхронный только сейчас
<bonus>
Универсальный клиент/прокси TURN, позволяющий использовать TURN для пользовательских целей (вы предоставляете сценарии для сигнализации). В выпусках Github есть предварительно созданный исполняемый файл. </bonus>
.
Очищенный фрагмент примера эха:
let udp : tokio :: net :: UdpSocket ;
let c = turnclient :: TurnClientBuilder :: new ( turn_server , username , password ) ;
let ( turnsink , turnstream ) = c . build_and_send_request ( udp ) . split ( ) ;
turnstream . map ( move |event| {
Ok ( match event {
MessageFromTurnServer :: AllocationGranted { relay_address , .. } => {
MessageToTurnServer :: AddPermission ( peer_addr , ChannelUsage :: WithChannel )
} ,
MessageFromTurnServer :: RecvFrom ( sa , data ) => {
MessageToTurnServer :: SendTo ( sa , data )
} ,
_ => MessageToTurnServer :: Noop ,
} )
} ) . forward ( turnsink ) . await ;
Дополнительные инструкции см. в документации уровня крейта.
Не реализовано/TODO/минусы:
Box<dyn std::error::Error>
с использованием только текстовых строк.Vec<u8>
для байтовых буферов.Примеры:
echo.rs
— подключиться к указанному серверу TURN, авторизовать указанный узел и действовать для него как эхо-сервер (фрагмент, показанный выше)proxy.rs
— обмен пакетами между локальным узлом UDP и узлом, опосредованным TURN. Выполняет сценарий, когда выделение становится доступным. Существует старая версия ящика 0.1.0
для старых Rust и Tokio 0.1
. Это может работать лучше или хуже, чем текущая версия, я еще не проверял.