summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-05-07 17:33:29 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-05-13 17:56:36 +0200
commit3f2f1ff05935c6f23c518abb02b9a97cdcf037f9 (patch)
tree9dfba03823575031627cdf812b6152521567d50b
parent99259312fa3aef722a01bfefe45778f6d9c11b24 (diff)
downloadmullvadvpn-3f2f1ff05935c6f23c518abb02b9a97cdcf037f9.tar.xz
mullvadvpn-3f2f1ff05935c6f23c518abb02b9a97cdcf037f9.zip
Update route manager on Android
-rw-r--r--talpid-core/src/routing/android.rs30
1 files changed, 13 insertions, 17 deletions
diff --git a/talpid-core/src/routing/android.rs b/talpid-core/src/routing/android.rs
index 1f47027343..d364f0769e 100644
--- a/talpid-core/src/routing/android.rs
+++ b/talpid-core/src/routing/android.rs
@@ -1,5 +1,5 @@
-use crate::routing::RequiredRoute;
-use futures01::{sync::oneshot, Async, Future};
+use crate::routing::{imp::RouteManagerCommand, RequiredRoute};
+use futures01::{stream::Stream, sync::mpsc};
use std::collections::HashSet;
/// Stub error type for routing errors on Android.
@@ -9,30 +9,26 @@ pub struct Error;
/// Stub route manager for Android
pub struct RouteManagerImpl {
- shutdown_rx: oneshot::Receiver<oneshot::Sender<()>>,
+ manage_rx: mpsc::UnboundedReceiver<RouteManagerCommand>,
}
impl RouteManagerImpl {
pub fn new(
_required_routes: HashSet<RequiredRoute>,
- shutdown_rx: oneshot::Receiver<oneshot::Sender<()>>,
+ manage_rx: mpsc::UnboundedReceiver<RouteManagerCommand>,
) -> Result<Self, Error> {
- Ok(RouteManagerImpl { shutdown_rx })
+ Ok(RouteManagerImpl { manage_rx })
}
-}
-
-impl Future for RouteManagerImpl {
- type Item = ();
- type Error = Error;
- fn poll(&mut self) -> Result<Async<()>, Error> {
- match self.shutdown_rx.poll() {
- Ok(Async::Ready(result_tx)) => {
- result_tx.send(()).map_err(|()| Error)?;
- Ok(Async::Ready(()))
+ pub fn wait(self) -> Result<(), Error> {
+ for msg in self.manage_rx.wait() {
+ if let Ok(command) = msg {
+ if let RouteManagerCommand::Shutdown(tx) = command {
+ tx.send(()).map_err(|()| Error)?;
+ break;
+ }
}
- Ok(Async::NotReady) => Ok(Async::NotReady),
- Err(_) => Ok(Async::Ready(())),
}
+ Ok(())
}
}