Refactoring timer code:

- Remove the Events struct
- Implement Callbacks on the PeerInner, elimiting an Arc.
This commit is contained in:
Mathias Hall-Andersen
2020-05-10 21:23:34 +02:00
parent 985fd088f8
commit 6c386146a7
9 changed files with 186 additions and 175 deletions

View File

@@ -209,23 +209,25 @@ pub fn handshake_worker<T: Tun, B: UDP>(
// add to rx_bytes and tx_bytes
let req_len = msg.len() as u64;
peer.rx_bytes.fetch_add(req_len, Ordering::Relaxed);
peer.tx_bytes.fetch_add(resp_len, Ordering::Relaxed);
peer.opaque().rx_bytes.fetch_add(req_len, Ordering::Relaxed);
peer.opaque()
.tx_bytes
.fetch_add(resp_len, Ordering::Relaxed);
// update endpoint
peer.router.set_endpoint(src);
peer.set_endpoint(src);
if resp_len > 0 {
// update timers after sending handshake response
debug!("{} : handshake worker, handshake response sent", wg);
peer.state.sent_handshake_response();
peer.opaque().sent_handshake_response();
} else {
// update timers after receiving handshake response
debug!(
"{} : handshake worker, handshake response was received",
wg
);
peer.state.timers_handshake_complete();
peer.opaque().timers_handshake_complete();
}
// add any new keypair to peer
@@ -233,10 +235,10 @@ pub fn handshake_worker<T: Tun, B: UDP>(
debug!("{} : handshake worker, new keypair for {}", wg, peer);
// this means that a handshake response was processed or sent
peer.timers_session_derived();
peer.opaque().timers_session_derived();
// free any unused ids
for id in peer.router.add_keypair(kp) {
for id in peer.add_keypair(kp) {
device.release(id);
}
});
@@ -252,13 +254,15 @@ pub fn handshake_worker<T: Tun, B: UDP>(
wg, peer
);
let device = wg.peers.read();
let _ = device.begin(&mut OsRng, &peer.pk).map(|msg| {
let _ = peer.router.send_raw(&msg[..]).map_err(|e| {
let _ = device.begin(&mut OsRng, &pk).map(|msg| {
let _ = peer.send_raw(&msg[..]).map_err(|e| {
debug!("{} : handshake worker, failed to send handshake initiation, error = {}", wg, e)
});
peer.state.sent_handshake_initiation();
peer.opaque().sent_handshake_initiation();
});
peer.handshake_queued.store(false, Ordering::SeqCst);
peer.opaque()
.handshake_queued
.store(false, Ordering::SeqCst);
}
}
}