|
@@ -144,8 +144,11 @@ end
|
|
|
if is_finded("ssr-redir") then
|
|
if is_finded("ssr-redir") then
|
|
|
o:value("ssr", translate("ShadowsocksR"))
|
|
o:value("ssr", translate("ShadowsocksR"))
|
|
|
end
|
|
end
|
|
|
-if is_finded("sslocal") or is_finded("ss-redir") then
|
|
|
|
|
- o:value("ss", translate("Shadowsocks New Version"))
|
|
|
|
|
|
|
+if is_finded("ss-local") or is_finded("ss-redir") then
|
|
|
|
|
+ o:value("ss", translate("Shadowsocks-libev New Version"))
|
|
|
|
|
+end
|
|
|
|
|
+if is_finded("sslocal") or is_finded("ssmanager") then
|
|
|
|
|
+ o:value("ss_rust", translate("Shadowsocks-rust Version"))
|
|
|
end
|
|
end
|
|
|
if is_finded("trojan") then
|
|
if is_finded("trojan") then
|
|
|
o:value("trojan", translate("Trojan"))
|
|
o:value("trojan", translate("Trojan"))
|
|
@@ -159,6 +162,9 @@ end
|
|
|
if is_finded("tuic-client") then
|
|
if is_finded("tuic-client") then
|
|
|
o:value("tuic", translate("TUIC"))
|
|
o:value("tuic", translate("TUIC"))
|
|
|
end
|
|
end
|
|
|
|
|
+if is_finded("shadow-tls") and is_finded("sslocal") then
|
|
|
|
|
+ o:value("shadowtls", translate("Shadow-TLS"))
|
|
|
|
|
+end
|
|
|
if is_finded("ipt2socks") then
|
|
if is_finded("ipt2socks") then
|
|
|
o:value("socks5", translate("Socks5"))
|
|
o:value("socks5", translate("Socks5"))
|
|
|
end
|
|
end
|
|
@@ -196,23 +202,27 @@ o.datatype = "host"
|
|
|
o.rmempty = false
|
|
o.rmempty = false
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+o:depends("type", "ss_rust")
|
|
|
o:depends("type", "v2ray")
|
|
o:depends("type", "v2ray")
|
|
|
o:depends("type", "trojan")
|
|
o:depends("type", "trojan")
|
|
|
o:depends("type", "naiveproxy")
|
|
o:depends("type", "naiveproxy")
|
|
|
o:depends("type", "hysteria")
|
|
o:depends("type", "hysteria")
|
|
|
o:depends("type", "tuic")
|
|
o:depends("type", "tuic")
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
o:depends("type", "socks5")
|
|
o:depends("type", "socks5")
|
|
|
|
|
|
|
|
o = s:option(Value, "server_port", translate("Server Port"))
|
|
o = s:option(Value, "server_port", translate("Server Port"))
|
|
|
o.datatype = "port"
|
|
o.datatype = "port"
|
|
|
-o.rmempty = ({port_hopping=0 and false or true})
|
|
|
|
|
|
|
+o.rmempty = true
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+o:depends("type", "ss_rust")
|
|
|
o:depends("type", "v2ray")
|
|
o:depends("type", "v2ray")
|
|
|
o:depends("type", "trojan")
|
|
o:depends("type", "trojan")
|
|
|
o:depends("type", "naiveproxy")
|
|
o:depends("type", "naiveproxy")
|
|
|
-o:depends({type="hysteria",port_hopping=0})
|
|
|
|
|
|
|
+o:depends({type = "hysteria",port_hopping = 0})
|
|
|
o:depends("type", "tuic")
|
|
o:depends("type", "tuic")
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
o:depends("type", "socks5")
|
|
o:depends("type", "socks5")
|
|
|
|
|
|
|
|
o = s:option(Flag, "auth_enable", translate("Enable Authentication"))
|
|
o = s:option(Flag, "auth_enable", translate("Enable Authentication"))
|
|
@@ -234,8 +244,10 @@ o.password = true
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+o:depends("type", "ss_rust")
|
|
|
o:depends("type", "trojan")
|
|
o:depends("type", "trojan")
|
|
|
o:depends("type", "naiveproxy")
|
|
o:depends("type", "naiveproxy")
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
o:depends({type = "socks5", auth_enable = true})
|
|
o:depends({type = "socks5", auth_enable = true})
|
|
|
o:depends({type = "v2ray", v2ray_protocol = "http", auth_enable = true})
|
|
o:depends({type = "v2ray", v2ray_protocol = "http", auth_enable = true})
|
|
|
o:depends({type = "v2ray", v2ray_protocol = "socks", socks_ver = "5", auth_enable = true})
|
|
o:depends({type = "v2ray", v2ray_protocol = "socks", socks_ver = "5", auth_enable = true})
|
|
@@ -255,6 +267,7 @@ for _, v in ipairs(encrypt_methods_ss) do
|
|
|
end
|
|
end
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+o:depends("type", "ss_rust")
|
|
|
o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
|
|
o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
|
|
|
|
|
|
|
|
o = s:option(Flag, "uot", translate("UDP over TCP"))
|
|
o = s:option(Flag, "uot", translate("UDP over TCP"))
|
|
@@ -282,10 +295,12 @@ if is_finded("xray-plugin") then
|
|
|
end
|
|
end
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+o:depends("type", "ss_rust")
|
|
|
|
|
|
|
|
o = s:option(Value, "plugin_opts", translate("Plugin Opts"))
|
|
o = s:option(Value, "plugin_opts", translate("Plugin Opts"))
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+o:depends("type", "ss_rust")
|
|
|
|
|
|
|
|
o = s:option(ListValue, "protocol", translate("Protocol"))
|
|
o = s:option(ListValue, "protocol", translate("Protocol"))
|
|
|
for _, v in ipairs(protocol) do
|
|
for _, v in ipairs(protocol) do
|
|
@@ -307,55 +322,162 @@ o:depends("type", "ssr")
|
|
|
o = s:option(Value, "obfs_param", translate("Obfs param (optional)"))
|
|
o = s:option(Value, "obfs_param", translate("Obfs param (optional)"))
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
|
|
|
|
|
--- [[ Hysteria ]]--
|
|
|
|
|
-o = s:option(Flag, "port_hopping", translate("Enable Port Hopping"))
|
|
|
|
|
|
|
+
|
|
|
|
|
+-- [[ Hysteria2 ]]--
|
|
|
|
|
+o = s:option(Value, "hy2_auth", translate("Users Authentication"))
|
|
|
|
|
+o:depends("type", "hysteria")
|
|
|
|
|
+o.rmempty = false
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(ListValue, "hysteria_protocol", translate("Protocol"))
|
|
|
|
|
+o:depends("type", "hysteria")
|
|
|
|
|
+o:value("udp", translate("udp"))
|
|
|
|
|
+o.default = "udp"
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Flag, "port_hopping", translate("Port Hopping"))
|
|
|
o:depends("type", "hysteria")
|
|
o:depends("type", "hysteria")
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
o.default = "0"
|
|
o.default = "0"
|
|
|
|
|
|
|
|
-o = s:option(Value, "port_range", translate("Port Range"))
|
|
|
|
|
-o:depends({type = "hysteria", port_hopping = "1"})
|
|
|
|
|
-o.datatype = "portrange"
|
|
|
|
|
|
|
+o = s:option(Value, "port_range", translate("Port range"))
|
|
|
|
|
+o:depends({type = "hysteria", port_hopping = 1})
|
|
|
|
|
+o.rmempty = false
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Flag, "lazy_mode", translate("Enable Lazy Mode"))
|
|
|
|
|
+o:depends("type", "hysteria")
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
+o.default = "0"
|
|
|
|
|
|
|
|
-o = s:option(ListValue, "hysteria_protocol", translate("Protocol"))
|
|
|
|
|
|
|
+o = s:option(Flag, "flag_obfs", translate("Enable Obfuscation"))
|
|
|
o:depends("type", "hysteria")
|
|
o:depends("type", "hysteria")
|
|
|
-o:value("udp", translate("udp"))
|
|
|
|
|
-o:value("wechat-video", translate("wechat-video"))
|
|
|
|
|
-o:value("faketcp", translate("faketcp"))
|
|
|
|
|
-o.default = "udp"
|
|
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
+o.default = "0"
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Value, "obfs_type", translate("Obfuscation Type"))
|
|
|
|
|
+o:depends({type = "hysteria", flag_obfs = "1"})
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+o.default = "salamander"
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Value, "salamander", translate("Obfuscation Password"))
|
|
|
|
|
+o:depends({type = "hysteria", flag_obfs = "1"})
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+o.default = "cry_me_a_r1ver"
|
|
|
|
|
|
|
|
-o = s:option(ListValue, "auth_type", translate("Authentication type"))
|
|
|
|
|
|
|
+o = s:option(Flag, "flag_quicparam", translate("Hysterir QUIC parameters"))
|
|
|
o:depends("type", "hysteria")
|
|
o:depends("type", "hysteria")
|
|
|
-o:value("0", translate("disabled"))
|
|
|
|
|
-o:value("1", translate("base64"))
|
|
|
|
|
-o:value("2", translate("string"))
|
|
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
+o.default = "0"
|
|
|
|
|
|
|
|
-o = s:option(Value, "auth_payload", translate("Authentication payload"))
|
|
|
|
|
-o:depends({type = "hysteria", auth_type = "1"})
|
|
|
|
|
-o:depends({type = "hysteria", auth_type = "2"})
|
|
|
|
|
|
|
+--[[Hysteria2 QUIC parameters setting]]
|
|
|
|
|
+o = s:option(Value, "initstreamreceivewindow", translate("QUIC initStreamReceiveWindow"))
|
|
|
|
|
+o:depends({type = "hysteria",flag_quicparam = "1"})
|
|
|
|
|
+o.datatype = "uinteger"
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
+o.default = "8388608"
|
|
|
|
|
|
|
|
-o = s:option(Value, "recv_window", translate("QUIC connection receive window"))
|
|
|
|
|
|
|
+o = s:option(Value, "maxstreamseceivewindow", translate("QUIC maxStreamReceiveWindow"))
|
|
|
|
|
+o:depends({type = "hysteria",flag_quicparam = "1"})
|
|
|
o.datatype = "uinteger"
|
|
o.datatype = "uinteger"
|
|
|
-o:depends("type", "hysteria")
|
|
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
+o.default = "8388608"
|
|
|
|
|
|
|
|
-o = s:option(Value, "recv_window_conn", translate("QUIC stream receive window"))
|
|
|
|
|
|
|
+o = s:option(Value, "initconnreceivewindow", translate("QUIC initConnReceiveWindow"))
|
|
|
|
|
+o:depends({type = "hysteria",flag_quicparam = "1"})
|
|
|
o.datatype = "uinteger"
|
|
o.datatype = "uinteger"
|
|
|
-o:depends("type", "hysteria")
|
|
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
+o.default = "20971520"
|
|
|
|
|
|
|
|
-o = s:option(Flag, "disable_mtu_discovery", translate("Disable Path MTU discovery"))
|
|
|
|
|
-o:depends("type", "hysteria")
|
|
|
|
|
|
|
+o = s:option(Value, "maxconnreceivewindow", translate("QUIC maxConnReceiveWindow"))
|
|
|
|
|
+o:depends({type = "hysteria",flag_quicparam = "1"})
|
|
|
|
|
+o.datatype = "uinteger"
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
+o.default = "20971520"
|
|
|
|
|
|
|
|
-o = s:option(Flag, "lazy_start", translate("Lazy Start"))
|
|
|
|
|
-o:depends("type", "hysteria")
|
|
|
|
|
|
|
+o = s:option(Value, "maxincomingstreams", translate("QUIC maxIncomingStreams"))
|
|
|
|
|
+o:depends({type = "hysteria",flag_quicparam = "1"})
|
|
|
|
|
+o.datatype = "uinteger"
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+o.default = "1024"
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Value, "maxidletimeout", translate("QUIC maxIdleTimeout(Unit:second)"))
|
|
|
|
|
+o:depends({type = "hysteria",flag_quicparam = "1"})
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+o.default = "30s"
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Value, "keepaliveperiod", translate("The keep-alive period.(Unit:second)"))
|
|
|
|
|
+o:depends({type = "hysteria",flag_quicparam = "1"})
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+o.default = "10s"
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Flag, "disablepathmtudiscovery", translate("Disable Path MTU discovery"))
|
|
|
|
|
+o:depends({type = "hysteria",flag_quicparam = "1"})
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
+o.default = false
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+--[[ Shadow-TLS Options ]]
|
|
|
|
|
+o = s:option(ListValue, "shadowtls_protocol", translate("shadowTLS protocol Version"))
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
|
|
+o:value("v3", translate("Enable V3 protocol."))
|
|
|
|
|
+o:value("v2", translate("Enable V2 protocol."))
|
|
|
|
|
+o.default = "v3"
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Flag, "strict", translate("TLS 1.3 Strict mode"))
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
|
|
+o.default = "1"
|
|
|
|
|
+o.rmempty = false
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Flag, "fastopen", translate("TCP Fast Open"))
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
|
|
+o.default = "0"
|
|
|
|
|
+o.rmempty = false
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Flag, "disable_nodelay", translate("Disable TCP No_delay"))
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
o.default = "0"
|
|
o.default = "0"
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Value, "shadowtls_sni", translate("shadow-TLS SNI"))
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
|
|
+o.datatype = "host"
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+o.default = ""
|
|
|
|
|
+
|
|
|
|
|
+--[[ add a ListValue for Choose chain type,sslocal or vmess ]]
|
|
|
|
|
+o = s:option(ListValue, "chain_type", translate("Shadow-TLS ChainPoxy type"))
|
|
|
|
|
+o:depends("type", "shadowtls")
|
|
|
|
|
+if is_finded("sslocal") then
|
|
|
|
|
+ o:value("sslocal", translate("Shadowsocks-rust Version"))
|
|
|
|
|
+end
|
|
|
|
|
+if is_finded("xray") or is_finded("v2ray") then
|
|
|
|
|
+ o:value("vmess", translate("Vmess Protocol"))
|
|
|
|
|
+end
|
|
|
|
|
+o.default = "sslocal"
|
|
|
|
|
+o.rmempty = false
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Value, "sslocal_password",translate("Shadowsocks password"))
|
|
|
|
|
+o:depends({type = "shadowtls", chain_type = "sslocal"})
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(ListValue, "sslocal_method", translate("Encrypt Method"))
|
|
|
|
|
+o:depends({type = "shadowtls", chain_type = "sslocal"})
|
|
|
|
|
+for _, v in ipairs(encrypt_methods_ss) do
|
|
|
|
|
+ o:value(v)
|
|
|
|
|
+end
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(Value, "vmess_uuid", translate("Vmess UUID"))
|
|
|
|
|
+o:depends({type = "shadowtls", chain_type = "vmess"})
|
|
|
|
|
+o.rmempty = false
|
|
|
|
|
+o.default = uuid
|
|
|
|
|
+
|
|
|
|
|
+o = s:option(ListValue, "vmess_method", translate("Encrypt Method"))
|
|
|
|
|
+o:depends({type = "shadowtls", chain_type = "vmess"})
|
|
|
|
|
+for _, v in ipairs(securitys) do
|
|
|
|
|
+ o:value(v, v:lower())
|
|
|
|
|
+end
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+o.default="auto"
|
|
|
|
|
|
|
|
-- [[ TUIC ]]
|
|
-- [[ TUIC ]]
|
|
|
-- TuicNameId
|
|
-- TuicNameId
|
|
@@ -420,29 +542,29 @@ o.rmempty = true
|
|
|
o = s:option(Value, "send_window", translate("TUIC send window"))
|
|
o = s:option(Value, "send_window", translate("TUIC send window"))
|
|
|
o:depends("type", "tuic")
|
|
o:depends("type", "tuic")
|
|
|
o.datatype = "uinteger"
|
|
o.datatype = "uinteger"
|
|
|
-o.default = 16777216
|
|
|
|
|
|
|
+o.default = 20971520
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
|
|
|
o = s:option(Value, "receive_window", translate("TUIC receive window"))
|
|
o = s:option(Value, "receive_window", translate("TUIC receive window"))
|
|
|
o:depends("type", "tuic")
|
|
o:depends("type", "tuic")
|
|
|
o.datatype = "uinteger"
|
|
o.datatype = "uinteger"
|
|
|
-o.default = 8388608
|
|
|
|
|
|
|
+o.default = 10485760
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
|
|
|
o = s:option(Flag, "disable_sni", translate("Disable SNI"))
|
|
o = s:option(Flag, "disable_sni", translate("Disable SNI"))
|
|
|
o:depends("type", "tuic")
|
|
o:depends("type", "tuic")
|
|
|
-o.default = 0
|
|
|
|
|
|
|
+o.default = "0"
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
|
|
|
o = s:option(Flag, "zero_rtt_handshake", translate("Enable 0-RTT QUIC handshake"))
|
|
o = s:option(Flag, "zero_rtt_handshake", translate("Enable 0-RTT QUIC handshake"))
|
|
|
o:depends("type", "tuic")
|
|
o:depends("type", "tuic")
|
|
|
-o.default = 0
|
|
|
|
|
|
|
+o.default = "0"
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
|
|
|
---Tuic settings for the local inbound socks5 server
|
|
|
|
|
-o = s:option(Flag, "tuic_dual_stack", translate("Set if the listening socket should be dual-stack"))
|
|
|
|
|
|
|
+-- Tuic settings for the local inbound socks5 server
|
|
|
|
|
+o = s:option(Flag, "tuic_dual_stack", translate("Dual-stack Listening Socket"))
|
|
|
o:depends("type", "tuic")
|
|
o:depends("type", "tuic")
|
|
|
-o.default = 0
|
|
|
|
|
|
|
+o.default = "0"
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
|
|
|
o = s:option(Value, "tuic_max_package_size", translate("Maximum packet size the socks5 server can receive from external"))
|
|
o = s:option(Value, "tuic_max_package_size", translate("Maximum packet size the socks5 server can receive from external"))
|
|
@@ -679,7 +801,6 @@ o.rmempty = true
|
|
|
|
|
|
|
|
o = s:option(Value, "seed", translate("Obfuscate password (optional)"))
|
|
o = s:option(Value, "seed", translate("Obfuscate password (optional)"))
|
|
|
o:depends("transport", "kcp")
|
|
o:depends("transport", "kcp")
|
|
|
-o:depends("type", "hysteria")
|
|
|
|
|
o.rmempty = true
|
|
o.rmempty = true
|
|
|
|
|
|
|
|
o = s:option(Flag, "congestion", translate("Congestion"))
|
|
o = s:option(Flag, "congestion", translate("Congestion"))
|
|
@@ -791,6 +912,11 @@ o:depends("tls", true)
|
|
|
o:depends("type", "hysteria")
|
|
o:depends("type", "hysteria")
|
|
|
o.description = translate("If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates.")
|
|
o.description = translate("If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates.")
|
|
|
|
|
|
|
|
|
|
+-- [[ Hysteria2 TLS pinSHA256 ]] --
|
|
|
|
|
+o = s:option(Value, "pinsha256", translate("Certificate fingerprint"))
|
|
|
|
|
+o:depends({type ="hysteria", insecure = true })
|
|
|
|
|
+o.rmempty = true
|
|
|
|
|
+
|
|
|
-- [[ Mux ]]--
|
|
-- [[ Mux ]]--
|
|
|
o = s:option(Flag, "mux", translate("Mux"))
|
|
o = s:option(Flag, "mux", translate("Mux"))
|
|
|
o.rmempty = false
|
|
o.rmempty = false
|
|
@@ -864,6 +990,7 @@ o.rmempty = true
|
|
|
o.default = "0"
|
|
o.default = "0"
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+o:depends("type", "ss_rust")
|
|
|
o:depends("type", "trojan")
|
|
o:depends("type", "trojan")
|
|
|
o:depends("type", "hysteria")
|
|
o:depends("type", "hysteria")
|
|
|
|
|
|
|
@@ -882,22 +1009,26 @@ if is_finded("kcptun-client") then
|
|
|
o.default = "0"
|
|
o.default = "0"
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+ o:depends("type", "ss_rust")
|
|
|
|
|
|
|
|
o = s:option(Value, "kcp_port", translate("KcpTun Port"))
|
|
o = s:option(Value, "kcp_port", translate("KcpTun Port"))
|
|
|
o.datatype = "port"
|
|
o.datatype = "port"
|
|
|
o.default = 4000
|
|
o.default = 4000
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+ o:depends("type", "ss_rust")
|
|
|
|
|
|
|
|
o = s:option(Value, "kcp_password", translate("KcpTun Password"))
|
|
o = s:option(Value, "kcp_password", translate("KcpTun Password"))
|
|
|
o.password = true
|
|
o.password = true
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+ o:depends("type", "ss_rust")
|
|
|
|
|
|
|
|
o = s:option(Value, "kcp_param", translate("KcpTun Param"))
|
|
o = s:option(Value, "kcp_param", translate("KcpTun Param"))
|
|
|
o.default = "--nocomp"
|
|
o.default = "--nocomp"
|
|
|
o:depends("type", "ssr")
|
|
o:depends("type", "ssr")
|
|
|
o:depends("type", "ss")
|
|
o:depends("type", "ss")
|
|
|
|
|
+ o:depends("type", "ss_rust")
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
return m
|
|
return m
|