diff --git a/boringtun b/boringtun index cabd969..1f842a6 160000 --- a/boringtun +++ b/boringtun @@ -1 +1 @@ -Subproject commit cabd96987454add6785c6363e4846ef1ff09101e +Subproject commit 1f842a618a4efb460841a3e0104f4979b21a2485 diff --git a/wg-event-gen/src/gen.rs b/wg-event-gen/src/gen.rs index 8091896..be7643b 100644 --- a/wg-event-gen/src/gen.rs +++ b/wg-event-gen/src/gen.rs @@ -30,23 +30,9 @@ pub(crate) fn gen_events( } } - let timedout_now = || { - if let Some(shake) = cur.last_handshake { - if let Ok(el) = shake.elapsed() { - return el > timeout && el + poll_interval < timeout; - } - } - true - }; + let timedout_now = || !cur.last_handshake.is_some(); - let timedout_prev = || { - if let Some(shake) = prev.last_handshake { - if let Ok(el) = shake.elapsed().map(|el| el - poll_interval) { - return el > timeout && el < timeout + poll_interval; - } - } - true - }; + let timedout_prev = || !prev.last_handshake.is_some(); match ( timedout_prev(), diff --git a/wg-event-gen/src/main.rs b/wg-event-gen/src/main.rs index 8a96683..b4cb42c 100644 --- a/wg-event-gen/src/main.rs +++ b/wg-event-gen/src/main.rs @@ -17,9 +17,10 @@ use controller::Userspace; use model::WireguardController; use opts::Opts; use std::collections::HashMap; +use std::error::Error; use std::io; use std::thread::sleep; -use std::time::{Duration, SystemTime,Instant, UNIX_EPOCH}; +use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; use structopt::StructOpt; fn listeners(opts: &Opts) -> Vec> { @@ -30,6 +31,7 @@ fn listeners(opts: &Opts) -> Vec> { if opts.log { listeners.push(Box::new(LogListener)); } + println!("Enabled handlers: {}", (&listeners.iter().map(|l| l.name()).collect::>()).join(", ")); listeners } @@ -46,33 +48,23 @@ fn main() -> io::Result<()> { interval ); let mut peers_last: Option> = None; - let start = SystemTime::now(); loop { let now = Instant::now(); - let peers = controller.peers()?; - /*println!("Connected peers:"); - for peer in peers { - let peer = peer?; - if peer - .last_handshake - .map(|h| h.elapsed().unwrap() < timeout) - .unwrap_or(false) - { - println!("/\\{:?} {}",(timeout - peer.last_handshake.unwrap().elapsed().unwrap()), peer); + let peers = match controller.peers() { + Err(ref err) if opts.ignore_socket_errors => { + eprintln!( + "Encountered error while querying Wireguard: {}", + err.description() + ); + sleep(interval); + continue; } - }*/ + res => res?, + }; let peers = peers .map(|peer| peer.map(|peer_ok| (peer_ok.key.clone(), peer_ok))) .collect::>>()?; - for (k, p) in peers.iter() { - if let Some(shake) = p.last_handshake { - println!( - "{} {:?}", - k.to_string()[0..5].to_string(), - shake.duration_since(start).unwrap() - ); - } - } + if let Some(ref mut peers_last) = peers_last { gen_events(&peers, &peers_last, &listeners, timeout, interval); @@ -81,7 +73,7 @@ fn main() -> io::Result<()> { peers_last = Some(peers); } let pause = interval - now.elapsed(); - dbg!(interval - pause); + sleep(if pause > interval / 2 { pause } else {