aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-02-12 15:51:38 +0000
committerJake McGinty <me@jake.su>2018-02-12 15:51:40 +0000
commitfafaf378c992da81892efd10cfee8b4382e04139 (patch)
treeb8ee4dd4d197e3738c8169ce0777f6f10eb98258 /src
parentsplfy (diff)
downloadwireguard-rs-fafaf378c992da81892efd10cfee8b4382e04139.tar.xz
wireguard-rs-fafaf378c992da81892efd10cfee8b4382e04139.zip
update peer endpoint after receiving authenticated transport packet
Diffstat (limited to 'src')
-rw-r--r--src/interface/peer_server.rs2
-rw-r--r--src/protocol/peer.rs5
2 files changed, 5 insertions, 2 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs
index 1aa4daa..b0cec2f 100644
--- a/src/interface/peer_server.rs
+++ b/src/interface/peer_server.rs
@@ -219,7 +219,7 @@ impl PeerServer {
if let Some(ref peer) = lookup {
let raw_packet = {
let mut peer = peer.borrow_mut();
- peer.handle_incoming_transport(our_index_received, nonce, &packet[16..])?
+ peer.handle_incoming_transport(our_index_received, nonce, addr, &packet[16..])?
};
if raw_packet.len() == 0 {
diff --git a/src/protocol/peer.rs b/src/protocol/peer.rs
index 1a87b66..bea3a52 100644
--- a/src/protocol/peer.rs
+++ b/src/protocol/peer.rs
@@ -128,7 +128,7 @@ impl Peer {
Ok(dead)
}
- pub fn handle_incoming_transport(&mut self, our_index: u32, nonce: u64, packet: &[u8]) -> Result<Vec<u8>, Error> {
+ pub fn handle_incoming_transport(&mut self, our_index: u32, nonce: u64, addr: SocketAddr, packet: &[u8]) -> Result<Vec<u8>, Error> {
self.rx_bytes += packet.len() as u64;
let session = self.sessions.current.as_mut().filter(|session| session.our_index == our_index)
@@ -142,6 +142,9 @@ impl Peer {
.map_err(SyncFailure::new)?;
let len = session.noise.read_message(packet, &mut raw_packet)
.map_err(SyncFailure::new)?;
+
+ self.info.endpoint = Some(addr); // update peer endpoint after successful authentication
+
raw_packet.truncate(len);
Ok(raw_packet)
}