diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-09-28 18:01:55 +0200 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-09-28 18:01:55 +0200 |
commit | edfd2f235a7954c2a2b846d112a468156ceddfa6 (patch) | |
tree | c5490b795c4776110ddf5d2374ee437152afb30d /src/timers.rs | |
parent | Work on peer timers (diff) | |
download | wireguard-rs-edfd2f235a7954c2a2b846d112a468156ceddfa6.tar.xz wireguard-rs-edfd2f235a7954c2a2b846d112a468156ceddfa6.zip |
Added key_confirmed callback
Diffstat (limited to '')
-rw-r--r-- | src/timers.rs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/timers.rs b/src/timers.rs index fc00d85..303fd35 100644 --- a/src/timers.rs +++ b/src/timers.rs @@ -1,5 +1,6 @@ use std::marker::PhantomData; use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; +use std::sync::Arc; use std::time::Duration; use hjul::{Runner, Timer}; @@ -7,7 +8,7 @@ use hjul::{Runner, Timer}; use crate::constants::*; use crate::router::Callbacks; use crate::types::{Bind, Tun}; -use crate::wireguard::Peer; +use crate::wireguard::{Peer, PeerInner}; pub struct Timers { handshake_pending: AtomicBool, @@ -47,7 +48,7 @@ impl Timers { send_keepalive: { let peer = peer.clone(); runner.timer(move || { - peer.router.keepalive(); + peer.router.send_keepalive(); let keepalive = peer.keepalive.load(Ordering::Acquire); if keepalive > 0 { peer.timers @@ -103,21 +104,26 @@ impl Timers { pub struct Events<T, B>(PhantomData<(T, B)>); impl<T: Tun, B: Bind> Callbacks for Events<T, B> { - type Opaque = Peer<T, B>; + type Opaque = Arc<PeerInner<B>>; - fn send(peer: &Peer<T, B>, size: usize, data: bool, sent: bool) { + fn send(peer: &Self::Opaque, size: usize, data: bool, sent: bool) { peer.tx_bytes.fetch_add(size as u64, Ordering::Relaxed); } - fn recv(peer: &Peer<T, B>, size: usize, data: bool, sent: bool) { + fn recv(peer: &Self::Opaque, size: usize, data: bool, sent: bool) { peer.rx_bytes.fetch_add(size as u64, Ordering::Relaxed); } - fn need_key(peer: &Peer<T, B>) { + fn need_key(peer: &Self::Opaque) { let timers = peer.timers.read(); if !timers.handshake_pending.swap(true, Ordering::SeqCst) { timers.handshake_attempts.store(0, Ordering::SeqCst); timers.new_handshake.fire(); } } + + fn key_confirmed(peer: &Self::Opaque) { + let timers = peer.timers.read(); + timers.retransmit_handshake.stop(); + } } |