rust turnclient
A release to attach some pre-builts
Client Rust TURN simple (RFC 5766) pour UDP - traverse même le NAT strict ; asynchrone uniquement pour le moment
<bonus>
Un client/proxy TURN à usage général, permettant d'utiliser TURN pour des choses personnalisées (vous fournissez les scripts pour la signalisation). Il existe un exécutable prédéfini dans les versions de Github. </bonus>
.
Exemple d'extrait d'écho nettoyé :
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 ;
Consultez la documentation au niveau de la caisse pour plus d'instructions.
Non implémenté / TODO / inconvénients :
Box<dyn std::error::Error>
, avec juste une chaîne de texte.Vec<u8>
pour les tampons d'octets.Exemples :
echo.rs
- Connectez-vous au serveur TURN spécifié, autorisez le homologue spécifié et agissez en tant que serveur d'écho pour celui-ci (extrait illustré ci-dessus)proxy.rs
- Échangez des paquets entre un homologue UDP local et un homologue médié par TURN. Exécute un script lorsque l'allocation devient disponible. Il existe une ancienne version 0.1.0
de la caisse pour les anciens Rust et Tokio 0.1
. Cela peut fonctionner mieux ou moins bien que la version actuelle, je n'ai pas encore vraiment vérifié.