socks5ws/src/main.rs

89 lines
2.2 KiB
Rust
Raw Normal View History

2022-09-24 16:23:53 +00:00
extern crate flexi_logger;
mod config;
mod server;
2022-09-24 18:11:12 +00:00
mod service;
2022-09-24 16:23:53 +00:00
2022-09-26 07:57:47 +00:00
use flexi_logger::{
AdaptiveFormat, Age, Cleanup, Criterion, Duplicate, FileSpec, Logger, LoggerHandle, Naming,
};
2022-09-24 16:23:53 +00:00
2022-09-24 18:11:12 +00:00
use clap::{Parser, Subcommand};
#[derive(Subcommand, Debug)]
enum Command {
/// install service
Install,
/// uninstall service
Uninstall,
/// start service
Start,
/// stop service
Stop,
/// run service (by Windows)
Run,
2022-09-26 07:43:49 +00:00
/// save default config
SaveConfig,
2022-09-24 18:11:12 +00:00
}
/// SOCKS5 proxy windows service
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
#[clap(propagate_version = true)]
struct Cli {
#[clap(subcommand)]
command: Command,
}
2022-09-26 07:57:47 +00:00
fn create_logger() -> LoggerHandle {
Logger::try_with_str("info")
.expect("default logging level invalid")
2022-09-24 18:11:12 +00:00
.log_to_file(
2022-09-26 07:57:47 +00:00
FileSpec::default().directory(
std::env::current_exe()
.expect("can't get current exe path")
.parent()
.expect("can't get parent folder"),
),
2022-09-24 18:11:12 +00:00
)
2022-09-24 16:23:53 +00:00
.rotate(
Criterion::Age(Age::Day),
Naming::Timestamps,
Cleanup::KeepLogFiles(4),
)
2022-09-24 20:35:54 +00:00
.format(flexi_logger::detailed_format)
2022-09-28 11:56:22 +00:00
.adaptive_format_for_stdout(AdaptiveFormat::Detailed)
2022-09-24 16:23:53 +00:00
.print_message()
2022-09-28 11:56:22 +00:00
.duplicate_to_stdout(Duplicate::Info)
2022-09-24 20:55:38 +00:00
.write_mode(flexi_logger::WriteMode::Async)
2022-09-24 18:11:12 +00:00
.start_with_specfile(
std::env::current_exe()
.unwrap()
.with_file_name("logspec.toml"),
)
2022-09-26 07:57:47 +00:00
.expect("can't start logger")
}
fn main() {
let args = Cli::parse();
let logger = create_logger();
2022-09-24 16:23:53 +00:00
2022-09-24 21:09:38 +00:00
let res = match args.command {
Command::Install => service::install(),
Command::Uninstall => service::uninstall(),
Command::Run => service::run(),
Command::Start => service::start(),
Command::Stop => service::stop(),
2022-09-26 07:43:49 +00:00
Command::SaveConfig => {
config::Config::default().save();
Ok(())
}
2022-09-24 21:09:38 +00:00
};
if let Err(e) = res {
log::error!("{:?} error: {:#?}", args.command, e);
2022-09-24 18:11:12 +00:00
}
2022-09-24 21:09:38 +00:00
drop(logger);
2022-09-24 16:23:53 +00:00
}