aboutsummaryrefslogtreecommitdiffstats
path: root/src/peer.rs
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-02-24 16:45:08 +0000
committerJake McGinty <me@jake.su>2018-02-24 16:45:08 +0000
commit930d2e80679703b1acdf7d0c9702e80d63f915ad (patch)
treefae21fc8f995196f1fb33f6b30ff9acfe8e7e989 /src/peer.rs
parentrekey timer re-work for correctness (diff)
downloadwireguard-rs-930d2e80679703b1acdf7d0c9702e80d63f915ad.tar.xz
wireguard-rs-930d2e80679703b1acdf7d0c9702e80d63f915ad.zip
zero-out timer
Diffstat (limited to 'src/peer.rs')
-rw-r--r--src/peer.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/peer.rs b/src/peer.rs
index 5721081..1773d6b 100644
--- a/src/peer.rs
+++ b/src/peer.rs
@@ -1,7 +1,7 @@
use anti_replay::AntiReplay;
use byteorder::{ByteOrder, LittleEndian};
use consts::{TRANSPORT_OVERHEAD, TRANSPORT_HEADER_SIZE, MAX_SEGMENT_SIZE, REKEY_AFTER_MESSAGES,
- REKEY_AFTER_TIME, RECV_REKEY_AFTER_TIME, REJECT_AFTER_MESSAGES, PADDING_MULTIPLE};
+ REKEY_AFTER_TIME, REKEY_AFTER_TIME_RECV, REJECT_AFTER_MESSAGES, PADDING_MULTIPLE};
use cookie;
use failure::{Error, err_msg};
use interface::UtunPacket;
@@ -112,6 +112,18 @@ pub struct Sessions {
pub next : Option<Session>,
}
+impl Sessions {
+ /// Remove all stored sessions from memory, returning all of our indices that were stored
+ /// in order to clear out caches/maps.
+ pub fn wipe(&mut self) -> Vec<u32> {
+ let indices = vec![mem::replace(&mut self.past, None),
+ mem::replace(&mut self.current, None),
+ mem::replace(&mut self.next, None)];
+
+ indices.into_iter().filter_map(|sesh| sesh.map(|s| s.our_index)).collect()
+ }
+}
+
impl Display for Peer {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
write!(f, "Peer({})", self.info)
@@ -169,7 +181,7 @@ impl Peer {
debug!("needs new handshake: sending after REKEY_AFTER_TIME");
return true;
}
- if !sending && self.last_handshake.elapsed() > *RECV_REKEY_AFTER_TIME {
+ if !sending && self.last_handshake.elapsed() > *REKEY_AFTER_TIME_RECV {
debug!("needs new handshake: receiving after RECV_REKEY_AFTER_TIME");
return true;
}