rust turnclient
A release to attach some pre-builts
Cliente Simple Rust TURN (RFC 5766) para UDP: atraviesa incluso NAT estricta; asíncrono sólo actualmente
<bonus>
Un cliente/proxy TURN de propósito general, que permite usar TURN para cosas personalizadas (usted proporciona los scripts para la señalización). Hay un ejecutable prediseñado en las versiones de Github. </bonus>
.
Fragmento de ejemplo de eco limpio:
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 ;
Consulte los documentos a nivel de caja para obtener más instrucciones.
No implementado / TODO / contras:
Box<dyn std::error::Error>
, con solo cadenas de texto.Vec<u8>
para buffers de bytes.Ejemplos:
echo.rs
: conéctese al servidor TURN especificado, autorice al par especificado y actúe como un servidor de eco para él (el fragmento se muestra arriba)proxy.rs
: intercambia paquetes entre un par UDP local y un par mediado por TURN. Ejecuta un script cuando la asignación está disponible. Existe una versión antigua 0.1.0
de la caja para Rust y Tokio 0.1
antiguos. Esto puede funcionar mejor o peor que la versión actual, realmente no lo he comprobado todavía.