summaryrefslogtreecommitdiffhomepage
path: root/talpid_cli/src
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2017-03-06 15:42:38 +0100
committerLinus Färnstrand <linus@mullvad.net>2017-03-07 07:20:24 +0100
commit526c2e19e0e2acfd8a1945a916ab84dd652453de (patch)
tree1ad0171d33f9042b0abc9361f8ced41aae40addd /talpid_cli/src
parent155ac3f2c35908f0071bb2ee7e3d8879a2cc8f66 (diff)
downloadmullvadvpn-526c2e19e0e2acfd8a1945a916ab84dd652453de.tar.xz
mullvadvpn-526c2e19e0e2acfd8a1945a916ab84dd652453de.zip
Adapt cli to OpenVpnMonitor
Diffstat (limited to 'talpid_cli/src')
-rw-r--r--talpid_cli/src/main.rs28
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)