diff options
Diffstat (limited to 'src/wireguard/router/peer.rs')
-rw-r--r-- | src/wireguard/router/peer.rs | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/wireguard/router/peer.rs b/src/wireguard/router/peer.rs index 7527a60..0d9b435 100644 --- a/src/wireguard/router/peer.rs +++ b/src/wireguard/router/peer.rs @@ -206,7 +206,6 @@ pub fn new_peer<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>>( // spawn outbound thread let thread_inbound = { let peer = peer.clone(); - let device = device.clone(); thread::spawn(move || worker_outbound(peer, out_rx)) }; @@ -237,24 +236,25 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>> PeerInner<E, pub fn send(&self, msg: &[u8]) -> Result<(), RouterError> { debug!("peer.send"); - // check if device is enabled - if !self.device.enabled.load(Ordering::Acquire) { - return Ok(()); - } - // send to endpoint (if known) match self.endpoint.lock().as_ref() { - Some(endpoint) => self - .device - .outbound - .read() - .as_ref() - .ok_or(RouterError::SendError) - .and_then(|w| w.write(msg, endpoint).map_err(|_| RouterError::SendError)), + Some(endpoint) => { + let outbound = self.device.outbound.read(); + if outbound.0 { + outbound + .1 + .as_ref() + .ok_or(RouterError::SendError) + .and_then(|w| w.write(msg, endpoint).map_err(|_| RouterError::SendError)) + } else { + Ok(()) + } + } None => Err(RouterError::NoEndpoint), } } + // Transmit all staged packets fn send_staged(&self) -> bool { debug!("peer.send_staged"); let mut sent = false; @@ -451,6 +451,12 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: bind::Writer<E>> Peer<E, C, T *self.state.ekey.lock() = None; } + pub fn down(&self) { + self.zero_keys(); + } + + pub fn up(&self) {} + /// Add a new keypair /// /// # Arguments |