aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-03-09 13:32:38 +0000
committerJake McGinty <me@jake.su>2018-03-21 17:46:25 -0600
commit7eefefbf43ed40542524058b36f8b0af215bf108 (patch)
tree8b446e33dc3411302ac1847538a519513d8b18ac /src
parentpeer: zero out sessions when they're dropped (diff)
downloadwireguard-rs-7eefefbf43ed40542524058b36f8b0af215bf108.tar.xz
wireguard-rs-7eefefbf43ed40542524058b36f8b0af215bf108.zip
peer: use enum instead of Option<Option<_>>>
Diffstat (limited to 'src')
-rw-r--r--src/interface/peer_server.rs5
-rw-r--r--src/peer.rs16
2 files changed, 13 insertions, 8 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs
index 99c779c..c0b01bc 100644
--- a/src/interface/peer_server.rs
+++ b/src/interface/peer_server.rs
@@ -3,7 +3,7 @@ use consts::{REKEY_TIMEOUT, REKEY_ATTEMPT_TIME, KEEPALIVE_TIMEOUT, STALE_SESSION
use cookie;
use interface::{SharedPeer, SharedState, State, UtunPacket, config};
use message::{Message, Initiation, Response, CookieReply, Transport};
-use peer::{Peer, SessionType};
+use peer::{Peer, SessionType, SessionTransition};
use time::Timestamp;
use timer::{Timer, TimerMessage};
@@ -217,8 +217,7 @@ impl PeerServer {
let mut state = self.shared_state.borrow_mut();
let (raw_packet, transition) = peer.handle_incoming_transport(addr, packet)?;
- // If a new session has been set to current (TODO make this more clear)
- if let Some(possible_dead_index) = transition {
+ if let SessionTransition::Transition(possible_dead_index) = transition {
if let Some(index) = possible_dead_index {
let _ = state.index_map.remove(&index);
}
diff --git a/src/peer.rs b/src/peer.rs
index 6fedf6f..ce20d35 100644
--- a/src/peer.rs
+++ b/src/peer.rs
@@ -44,6 +44,12 @@ pub enum SessionType {
Past, Current, Next
}
+#[derive(Debug, PartialEq)]
+pub enum SessionTransition {
+ NoTransition, Transition(Option<u32>)
+}
+
+
pub struct Session {
pub noise : snow::Session,
pub our_index : u32,
@@ -329,7 +335,7 @@ impl Peer {
}
pub fn handle_incoming_transport(&mut self, addr: SocketAddr, packet: &Transport)
- -> Result<(Vec<u8>, Option<Option<u32>>), Error> {
+ -> Result<(Vec<u8>, SessionTransition), Error> {
let mut raw_packet = vec![0u8; packet.len()];
let nonce = packet.nonce();
@@ -358,7 +364,7 @@ impl Peer {
session_type
};
- let dead_index = if session_type == SessionType::Next {
+ let transition = if session_type == SessionType::Next {
debug!("moving 'next' session to current after receiving first transport packet");
let next = std::mem::replace(&mut self.sessions.next, None);
let current = std::mem::replace(&mut self.sessions.current, next);
@@ -367,15 +373,15 @@ impl Peer {
self.sessions.current.as_mut().unwrap().birthday = Timestamp::now();
self.last_handshake = Timestamp::now();
- Some(dead.map(wipe_session))
+ SessionTransition::Transition(dead.map(wipe_session))
} else {
- None
+ SessionTransition::NoTransition
};
self.rx_bytes += packet.len() as u64;
self.info.endpoint = Some(addr); // update peer endpoint after successful authentication
- Ok((raw_packet, dead_index))
+ Ok((raw_packet, transition))
}
pub fn handle_outgoing_transport(&mut self, packet: &[u8]) -> Result<(SocketAddr, Vec<u8>), Error> {