diff --git a/src/server.rs b/src/server.rs index 6f26a34..7ae9880 100644 --- a/src/server.rs +++ b/src/server.rs @@ -36,11 +36,14 @@ pub async fn server_mode(server_config: ServerConfiguration) { let sock = UdpSocket::bind(&server_config.interface.bind_address).await.unwrap(); let sock_rec = Arc::new(sock); let sock_snd = sock_rec.clone(); + let sock_hnd = sock_snd.clone(); let addresses = Arc::new(Mutex::new(HashMap::::new())); let peers = Arc::new(Mutex::new(Vec::::new())); let (send2tun, recv2tun) = unbounded::>(); + let (send2hnd, recv2hnd) = unbounded::<(UDPVpnHandshake, SocketAddr)>(); + tokio::spawn(async move { loop { if let Ok(bytes) = recv2tun.recv() { @@ -49,6 +52,14 @@ pub async fn server_mode(server_config: ServerConfiguration) { } }); + tokio::spawn(async move { + loop { + if let Ok((handshake, addr)) = recv2hnd.recv() { + sock_hnd.send_to(&handshake.serialize(), addr).await; + } + } + }); + let addrs_cl = addresses.clone(); tokio::spawn(async move { let mut buf = vec![0; 4096]; @@ -116,7 +127,7 @@ pub async fn server_mode(server_config: ServerConfiguration) { let handshake_response = UDPVpnHandshake{ public_key: server_config.interface.public_key.clone().into_bytes(), request_ip: handshake.request_ip }; - sock_rec.send_to(&handshake_response.serialize(), addr); + send2hnd.send((handshake_response, addr)); } else { info!("Bad handshake"); plp.iter().for_each(|c| info!("ip: {:?}; pkey: {:?}", c.ip, c.public_key));