#![forbid(bad_style, exceeding_bitshifts, mutable_transmutes, no_mangle_const_items,
unknown_crate_types, warnings)]
#![deny(deprecated, drop_with_repr_extern, improper_ctypes, missing_docs,
non_shorthand_field_patterns, overflowing_literals, plugin_as_library,
private_no_mangle_fns, private_no_mangle_statics, stable_features, unconditional_recursion,
unknown_lints, unsafe_code, unused, unused_allocation, unused_attributes,
unused_comparisons, unused_features, unused_parens, while_true)]
#![warn(trivial_casts, trivial_numeric_casts, unused_extern_crates, unused_import_braces,
unused_qualifications, unused_results)]
#![allow(box_pointers, fat_ptr_transmutes, missing_copy_implementations,
missing_debug_implementations, variant_size_differences)]
#![cfg_attr(feature="clippy", feature(plugin))]
#![cfg_attr(feature="clippy", plugin(clippy))]
#![cfg_attr(feature="clippy", deny(clippy, clippy_pedantic))]
extern crate nat_traversal;
extern crate w_result;
use std::time::{Instant, Duration};
use nat_traversal::{MappingContext, SimpleUdpHolePunchServer};
use w_result::{WOk, WErr};
fn main() {
println!("The example runs a simple rendezvous server that peers can use to connect to each other with");
let mapping_context = match MappingContext::new() {
WOk(mapping_context, warnings) => {
for warning in warnings {
println!("Warning when creating mapping context: {}", warning);
}
mapping_context
}
WErr(e) => {
println!("Error creating mapping context: {}", e);
println!("Exiting.");
return;
}
};
let deadline = Instant::now() + Duration::from_secs(3);
let simple_server = match SimpleUdpHolePunchServer::new(Box::new(mapping_context), deadline) {
WOk(simple_server, warnings) => {
for warning in warnings {
println!("Warning when creating simple server: {}", warning);
}
simple_server
},
WErr(e) => {
println!("Error creating simple server: {}", e);
println!("Exiting.");
return;
}
};
let addresses = simple_server.addresses();
println!("Server addresses: {:#?}", addresses);
std::thread::park();
}