aboutsummaryrefslogtreecommitdiffstats
path: root/src/server.rs
diff options
context:
space:
mode:
authorbnewbold <bnewbold@robocracy.org>2016-05-30 01:49:18 -0400
committerbnewbold <bnewbold@robocracy.org>2016-05-30 01:49:24 -0400
commit3a51fef71337f9e6683a3fe972e69cee92e1c097 (patch)
tree347a800b1519be2b79157e13708f5bef1d2c917f /src/server.rs
parent37fb8945fad0a034d1565bc4f79f9ab524587fc0 (diff)
downloaducp-3a51fef71337f9e6683a3fe972e69cee92e1c097.tar.gz
ucp-3a51fef71337f9e6683a3fe972e69cee92e1c097.zip
BROKEN: initial implementation of crypto
I think it's going to be necessary to implement buffered reading after all.
Diffstat (limited to 'src/server.rs')
-rw-r--r--src/server.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/server.rs b/src/server.rs
index 3c79984..62d4b19 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -1,6 +1,4 @@
-extern crate getopts;
-extern crate utp;
extern crate daemonize;
use super::common;
@@ -11,6 +9,8 @@ use std::env::home_dir;
use std::process::exit;
use getopts::Options;
use utp::{UtpSocket, UtpStream, UtpListener};
+use crypto::{SecretStream, key2string, string2key};
+use sodiumoxide::crypto::secretbox;
fn run_server(path: &str, is_recv: bool, recursive: bool, daemonize: bool) {
@@ -26,8 +26,10 @@ fn run_server(path: &str, is_recv: bool, recursive: bool, daemonize: bool) {
let listen_port = listener.local_addr().unwrap().port();
let listen_addr = listener.local_addr().unwrap().ip();
+ let secret_key = secretbox::gen_key();
+
// Send back details so client can connect
- println!("UCP CONNECT {} {} {}", listen_addr, listen_port, "<SECRET>");
+ println!("UCP CONNECT {} {} {}", listen_addr, listen_port, key2string(&secret_key));
// TODO: maybe wait for an ACK of some sort here before daemonizing?
@@ -52,13 +54,16 @@ fn run_server(path: &str, is_recv: bool, recursive: bool, daemonize: bool) {
let (mut socket, _src) = listener.accept().unwrap();
println!("Got connection from {}", socket.peer_addr().unwrap());
let mut stream: UtpStream = socket.into();
+ let mut stream = SecretStream::new(stream);
+ stream.key = secret_key;
if is_recv {
common::sink_files(&mut stream, path, recursive);
} else {
common::source_files(&mut stream, path, recursive);
}
- stream.close().unwrap();
+ // XXX: does Drop do this well enough?
+ //stream.close().unwrap();
}
fn usage_server(opts: Options) {