diff options
Diffstat (limited to 'src/bin/geniza-net.rs')
-rw-r--r-- | src/bin/geniza-net.rs | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/bin/geniza-net.rs b/src/bin/geniza-net.rs index 0f413a8..de97e88 100644 --- a/src/bin/geniza-net.rs +++ b/src/bin/geniza-net.rs @@ -16,6 +16,10 @@ fn run() -> Result<()> { .about("Connects to a peer and exchanges handshake") .arg_from_usage("<host_port> 'peer host:port to connect to'") .arg_from_usage("<dat_key> 'dat key (public key) to register with'")) + .subcommand(SubCommand::with_name("clone") + .about("Connects to a peer, pulls all metadata and content") + .arg_from_usage("<host_port> 'peer host:port to connect to'") + .arg_from_usage("<dat_key> 'dat key (public key) to register with'")) .get_matches(); @@ -36,7 +40,30 @@ fn run() -> Result<()> { } DatConnection::connect( host_port, - &key_bytes)?; + &key_bytes, + false)?; + println!("Done!"); + }, + ("clone", 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), + }; + } + let mut dc = DatConnection::connect( + host_port, + &key_bytes, + false)?; + dc.receive_all(false)?; + dc.receive_all(true)?; println!("Done!"); }, _ => { |