diff --git a/ostp-client/src/tunnel/inbounds/tun.rs b/ostp-client/src/tunnel/inbounds/tun.rs index de11e25..9ab7cd3 100644 --- a/ostp-client/src/tunnel/inbounds/tun.rs +++ b/ostp-client/src/tunnel/inbounds/tun.rs @@ -21,7 +21,7 @@ pub async fn run_tun_inbound( use tokio::io::{AsyncReadExt, AsyncWriteExt}; use futures::{StreamExt, SinkExt}; - let InboundConfig::Tun { tag, auto_route, mtu, fd, .. } = inbound_config else { + let InboundConfig::Tun { tag, auto_route, mtu, fd: _fd, .. } = inbound_config else { return Err(anyhow!("Invalid config for TUN inbound")); }; diff --git a/ostp-server/src/config.rs b/ostp-server/src/config.rs index 99ba016..734621f 100644 --- a/ostp-server/src/config.rs +++ b/ostp-server/src/config.rs @@ -81,6 +81,10 @@ pub struct TransportConfigRaw { pub wss: Option, } +fn default_l4_protocol_config() -> String { + "all".to_string() +} + #[derive(Debug, Deserialize, Serialize, Clone)] #[serde(tag = "protocol", rename_all = "snake_case")] pub enum ServerOutbound { @@ -89,6 +93,8 @@ pub enum ServerOutbound { tag: String, server: String, port: u16, + #[serde(default = "default_l4_protocol_config")] + l4_protocol: String, }, Direct { tag: String, diff --git a/ostp/src/main.rs b/ostp/src/main.rs index 70d74f1..e59e984 100644 --- a/ostp/src/main.rs +++ b/ostp/src/main.rs @@ -56,7 +56,7 @@ struct Args { update: bool, /// Specify a target version for the update command (e.g., -v 0.2.98) - #[arg(short = 'v', long = "version", help_heading = "Common Commands")] + #[arg(short = 'v', long = "target-version", help_heading = "Common Commands")] target_version: Option, /// Import a share link (ostp://...) into the configuration file and exit @@ -1199,7 +1199,7 @@ async fn run_app() -> Result<()> { } if args.update { - return cmd_update(); + return cmd_update(args.target_version); } if args.migrate { @@ -1860,7 +1860,7 @@ async fn run_app() -> Result<()> { let mut outbound = None; for ob in server_cfg.outbounds { - if let ostp_server::config::ServerOutbound::Socks { server, port, tag } = ob { + if let ostp_server::config::ServerOutbound::Socks { server, port, tag, l4_protocol } = ob { let mut rules = Vec::new(); let mut default_action = Some("proxy".to_string()); if let Some(routing) = &server_cfg.routing { @@ -1881,7 +1881,7 @@ async fn run_app() -> Result<()> { outbound = Some(ostp_server::OutboundConfig { enabled: true, protocol: "socks5".to_string(), - l4_protocol: "all".to_string(), + l4_protocol, address: server, port, rules, @@ -1987,12 +1987,20 @@ fn cmd_uninstall() -> Result<()> { // Update command // --------------------------------------------------------------------------- #[cfg(unix)] -fn cmd_update() -> Result<()> { +fn cmd_update(version: Option) -> Result<()> { use std::process::Command; println!("[ostp] Updating OSTP..."); + + let mut script_args = vec!["-c".to_string()]; + if let Some(v) = version { + script_args.push(format!("bash <(curl -Ls https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.sh) -v {}", v)); + } else { + script_args.push("bash <(curl -Ls https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.sh)".to_string()); + } + let status = Command::new("bash") - .args(["-c", "bash <(curl -Ls https://raw.githubusercontent.com/ospab/ostp/master/scripts/install.sh)"]) + .args(&script_args) .status() .map_err(|e| anyhow!("Failed to run update: {e}"))?; @@ -2003,7 +2011,7 @@ fn cmd_update() -> Result<()> { } #[cfg(not(unix))] -fn cmd_update() -> Result<()> { +fn cmd_update(_version: Option) -> Result<()> { anyhow::bail!("The 'update' command is only supported on Linux/Unix systems."); }