diff options
| author | Linus Färnstrand <linus@mullvad.net> | 2017-03-06 15:42:38 +0100 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2017-03-07 07:20:24 +0100 |
| commit | 526c2e19e0e2acfd8a1945a916ab84dd652453de (patch) | |
| tree | 1ad0171d33f9042b0abc9361f8ced41aae40addd | |
| parent | 155ac3f2c35908f0071bb2ee7e3d8879a2cc8f66 (diff) | |
| download | mullvadvpn-526c2e19e0e2acfd8a1945a916ab84dd652453de.tar.xz mullvadvpn-526c2e19e0e2acfd8a1945a916ab84dd652453de.zip | |
Adapt cli to OpenVpnMonitor
| -rw-r--r-- | talpid_cli/src/main.rs | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/talpid_cli/src/main.rs b/talpid_cli/src/main.rs index 552e47bdc7..b6ce7654ff 100644 --- a/talpid_cli/src/main.rs +++ b/talpid_cli/src/main.rs @@ -11,8 +11,7 @@ use std::io::{self, Read, Write}; use std::sync::mpsc::{self, Receiver}; use std::thread; -use talpid_core::process::monitor::{ChildMonitor, ChildSpawner}; -use talpid_core::process::openvpn::OpenVpnCommand; +use talpid_core::process::openvpn::{OpenVpnCommand, OpenVpnEvent, OpenVpnMonitor}; mod cli; @@ -21,7 +20,7 @@ use cli::Args; error_chain! { links { - Monitor(talpid_core::process::monitor::Error, talpid_core::process::monitor::ErrorKind); + Monitor(talpid_core::process::openvpn::Error, talpid_core::process::openvpn::ErrorKind); } } @@ -42,7 +41,7 @@ fn main() { fn run() -> Result<()> { let args = cli::parse_args_or_exit(); let command = create_openvpn_command(&args); - let monitor = ChildMonitor::new(command); + let monitor = OpenVpnMonitor::new(command); main_loop(monitor) } @@ -56,20 +55,25 @@ fn create_openvpn_command(args: &Args) -> OpenVpnCommand { command } -fn main_loop<S>(mut monitor: ChildMonitor<S>) -> Result<()> - where S: ChildSpawner -{ +fn main_loop(mut monitor: OpenVpnMonitor) -> Result<()> { loop { let rx = start_monitor(&mut monitor).chain_err(|| "Unable to start OpenVPN")?; - let clean_exit = rx.recv().unwrap(); - println!("Monitored process exited. clean: {}", clean_exit); + while let Ok(msg) = rx.recv() { + match msg { + OpenVpnEvent::Shutdown(clean) => { + println!("Monitored process exited. clean: {}", clean); + break; + } + OpenVpnEvent::PluginEvent(env) => { + println!("OpenVPN event with env:\n{:?}", env); + } + } + } std::thread::sleep(std::time::Duration::from_millis(500)); } } -fn start_monitor<S>(monitor: &mut ChildMonitor<S>) -> Result<Receiver<bool>> - where S: ChildSpawner -{ +fn start_monitor(monitor: &mut OpenVpnMonitor) -> Result<Receiver<OpenVpnEvent>> { let (tx, rx) = mpsc::channel(); let callback = move |clean| tx.send(clean).unwrap(); Ok(monitor.start(callback) |
