fix: panic on startup due to clap args conflict; add l4_protocol parsing

This commit is contained in:
ospab 2026-06-24 00:12:52 +03:00
parent cf72198b1f
commit ad3a8cbe8c
3 changed files with 22 additions and 8 deletions

View File

@ -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"));
};

View File

@ -81,6 +81,10 @@ pub struct TransportConfigRaw {
pub wss: Option<bool>,
}
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,

View File

@ -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<String>,
/// 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<String>) -> 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<String>) -> Result<()> {
anyhow::bail!("The 'update' command is only supported on Linux/Unix systems.");
}