Merge branch 'timeout' into new_events

This commit is contained in:
shimunn 2019-04-04 20:39:00 +02:00
commit ceb3d7b77d
3 changed files with 18 additions and 40 deletions

@ -1 +1 @@
Subproject commit cabd96987454add6785c6363e4846ef1ff09101e Subproject commit 1f842a618a4efb460841a3e0104f4979b21a2485

View File

@ -30,23 +30,9 @@ pub(crate) fn gen_events(
} }
} }
let timedout_now = || { let timedout_now = || !cur.last_handshake.is_some();
if let Some(shake) = cur.last_handshake {
if let Ok(el) = shake.elapsed() {
return el > timeout && el + poll_interval < timeout;
}
}
true
};
let timedout_prev = || { let timedout_prev = || !prev.last_handshake.is_some();
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
};
match ( match (
timedout_prev(), timedout_prev(),

View File

@ -17,9 +17,10 @@ use controller::Userspace;
use model::WireguardController; use model::WireguardController;
use opts::Opts; use opts::Opts;
use std::collections::HashMap; use std::collections::HashMap;
use std::error::Error;
use std::io; use std::io;
use std::thread::sleep; use std::thread::sleep;
use std::time::{Duration, SystemTime,Instant, UNIX_EPOCH}; use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
use structopt::StructOpt; use structopt::StructOpt;
fn listeners(opts: &Opts) -> Vec<Box<EventListener>> { fn listeners(opts: &Opts) -> Vec<Box<EventListener>> {
@ -30,6 +31,7 @@ fn listeners(opts: &Opts) -> Vec<Box<EventListener>> {
if opts.log { if opts.log {
listeners.push(Box::new(LogListener)); listeners.push(Box::new(LogListener));
} }
println!("Enabled handlers: {}", (&listeners.iter().map(|l| l.name()).collect::<Vec<_>>()).join(", "));
listeners listeners
} }
@ -46,33 +48,23 @@ fn main() -> io::Result<()> {
interval interval
); );
let mut peers_last: Option<HashMap<ECCKey, Peer>> = None; let mut peers_last: Option<HashMap<ECCKey, Peer>> = None;
let start = SystemTime::now();
loop { loop {
let now = Instant::now(); let now = Instant::now();
let peers = controller.peers()?; let peers = match controller.peers() {
/*println!("Connected peers:"); Err(ref err) if opts.ignore_socket_errors => {
for peer in peers { eprintln!(
let peer = peer?; "Encountered error while querying Wireguard: {}",
if peer err.description()
.last_handshake );
.map(|h| h.elapsed().unwrap() < timeout) sleep(interval);
.unwrap_or(false) continue;
{
println!("/\\{:?} {}",(timeout - peer.last_handshake.unwrap().elapsed().unwrap()), peer);
} }
}*/ res => res?,
};
let peers = peers let peers = peers
.map(|peer| peer.map(|peer_ok| (peer_ok.key.clone(), peer_ok))) .map(|peer| peer.map(|peer_ok| (peer_ok.key.clone(), peer_ok)))
.collect::<io::Result<HashMap<_, _>>>()?; .collect::<io::Result<HashMap<_, _>>>()?;
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 { if let Some(ref mut peers_last) = peers_last {
gen_events(&peers, &peers_last, &listeners, timeout, interval); gen_events(&peers, &peers_last, &listeners, timeout, interval);
@ -81,7 +73,7 @@ fn main() -> io::Result<()> {
peers_last = Some(peers); peers_last = Some(peers);
} }
let pause = interval - now.elapsed(); let pause = interval - now.elapsed();
dbg!(interval - pause);
sleep(if pause > interval / 2 { sleep(if pause > interval / 2 {
pause pause
} else { } else {