summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2024-03-09 12:21:24 +0100
committerDavid Lönnhager <dv.lnh.d@gmail.com>2024-03-11 13:03:10 +0100
commit733b41e94ca123090e79910e3b577c1b282e081f (patch)
tree14cb72b40b420720b552da89acaf43de14dbe974
parentf9e76f86d5842de93bf2fc7e66bd30a6104505c4 (diff)
downloadmullvadvpn-733b41e94ca123090e79910e3b577c1b282e081f.tar.xz
mullvadvpn-733b41e94ca123090e79910e3b577c1b282e081f.zip
Simplify unix route monitor
-rw-r--r--talpid-routing/src/unix/mod.rs59
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)
}
}