aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/interface/peer_server.rs37
-rw-r--r--src/message.rs17
-rw-r--r--src/ratelimiter.rs4
3 files changed, 26 insertions, 32 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs
index f3d68b2..6839634 100644
--- a/src/interface/peer_server.rs
+++ b/src/interface/peer_server.rs
@@ -139,11 +139,11 @@ impl PeerServer {
fn handle_ingress_handshake_init(&mut self, addr: Endpoint, packet: &Initiation) -> Result<(), Error> {
ensure!(packet.len() == 148, "handshake init packet length is incorrect");
- let mut state = self.shared_state.borrow_mut();
- {
- let (mac_in, mac_out) = packet.split_at(116);
- self.cookie.verify_mac1(&mac_in[..], &mac_out[..16])?;
- }
+
+ let shared_state = self.shared_state.clone();
+ let mut state = shared_state.borrow_mut();
+ let (mac_in, mac_out) = packet.split_at(116);
+ self.cookie.verify_mac1(&mac_in[..], &mac_out[..16])?;
debug!("got handshake initiation request (0x01)");
@@ -154,7 +154,7 @@ impl PeerServer {
let peer_ref = state.pubkey_map.get(handshake.their_pubkey())
.ok_or_else(|| err_msg("unknown peer pubkey"))?.clone();
- let index = Self::unused_index(&mut state);
+ let index = self.unused_index(&mut state);
let (response, dead_index) = peer_ref.borrow_mut().complete_incoming_handshake(addr, index, handshake)?;
if let Some(index) = dead_index {
let _ = state.index_map.remove(&index);
@@ -169,11 +169,11 @@ impl PeerServer {
fn handle_ingress_handshake_resp(&mut self, addr: Endpoint, packet: &Response) -> Result<(), Error> {
ensure!(packet.len() == 92, "handshake resp packet length is incorrect");
- let mut state = self.shared_state.borrow_mut();
- {
- let (mac_in, mac_out) = packet.split_at(60);
- self.cookie.verify_mac1(&mac_in[..], &mac_out[..16])?;
- }
+
+ let mut state = self.shared_state.borrow_mut();
+ let (mac_in, mac_out) = packet.split_at(60);
+ self.cookie.verify_mac1(&mac_in[..], &mac_out[..16])?;
+
debug!("got handshake response (0x02)");
let our_index = LittleEndian::read_u32(&packet[8..]);
@@ -205,9 +205,9 @@ impl PeerServer {
}
fn handle_ingress_cookie_reply(&mut self, _addr: Endpoint, packet: &CookieReply) -> Result<(), Error> {
- let state = self.shared_state.borrow_mut();
- let peer_ref = state.index_map.get(&packet.our_index()).ok_or_else(|| err_msg("unknown our_index"))?.clone();
- let mut peer = peer_ref.borrow_mut();
+ let state = self.shared_state.borrow_mut();
+ let peer_ref = state.index_map.get(&packet.our_index()).ok_or_else(|| err_msg("unknown our_index"))?.clone();
+ let mut peer = peer_ref.borrow_mut();
peer.consume_cookie_reply(packet)
}
@@ -286,11 +286,12 @@ impl PeerServer {
}
fn send_handshake_init(&mut self, peer_ref: &SharedPeer) -> Result<u32, Error> {
- let mut state = self.shared_state.borrow_mut();
- let mut peer = peer_ref.borrow_mut();
- let private_key = &state.interface_info.private_key.ok_or_else(|| err_msg("no private key!"))?;
+ let shared_state = self.shared_state.clone();
+ let mut state = shared_state.borrow_mut();
+ let mut peer = peer_ref.borrow_mut();
+ let private_key = &state.interface_info.private_key.ok_or_else(|| err_msg("no private key!"))?;
+ let new_index = self.unused_index(&mut state);
- let new_index = Self::unused_index(&mut state);
let (endpoint, init_packet, dead_index) = peer.initiate_new_session(private_key, new_index)?;
let _ = state.index_map.insert(new_index, peer_ref.clone());
diff --git a/src/message.rs b/src/message.rs
index 32445f6..4dd2fa8 100644
--- a/src/message.rs
+++ b/src/message.rs
@@ -4,6 +4,11 @@ use failure::Error;
use std::convert::{TryFrom, TryInto};
use byteorder::{ByteOrder, LittleEndian};
+#[derive(Deref)] pub struct Initiation(Vec<u8>);
+#[derive(Deref)] pub struct Response(Vec<u8>);
+#[derive(Deref)] pub struct CookieReply(Vec<u8>);
+#[derive(Deref)] pub struct Transport(Vec<u8>);
+
pub enum Message {
Initiation(Initiation),
Response(Response),
@@ -25,9 +30,6 @@ impl TryFrom<Vec<u8>> for Message {
}
}
-#[derive(Deref)]
-pub struct Initiation(Vec<u8>);
-
impl Initiation {
pub fn their_index(&self) -> u32 {
LittleEndian::read_u32(&self[4..])
@@ -51,9 +53,6 @@ impl TryFrom<Vec<u8>> for Initiation {
}
}
-#[derive(Deref)]
-pub struct Response(Vec<u8>);
-
impl Response {
pub fn their_index(&self) -> u32 {
LittleEndian::read_u32(&self[4..])
@@ -89,9 +88,6 @@ impl TryFrom<Vec<u8>> for Response {
}
}
-#[derive(Deref)]
-pub struct CookieReply(Vec<u8>);
-
impl CookieReply {
pub fn our_index(&self) -> u32 {
LittleEndian::read_u32(&self[4..])
@@ -123,9 +119,6 @@ impl TryFrom<Vec<u8>> for CookieReply {
}
}
-#[derive(Deref)]
-pub struct Transport(Vec<u8>);
-
impl Transport {
pub fn our_index(&self) -> u32 {
LittleEndian::read_u32(&self[4..])
diff --git a/src/ratelimiter.rs b/src/ratelimiter.rs
index 26faaa4..299995e 100644
--- a/src/ratelimiter.rs
+++ b/src/ratelimiter.rs
@@ -25,8 +25,8 @@ struct Entry {
}
struct RateLimiter {
- table: HashMap<IpAddr, Entry>,
- rx: mpsc::Receiver<()>,
+ table : HashMap<IpAddr, Entry>,
+ rx : mpsc::Receiver<()>,
}
impl RateLimiter {