diff --git a/Cargo.lock b/Cargo.lock index 5c7b93c..82de156 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -314,7 +314,9 @@ dependencies = [ "clap", "dirs", "ed25519-dalek", + "env_logger", "json", + "log", "rand", "regex", "toml", @@ -412,6 +414,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "env_logger" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "event-listener" version = "2.5.1" @@ -521,6 +536,12 @@ dependencies = [ "libc", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "indexmap" version = "1.6.2" diff --git a/Cargo.toml b/Cargo.toml index 9c411df..6850e20 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,8 @@ json = "0.12.4" base64 = "0.13.0" regex = "1.4.5" async-trait = "0.1.7" +log = "0.4.14" +env_logger = "0.8.3" [dependencies.async-std] version = "1.6.2" diff --git a/src/discovery.rs b/src/discovery.rs index c39e73b..611b5c2 100644 --- a/src/discovery.rs +++ b/src/discovery.rs @@ -8,7 +8,7 @@ use std::collections::HashSet; use crate::keypair::SSBPublicKey; use crate::peer::{Address, Handshake, Peer, Protocol}; -pub async fn recv(sender: async_std::channel::Sender) { +pub async fn recv(sender: async_std::channel::Sender, pubkey: Arc) { let socket = UdpSocket::bind(":::8008").await.unwrap(); let mut buf = [0u8; 1024]; let mut old = HashSet::new(); @@ -17,8 +17,9 @@ pub async fn recv(sender: async_std::channel::Sender) { let (amt, _) = socket.recv_from(&mut buf).await.unwrap(); let buf = &mut buf[..amt]; let packet = String::from_utf8(buf.to_vec()).unwrap(); + log::debug!("Recieved discovery beacon: {}", packet); let peer = Peer::from_discovery_packet(packet.as_str()); - if !old.contains(&peer) { + if peer.key.to_base64() != pubkey.to_base64() && !old.contains(&peer) { old.insert(peer.clone()); sender.send(peer).await.unwrap(); } @@ -42,6 +43,7 @@ pub async fn send(pubkey: Arc) { socket.set_broadcast(true).unwrap(); loop { + log::debug!("Sending discovery beacon"); socket.send_to(&buf, "255.255.255.255:8008").await.unwrap(); socket.send_to(&buf, "[FF02::1]:8008").await.unwrap(); task::sleep(std::time::Duration::from_secs(1)).await; diff --git a/src/main.rs b/src/main.rs index 8edb2aa..6768a62 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ use keypair::{SSBKeypair, SSBPublicKey}; #[async_std::main] async fn main() { + env_logger::init(); let options = load_yaml!("options.yaml"); let options = App::from(options).get_matches(); @@ -37,10 +38,10 @@ async fn main() { let keypair = Keypair::read_or_generate(path.join("secret")).await; let (psend, precv) = async_std::channel::unbounded(); - task::spawn(async move { discovery::recv(psend).await }); + task::spawn(discovery::recv(psend, Arc::new(keypair.public))); task::spawn(discovery::send(Arc::new(keypair.public.to_base64()))); while let Ok(peer) = precv.recv().await { - println!("{}", peer.to_discovery_packet()); + log::info!("New peer found: {}", peer.to_discovery_packet()); }; } diff --git a/src/peer.rs b/src/peer.rs index 621792e..6dd3b5e 100644 --- a/src/peer.rs +++ b/src/peer.rs @@ -40,7 +40,7 @@ impl Address { #[derive(Clone)] pub struct Peer { addresses: Vec
, - key: PublicKey, + pub key: PublicKey, } impl Peer {