diff --git a/src/discovery.rs b/src/discovery.rs index c10e29b..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(); @@ -19,7 +19,7 @@ pub async fn recv(sender: async_std::channel::Sender) { 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(); } diff --git a/src/main.rs b/src/main.rs index 2e42e42..6768a62 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,7 +38,7 @@ 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 { 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 {