use base64::prelude::BASE64_STANDARD; use base64::Engine; use clap::{App, Arg}; use stun::message::Message; fn main() { let mut app = App::new("STUN decode") .version("0.1.0") .author("Jtplouffe ") .about("An example of STUN decode") .arg( Arg::with_name("FULLHELP") .help("Prints more detailed help information") .long("fullhelp"), ) .arg( Arg::with_name("data") .required_unless("FULLHELP") .takes_value(true) .index(1) .help("base64 encoded message, e.g. 'AAEAHCESpEJML0JTQWsyVXkwcmGALwAWaHR0cDovL2xvY2FsaG9zdDozMDAwLwAA'"), ); let matches = app.clone().get_matches(); if matches.is_present("FULLHELP") { app.print_long_help().unwrap(); std::process::exit(0); } let encoded_data = matches.value_of("data").unwrap(); let decoded_data = match BASE64_STANDARD.decode(encoded_data) { Ok(d) => d, Err(e) => panic!("Unable to decode base64 value: {e}"), }; let mut message = Message::new(); message.raw = decoded_data; match message.decode() { Ok(_) => println!("{message}"), Err(e) => panic!("Unable to decode message: {e}"), } }