rusturn

rusturn Documentation Build Status Code Coverage License: MIT

A Rust implementation of TURN server and client.

Documentation

Examples

```rust use futures::Future; use rustun::message::Request; use rustun::transport::StunUdpTransporter; use rusturn::auth::AuthParams; use rusturn::transport::UdpOverTurnTransporter; use stun_codec::{rfc5389, MessageDecoder, MessageEncoder};

let clientauthparams = AuthParams::new("foo", "bar")?; let serverauthparams = AuthParams::withrealmand_nonce("foo", "bar", "baz", "qux")?;

// STUN server (peer) let stunserver = fibersglobal::execute(rustun::server::UdpServer::start( fibersglobal::handle(), "127.0.0.1:0".parse().unwrap(), rustun::server::BindingHandler, ))?; let stunserveraddr = stunserver.localaddr(); fibersglobal::spawn(stunserver.map(|| ()).map_err(|e| panic!("{}", e)));

// TURN server let turnserver = fibersglobal::execute(rusturn::server::UdpServer::start( "127.0.0.1:0".parse().unwrap(), serverauthparams, ))?; let turnserveraddr = turnserver.localaddr(); fibersglobal::spawn(turnserver.map_err(|e| panic!("{}", e)));

// TURN client let turnclient = fibersglobal::execute(rusturn::client::UdpClient::allocate( turnserveraddr, clientauthparams ))?; let transporter = UdpOverTurnTransporter::<_, MessageEncoder<_>, MessageDecoder<_>>::new(turn_client);

// STUN client (over TURN) let stunchannel = rustun::channel::Channel::new(StunUdpTransporter::new(transporter)); let stunclient = rustun::client::Client::new(&fibersglobal::handle(), stunchannel);

// BINDING request let request = Request::::new(rfc5389::methods::BINDING); let response = fibersglobal::execute( stunclient.call(stunserveraddr, request) )?; assert!(response.is_ok(), "{:?}", response); ```

References