#![deny(rust_2018_idioms)]
use log::{debug, error, info, trace, warn};
use mullvad_daemon::{
logging,
management_interface::{ManagementInterfaceEventBroadcaster, ManagementInterfaceServer},
rpc_uniqueness_check,
runtime::new_runtime_builder,
version, Daemon, DaemonCommandChannel, DaemonCommandSender,
};
use std::{path::PathBuf, thread, time::Duration};
use talpid_types::ErrorExt;
mod cli;
mod exception_logging;
mod shutdown;
#[cfg(windows)]
mod system_service;
const DAEMON_LOG_FILENAME: &str = "daemon.log";
fn main() {
let config = cli::get_config();
let log_dir = init_logging(config).unwrap_or_else(|error| {
eprintln!("{}", error);
std::process::exit(1)
});
trace!("Using configuration: {:?}", config);
let runtime = new_runtime_builder().build().unwrap_or_else(|error| {
eprintln!("{}", error.display_chain());
std::process::exit(1);
});
let exit_code = match runtime.block_on(run_platform(config, log_dir)) {
Ok(_) => 0,
Err(error) => {
error!("{}", error);
1
}
};
debug!("Process exiting with code {}", exit_code);
std::process::exit(exit_code);
}
fn init_logging(config: &cli::Config) -> Result