diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-03-09 12:21:24 +0100 |
|---|---|---|
| committer | David Lönnhager <dv.lnh.d@gmail.com> | 2024-03-11 13:03:10 +0100 |
| commit | 733b41e94ca123090e79910e3b577c1b282e081f (patch) | |
| tree | 14cb72b40b420720b552da89acaf43de14dbe974 | |
| parent | f9e76f86d5842de93bf2fc7e66bd30a6104505c4 (diff) | |
| download | mullvadvpn-733b41e94ca123090e79910e3b577c1b282e081f.tar.xz mullvadvpn-733b41e94ca123090e79910e3b577c1b282e081f.zip | |
Simplify unix route monitor
| -rw-r--r-- | talpid-routing/src/unix/mod.rs | 59 |
1 files changed, 19 insertions, 40 deletions
diff --git a/talpid-routing/src/unix/mod.rs b/talpid-routing/src/unix/mod.rs index 2e0e488087..d8ab85627a 100644 --- a/talpid-routing/src/unix/mod.rs +++ b/talpid-routing/src/unix/mod.rs @@ -283,51 +283,29 @@ impl RouteManager { pub async fn stop(&mut self) { if let Some(tx) = self.manage_tx.take() { let (wait_tx, wait_rx) = oneshot::channel(); - - if tx - .unbounded_send(RouteManagerCommand::Shutdown(wait_tx)) - .is_err() - { - log::error!("RouteManager already down!"); - return; - } - - if wait_rx.await.is_err() { - log::error!("{}", Error::ManagerChannelDown); - } + let _ = tx.unbounded_send(RouteManagerCommand::Shutdown(wait_tx)); + let _ = wait_rx.await; } } /// Applies the given routes until [`RouteManager::stop`] is called. pub async fn add_routes(&mut self, routes: HashSet<RequiredRoute>) -> Result<(), Error> { - if let Some(tx) = &self.manage_tx { - let (result_tx, result_rx) = oneshot::channel(); - if tx - .unbounded_send(RouteManagerCommand::AddRoutes(routes, result_tx)) - .is_err() - { - return Err(Error::RouteManagerDown); - } + let tx = self.get_command_tx()?; + let (result_tx, result_rx) = oneshot::channel(); + tx.unbounded_send(RouteManagerCommand::AddRoutes(routes, result_tx)) + .map_err(|_| Error::RouteManagerDown)?; - result_rx - .await - .map_err(|_| Error::ManagerChannelDown)? - .map_err(Error::PlatformError) - } else { - Err(Error::RouteManagerDown) - } + result_rx + .await + .map_err(|_| Error::ManagerChannelDown)? + .map_err(Error::PlatformError) } /// Removes all routes previously applied in [`RouteManager::add_routes`]. pub fn clear_routes(&mut self) -> Result<(), Error> { - if let Some(tx) = &self.manage_tx { - if tx.unbounded_send(RouteManagerCommand::ClearRoutes).is_err() { - return Err(Error::RouteManagerDown); - } - Ok(()) - } else { - Err(Error::RouteManagerDown) - } + let tx = self.get_command_tx()?; + tx.unbounded_send(RouteManagerCommand::ClearRoutes) + .map_err(|_| Error::RouteManagerDown) } /// Ensure that packets are routed using the correct tables. @@ -344,11 +322,12 @@ impl RouteManager { /// Retrieve a sender directly to the command channel. pub fn handle(&self) -> Result<RouteManagerHandle, Error> { - if let Some(tx) = &self.manage_tx { - Ok(RouteManagerHandle { tx: tx.clone() }) - } else { - Err(Error::RouteManagerDown) - } + let tx = self.get_command_tx()?; + Ok(RouteManagerHandle { tx: tx.clone() }) + } + + fn get_command_tx(&self) -> Result<&Arc<UnboundedSender<RouteManagerCommand>>, Error> { + self.manage_tx.as_ref().ok_or(Error::RouteManagerDown) } } |
