diff options
author | Jake McGinty <me@jake.su> | 2018-05-03 18:28:52 -0700 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-05-03 18:28:52 -0700 |
commit | 59e5adfed6b4ce9d50bb9200fe0cd678660e91b4 (patch) | |
tree | 131b98fe64393ab8432bb2709cab2641dd2ed66a | |
parent | peer_server: move config change handling code to own method (diff) | |
download | wireguard-rs-59e5adfed6b4ce9d50bb9200fe0cd678660e91b4.tar.xz wireguard-rs-59e5adfed6b4ce9d50bb9200fe0cd678660e91b4.zip |
timers: properly set correct timer data for in/egress packets
-rw-r--r-- | src/interface/peer_server.rs | 3 | ||||
-rw-r--r-- | src/peer.rs | 22 |
2 files changed, 17 insertions, 8 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs index ff3e356..2acbb6a 100644 --- a/src/interface/peer_server.rs +++ b/src/interface/peer_server.rs @@ -313,8 +313,7 @@ impl PeerServer { self.send_to_peer((endpoint, init_packet))?; peer.timers.handshake_initialized = Timestamp::now(); - let when = *REKEY_TIMEOUT; - self.timer.send_after(when, TimerMessage::Rekey(peer_ref.clone(), new_index)); + self.timer.send_after(*REKEY_TIMEOUT, TimerMessage::Rekey(peer_ref.clone(), new_index)); Ok(new_index) } diff --git a/src/peer.rs b/src/peer.rs index 37285c5..558c25a 100644 --- a/src/peer.rs +++ b/src/peer.rs @@ -282,8 +282,10 @@ impl Peer { None }; - self.info.endpoint = Some(addr); - self.last_handshake_tai64n = Some(timestamp); + self.info.endpoint = Some(addr); + self.last_handshake_tai64n = Some(timestamp); + self.timers.authenticated_received = Timestamp::now(); + self.timers.authenticated_traversed = Timestamp::now(); Ok((response_packet, dead_index)) } @@ -315,8 +317,10 @@ impl Peer { session.their_index = packet.their_index(); session.birthday = Timestamp::now(); - self.timers.handshake_completed = Timestamp::now(); - self.info.endpoint = Some(addr); + self.info.endpoint = Some(addr); + self.timers.authenticated_received = Timestamp::now(); + self.timers.authenticated_traversed = Timestamp::now(); + self.timers.handshake_completed = Timestamp::now(); let current = mem::replace(&mut self.sessions.current, Some(session)); let dead = mem::replace(&mut self.sessions.past, current); @@ -354,7 +358,8 @@ impl Peer { if raw_packet.len() > 0 { self.timers.data_received = Timestamp::now(); } - + self.timers.authenticated_received = Timestamp::now(); + self.timers.authenticated_traversed = Timestamp::now(); self.timers.keepalive_sent = false; // reset passive keepalive token since received a valid ingress transport let transition = if session_type == SessionType::Next { @@ -393,7 +398,12 @@ impl Peer { let padded_packet = &[packet, &vec![0u8; padding]].concat(); let len = session.noise.write_message(padded_packet, &mut out_packet[16..])?; self.tx_bytes += len as u64; - self.timers.data_sent = Timestamp::now(); // TODO: only set this timer if not a keepalive + + if packet.len() > 0 { + self.timers.data_sent = Timestamp::now(); + } + self.timers.authenticated_traversed = Timestamp::now(); + out_packet.truncate(TRANSPORT_HEADER_SIZE + len); Ok((endpoint, out_packet)) } |