[−][src]Crate rustun
An asynchronous implementation of STUN server and client.
Examples
An example that issues a BINDING
request:
use fibers_transport::UdpTransporter; use futures::Future; use rustun::channel::Channel; use rustun::client::Client; use rustun::message::Request; use rustun::server::{BindingHandler, UdpServer}; use rustun::transport::StunUdpTransporter; use rustun::Error; use stun_codec::{rfc5389, MessageDecoder, MessageEncoder}; let addr = "127.0.0.1:0".parse().unwrap(); // Starts UDP server let server = fibers_global::execute(UdpServer::start(fibers_global::handle(), addr, BindingHandler))?; let server_addr = server.local_addr(); fibers_global::spawn(server.map(|_| ()).map_err(|e| panic!("{}", e))); // Sents BINDING request let response = UdpTransporter::<MessageEncoder<_>, MessageDecoder<_>>::bind(addr) .map_err(Error::from) .map(StunUdpTransporter::new) .map(Channel::new) .and_then(move |channel| { let client = Client::new(&fibers_global::handle(), channel); let request = Request::<rfc5389::Attribute>::new(rfc5389::methods::BINDING); client.call(server_addr, request) }); // Waits BINDING response let response = fibers_global::execute(response)?; assert!(response.is_ok());
You can run example server and client that handle BINDING
method as follows:
// Starts the STUN server in a shell.
$ cargo run --example binding_srv
// Executes a STUN client in another shell.
$ cargo run --example binding_cli -- 127.0.0.1
Ok(SuccessResponse(Message {
class: SuccessResponse,
method: Method(1),
transaction_id: TransactionId(0x344A403694972F5E53B69465),
attributes: [Known { inner: XorMappedAddress(XorMappedAddress(V4(127.0.0.1:54754))),
padding: Some(Padding([])) }]
}))
References
Modules
channel | Channel for sending and receiving STUN messages. |
client | Basic STUN client. |
message | STUN messages. |
server | Basic STUN servers. |
transport | Transport layer abstractions and its built-in implementations. |
Structs
Error | This crate specific |
Enums
ErrorKind | Possible error kinds. |
Type Definitions
Result | A specialized |