mod proxy; mod wintun_downloader; mod wintun_handler; pub use wintun_downloader::download_wintun_dll; pub use wintun_handler::run_wintun_tunnel; use tokio::sync::{mpsc, watch}; use crate::config::{ExclusionConfig, LocalProxyConfig, OstpConfig}; pub use proxy::run_local_socks5_proxy; #[derive(Debug)] pub enum ProxyEvent { NewStream { stream_id: u16, target: String, }, Data { stream_id: u16, payload: bytes::Bytes, }, Close { stream_id: u16, }, } #[derive(Debug)] pub enum ProxyToClientMsg { ConnectOk, Data(bytes::Bytes), Close, Error(String), } #[allow(dead_code)] pub struct TunnelConfig { pub local_bind: String, pub remote_addr: String, } impl Default for TunnelConfig { fn default() -> Self { Self { local_bind: "127.0.0.1:1080".to_string(), remote_addr: "127.0.0.1:443".to_string(), } } } pub async fn cleanup() -> anyhow::Result<()> { Ok(()) } pub async fn run_local_proxy( cfg: LocalProxyConfig, ostp: OstpConfig, exclusions: ExclusionConfig, debug: bool, shutdown: watch::Receiver, proxy_events_tx: mpsc::Sender, client_msgs_rx: mpsc::Receiver<(u16, ProxyToClientMsg)>, ) -> anyhow::Result<()> { run_local_socks5_proxy(cfg, ostp, exclusions, debug, shutdown, proxy_events_tx, client_msgs_rx).await }