diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..9b1bd1f --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,26 @@ +use crate::{http::HttpManager, socks5::Socks5Manager, tun2proxy::TunToProxy}; +use std::net::SocketAddr; + +pub mod http; +pub mod socks5; +pub mod tun2proxy; +pub mod virtdevice; + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum ProxyType { + Socks5, + Http, +} + +pub fn main_entry(tun: &str, addr: SocketAddr, proxy_type: ProxyType) { + let mut ttp = TunToProxy::new(tun); + match proxy_type { + ProxyType::Socks5 => { + ttp.add_connection_manager(Box::new(Socks5Manager::new(addr))); + } + ProxyType::Http => { + ttp.add_connection_manager(Box::new(HttpManager::new(addr))); + } + } + ttp.run(); +} diff --git a/src/main.rs b/src/main.rs index 2f1b9b7..d7e24f7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,6 @@ -mod http; -mod socks5; -mod tun2proxy; -mod virtdevice; - -use crate::http::HttpManager; -use crate::tun2proxy::TunToProxy; +use tun2proxy::{ProxyType, main_entry}; use clap::{Parser, ValueEnum}; use env_logger::Env; -use socks5::*; use std::net::SocketAddr; /// Tunnel interface to proxy @@ -39,16 +32,14 @@ fn main() { env_logger::Builder::from_env(Env::default().default_filter_or("info")).init(); let args = Args::parse(); - let mut ttp = TunToProxy::new(&args.tun); match args.proxy_type { ArgProxyType::Socks5 => { log::info!("SOCKS5 server: {}", args.addr); - ttp.add_connection_manager(Box::new(Socks5Manager::new(args.addr))); + main_entry(&args.tun, args.addr, ProxyType::Socks5); } ArgProxyType::Http => { log::info!("HTTP server: {}", args.addr); - ttp.add_connection_manager(Box::new(HttpManager::new(args.addr))); + main_entry(&args.tun, args.addr, ProxyType::Http); } } - ttp.run(); }