diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-05-07 17:33:29 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-05-13 17:56:36 +0200 |
| commit | 3f2f1ff05935c6f23c518abb02b9a97cdcf037f9 (patch) | |
| tree | 9dfba03823575031627cdf812b6152521567d50b | |
| parent | 99259312fa3aef722a01bfefe45778f6d9c11b24 (diff) | |
| download | mullvadvpn-3f2f1ff05935c6f23c518abb02b9a97cdcf037f9.tar.xz mullvadvpn-3f2f1ff05935c6f23c518abb02b9a97cdcf037f9.zip | |
Update route manager on Android
| -rw-r--r-- | talpid-core/src/routing/android.rs | 30 |
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(()) } } |
