From 1940f7b082bfd958ae9e4155f62afbd8f0100fd8 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Fri, 20 Oct 2017 20:05:20 -0700 Subject: crude WIP net client --- src/bin/geniza-net.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/bin/geniza-net.rs (limited to 'src/bin/geniza-net.rs') diff --git a/src/bin/geniza-net.rs b/src/bin/geniza-net.rs new file mode 100644 index 0000000..0f413a8 --- /dev/null +++ b/src/bin/geniza-net.rs @@ -0,0 +1,51 @@ + +#[macro_use] +extern crate error_chain; +extern crate clap; +extern crate geniza; + +// TODO: more careful import +use geniza::*; +use clap::{App, SubCommand}; + +fn run() -> Result<()> { + + let matches = App::new("geniza-net") + .version(env!("CARGO_PKG_VERSION")) + .subcommand(SubCommand::with_name("connect") + .about("Connects to a peer and exchanges handshake") + .arg_from_usage(" 'peer host:port to connect to'") + .arg_from_usage(" 'dat key (public key) to register with'")) + .get_matches(); + + + match matches.subcommand() { + ("connect", Some(subm)) => { + let host_port = subm.value_of("host_port").unwrap(); + let dat_key = subm.value_of("dat_key").unwrap(); + if dat_key.len() != 32*2 { + bail!("dat key not correct length"); + } + let mut key_bytes = vec![]; + for i in 0..32 { + let r = u8::from_str_radix(&dat_key[2*i .. 2*i+2], 16); + match r { + Ok(b) => key_bytes.push(b), + Err(e) => bail!("Problem with hex: {}", e), + }; + } + DatConnection::connect( + host_port, + &key_bytes)?; + println!("Done!"); + }, + _ => { + println!("Missing or unimplemented command!"); + println!("{}", matches.usage()); + ::std::process::exit(-1); + }, + } + Ok(()) +} + +quick_main!(run); -- cgit v1.2.3