diff --git a/src/bin/bridgedb.rs b/src/bin/bridgedb.rs index c2799e5..577c59f 100644 --- a/src/bin/bridgedb.rs +++ b/src/bin/bridgedb.rs @@ -19,7 +19,7 @@ async fn main() { // If bridgedb has already been created, recreate it from file. // Otherwise, create new bridgedb. - let bridgedb = if Path::new(bridgedb_filename).exists() { + let mut bridgedb = if Path::new(bridgedb_filename).exists() { // read in file let bridgedb_infile = File::open(bridgedb_filename).unwrap(); serde_json::from_reader(bridgedb_infile).unwrap() @@ -49,11 +49,16 @@ async fn main() { .expect("Failed to write to bridgedb pubkey file"); } - listen(addr, to_uppercase).await; + let mut cmd_lambda = |cmd: Vec| perform_command(cmd, &bridgedb); + + listen(addr, &mut cmd_lambda).await; } -// This function assumes the byte vector is a valid string. -fn to_uppercase(str_vec: Vec) -> Vec { - let str = std::str::from_utf8(&str_vec).unwrap(); - str.to_uppercase().into() +fn perform_command(cmd: Vec, bridgedb: &BridgeDb) -> Vec { + if cmd[0] == 1 { + // note, the bridgedb currently has no buckets + return bridgedb.invite().to_vec(); + } + // default response, to deal with later + [].to_vec() } diff --git a/src/bin/lox_auth.rs b/src/bin/lox_auth.rs index 431d8e1..3ab52c6 100644 --- a/src/bin/lox_auth.rs +++ b/src/bin/lox_auth.rs @@ -25,7 +25,7 @@ async fn main() { // If lox_auth has already been created, recreate it from file. // Otherwise, create new lox authority. - let lox_auth = if Path::new(lox_auth_filename).exists() { + let mut lox_auth = if Path::new(lox_auth_filename).exists() { // read in file let lox_auth_infile = File::open(lox_auth_filename).unwrap(); serde_json::from_reader(lox_auth_infile).unwrap() @@ -65,11 +65,12 @@ async fn main() { .expect("Failed to write to lox_auth pubkeys file"); } - listen(addr, reverse_string).await; + let mut cmd_lambda = |cmd: Vec| perform_command(cmd, &lox_auth); + + listen(addr, &mut cmd_lambda).await; } -// This function assumes the byte vector is a valid string. -fn reverse_string(str_vec: Vec) -> Vec { - let str = std::str::from_utf8(&str_vec).unwrap(); - str.trim().chars().rev().collect::().into() +fn perform_command(cmd: Vec, lox_auth: &BridgeAuth) -> Vec { + // just send something back for now + "ACK".into() } diff --git a/src/bin/lox_client.rs b/src/bin/lox_client.rs index 75d07d6..b3a268b 100644 --- a/src/bin/lox_client.rs +++ b/src/bin/lox_client.rs @@ -19,6 +19,7 @@ async fn main() { let addr = args().nth(1).unwrap(); // message to send + // TODO: determine commands so the client sends something meaningful let msg = args().nth(2).unwrap(); // import bridgedb pubkey @@ -37,5 +38,5 @@ async fn main() { let s = send(addr, msg.into()).await; - println!("{}", std::str::from_utf8(&s).unwrap()); + println!("{}", serde_json::to_string(&s).unwrap()); } diff --git a/src/server_net.rs b/src/server_net.rs index d3bb604..8b43119 100644 --- a/src/server_net.rs +++ b/src/server_net.rs @@ -9,7 +9,7 @@ these work. */ use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::net::TcpListener; -pub async fn listen(addr: String, fun: fn(Vec) -> Vec) { +pub async fn listen(addr: String, fun: &mut dyn FnMut(Vec) -> Vec) { let listener = TcpListener::bind(&addr) .await .expect("Failed to create TcpListener"); @@ -19,7 +19,7 @@ pub async fn listen(addr: String, fun: fn(Vec) -> Vec) { // asynchronously wait for an inbound socket let (mut socket, _) = listener.accept().await.expect("Failed to create socket"); - tokio::spawn(async move { +// tokio::spawn(async move { loop { // get number of bytes to receive let mut nbuf: [u8; 8] = [0; 8]; @@ -30,7 +30,8 @@ pub async fn listen(addr: String, fun: fn(Vec) -> Vec) { let n = usize::from_be_bytes(nbuf); if n == 0 { - return; + break; +// return; } let mut buf = vec![0; n]; @@ -42,7 +43,8 @@ pub async fn listen(addr: String, fun: fn(Vec) -> Vec) { .expect("Failed to read data from socket"); if n == 0 { - return; + break; + // return; } let response = fun(buf); @@ -60,6 +62,6 @@ pub async fn listen(addr: String, fun: fn(Vec) -> Vec) { .await .expect("Failed to write data to socket"); } - }); +// }); } }