diff options
author | Jake McGinty <me@jake.su> | 2018-02-22 17:35:50 +0000 |
---|---|---|
committer | Jake McGinty <me@jake.su> | 2018-02-22 17:36:08 +0000 |
commit | eb268e7c350043075fd7a49fdb3a68573bddd1ca (patch) | |
tree | a580635f5be607b25044ff5388c90c8a2fcdcbf4 /src/interface | |
parent | squish unnecessary memcpy (diff) | |
download | wireguard-rs-eb268e7c350043075fd7a49fdb3a68573bddd1ca.tar.xz wireguard-rs-eb268e7c350043075fd7a49fdb3a68573bddd1ca.zip |
support removing peers
Diffstat (limited to 'src/interface')
-rw-r--r-- | src/interface/mod.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/interface/mod.rs b/src/interface/mod.rs index 93c926c..d9f078f 100644 --- a/src/interface/mod.rs +++ b/src/interface/mod.rs @@ -188,8 +188,18 @@ impl Interface { state.router.add_allowed_ips(&info.allowed_ips, &peer); let _ = state.pubkey_map.insert(info.pub_key, peer); }, - UpdateEvent::RemovePeer(_pub_key) => { - warn!("RemovePeer event not yet handled"); + UpdateEvent::RemovePeer(pub_key) => { + if let Some(peer_ref) = state.pubkey_map.remove(&pub_key) { + let peer = peer_ref.borrow(); + let indices = peer.get_mapped_indices(); + + for index in indices { + let _ = state.index_map.remove(&index); + } + state.router.remove_allowed_ips(&peer.info.allowed_ips); + } else { + info!("RemovePeer request for nonexistent peer."); + } }, _ => warn!("unhandled UpdateEvent received") } |