From a047c49bfebbf164ccbefdf3f124d2fddea34852 Mon Sep 17 00:00:00 2001
From: xiaorouji <60100640+xiaorouji@users.noreply.github.com>
Date: Wed, 6 Sep 2023 19:57:23 +0800
Subject: [PATCH] luci: remove v2ray
Due to the incompatibility of the data structure, remove it.
---
luci-app-passwall/Makefile | 6 -
.../model/cbi/passwall/client/acl_config.lua | 3 +-
.../model/cbi/passwall/client/global.lua | 18 +-
.../model/cbi/passwall/client/node_list.lua | 2 +-
.../cbi/passwall/client/node_subscribe.lua | 5 -
.../passwall/client/node_subscribe_config.lua | 5 -
.../model/cbi/passwall/client/other.lua | 5 +-
.../luasrc/model/cbi/passwall/client/rule.lua | 5 +-
.../model/cbi/passwall/client/shunt_rules.lua | 2 +-
.../cbi/passwall/client/socks_config.lua | 3 +-
.../model/cbi/passwall/client/type/ray.lua | 372 ++++++------------
.../model/cbi/passwall/server/index.lua | 2 +-
.../model/cbi/passwall/server/type/ray.lua | 287 ++++----------
luci-app-passwall/luasrc/passwall/api.lua | 4 +-
luci-app-passwall/luasrc/passwall/com.lua | 19 +-
.../luasrc/passwall/server_app.lua | 3 -
.../luasrc/passwall/util_xray.lua | 10 +-
.../passwall/node_list/link_share_man.htm | 15 +-
.../root/usr/share/passwall/0_default_config | 1 -
.../root/usr/share/passwall/app.sh | 115 +++---
.../root/usr/share/passwall/rule_update.lua | 14 +-
.../root/usr/share/passwall/subscribe.lua | 15 -
22 files changed, 287 insertions(+), 624 deletions(-)
diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile
index f10312f22..48cba4985 100644
--- a/luci-app-passwall/Makefile
+++ b/luci-app-passwall/Makefile
@@ -27,7 +27,6 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client \
- CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Geodata \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray \
@@ -55,7 +54,6 @@ LUCI_DEPENDS:=+coreutils +coreutils-base64 +coreutils-nohup +curl \
+PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_GO:trojan-go \
+PACKAGE_$(PKG_NAME)_INCLUDE_Trojan_Plus:trojan-plus \
+PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client:tuic-client \
- +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray-core \
+PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Geodata:v2ray-geoip \
+PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Geodata:v2ray-geosite \
+PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin:v2ray-plugin \
@@ -155,10 +153,6 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client
depends on aarch64||arm||i386||x86_64
default n
-config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray
- bool "Include V2ray"
- default y if aarch64||arm||i386||x86_64
-
config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Geodata
bool "Include V2ray_Geodata"
default n
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
index 2fd24d0fd..1a0f65156 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
@@ -1,7 +1,6 @@
local api = require "luci.passwall.api"
local appname = api.appname
local sys = api.sys
-local has_v2ray = api.finded_com("v2ray")
local has_xray = api.finded_com("xray")
local has_chnlist = api.fs.access("/usr/share/passwall/rules/chnlist")
@@ -254,7 +253,7 @@ o:value("208.67.222.222", "208.67.222.222 (OpenDNS)")
o:depends("dns_mode", "dns2socks")
o:depends("v2ray_dns_mode", "tcp")
-if has_v2ray or has_xray then
+if has_xray then
o = s:option(Value, "remote_dns_doh", translate("Remote DNS DoH"))
o:value("https://1.1.1.1/dns-query", "CloudFlare")
o:value("https://1.1.1.2/dns-query", "CloudFlare-Security")
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
index b0fdcb792..c8aac72de 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
@@ -3,7 +3,6 @@ local appname = api.appname
local uci = api.uci
local datatypes = api.datatypes
local has_singbox = api.finded_com("singbox")
-local has_v2ray = api.finded_com("v2ray")
local has_xray = api.finded_com("xray")
local has_chnlist = api.fs.access("/usr/share/passwall/rules/chnlist")
@@ -95,7 +94,7 @@ udp_node:value("nil", translate("Close"))
udp_node:value("tcp", translate("Same as the tcp node"))
-- 分流
-if (has_singbox or has_v2ray or has_xray) and #nodes_table > 0 then
+if (has_singbox or has_xray) and #nodes_table > 0 then
local normal_list = {}
local balancing_list = {}
local shunt_list = {}
@@ -128,14 +127,11 @@ if (has_singbox or has_v2ray or has_xray) and #nodes_table > 0 then
if #normal_list > 0 then
for k, v in pairs(shunt_list) do
local vid = v.id
- -- shunt node type, Sing-Box or V2ray or Xray
+ -- shunt node type, Sing-Box or Xray
local type = s:taboption("Main", ListValue, vid .. "-type", translate("Type"))
if has_singbox then
type:value("sing-box", "Sing-Box")
end
- if has_v2ray then
- type:value("V2ray", translate("V2ray"))
- end
if has_xray then
type:value("Xray", translate("Xray"))
end
@@ -163,7 +159,7 @@ if (has_singbox or has_v2ray or has_xray) and #nodes_table > 0 then
o.cfgvalue = get_cfgvalue(v.id, "main_node")
o.write = get_write(v.id, "main_node")
- if (has_singbox and has_v2ray and has_xray) or (v.type == "sing-box" and not has_singbox) or (v.type == "V2ray" and not has_v2ray) or (v.type == "Xray" and not has_xray) then
+ if (has_singbox and has_xray) or (v.type == "sing-box" and not has_singbox) or (v.type == "Xray" and not has_xray) then
type:depends("tcp_node", v.id)
else
type:depends("tcp_node", "hide") --不存在的依赖,即始终隐藏
@@ -251,7 +247,7 @@ tcp_node_socks_port.default = 1070
tcp_node_socks_port.datatype = "port"
tcp_node_socks_port:depends({ tcp_node = "nil", ["!reverse"] = true })
--[[
-if has_singbox or has_v2ray or has_xray then
+if has_singbox or has_xray then
tcp_node_http_port = s:taboption("Main", Value, "tcp_node_http_port", translate("TCP Node") .. " HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use"))
tcp_node_http_port.default = 0
tcp_node_http_port.datatype = "port"
@@ -452,7 +448,7 @@ o.rmempty = false
o = s:taboption("log", Flag, "close_log_udp", translatef("%s Node Log Close", "UDP"))
o.rmempty = false
-loglevel = s:taboption("log", ListValue, "loglevel", "Sing-Box/V2ray/Xray " .. translate("Log Level"))
+loglevel = s:taboption("log", ListValue, "loglevel", "Sing-Box/Xray " .. translate("Log Level"))
loglevel.default = "warning"
loglevel:value("debug")
loglevel:value("info")
@@ -524,7 +520,7 @@ o.default = n + 1080
o.datatype = "port"
o.rmempty = false
-if has_singbox or has_v2ray or has_xray then
+if has_singbox or has_xray then
o = s:option(Value, "http_port", "HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use"))
o.default = 0
o.datatype = "port"
@@ -534,7 +530,7 @@ for k, v in pairs(nodes_table) do
tcp_node:value(v.id, v["remark"])
udp_node:value(v.id, v["remark"])
if v.type == "Socks" then
- if has_singbox or has_v2ray or has_xray then
+ if has_singbox or has_xray then
socks_node:value(v.id, v["remark"])
end
else
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua
index 400d7df6e..be71197e4 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua
@@ -94,7 +94,7 @@ o.cfgvalue = function(t, n)
local remarks = m:get(n, "remarks") or ""
local type = m:get(n, "type") or ""
str = str .. string.format("", appname, n, type)
- if type == "sing-box" or type == "V2ray" or type == "Xray" then
+ if type == "sing-box" or type == "Xray" then
local protocol = m:get(n, "protocol")
if protocol == "_balancing" then
protocol = translate("Balancing")
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua
index 39f35cc70..0838d86b9 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua
@@ -4,7 +4,6 @@ local has_ss = api.is_finded("ss-redir")
local has_ss_rust = api.is_finded("sslocal")
local has_trojan_plus = api.is_finded("trojan-plus")
local has_singbox = api.finded_com("singbox")
-local has_v2ray = api.finded_com("v2ray")
local has_xray = api.finded_com("xray")
local has_trojan_go = api.finded_com("trojan-go")
local ss_aead_type = {}
@@ -22,10 +21,6 @@ if has_singbox then
trojan_type[#trojan_type + 1] = "sing-box"
ss_aead_type[#ss_aead_type + 1] = "sing-box"
end
-if has_v2ray then
- trojan_type[#trojan_type + 1] = "v2ray"
- ss_aead_type[#ss_aead_type + 1] = "v2ray"
-end
if has_xray then
trojan_type[#trojan_type + 1] = "xray"
ss_aead_type[#ss_aead_type + 1] = "xray"
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua
index a2e31b509..62fd2ee8f 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua
@@ -5,7 +5,6 @@ local has_ss = api.is_finded("ss-redir")
local has_ss_rust = api.is_finded("sslocal")
local has_trojan_plus = api.is_finded("trojan-plus")
local has_singbox = api.finded_com("singbox")
-local has_v2ray = api.finded_com("v2ray")
local has_xray = api.finded_com("xray")
local has_trojan_go = api.finded_com("trojan-go")
local ss_aead_type = {}
@@ -23,10 +22,6 @@ if has_singbox then
trojan_type[#trojan_type + 1] = "sing-box"
ss_aead_type[#ss_aead_type + 1] = "sing-box"
end
-if has_v2ray then
- trojan_type[#trojan_type + 1] = "v2ray"
- ss_aead_type[#ss_aead_type + 1] = "v2ray"
-end
if has_xray then
trojan_type[#trojan_type + 1] = "xray"
ss_aead_type[#ss_aead_type + 1] = "xray"
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua
index bb92447d7..1e1709c2a 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/other.lua
@@ -2,7 +2,6 @@ local api = require "luci.passwall.api"
local appname = api.appname
local fs = api.fs
local has_singbox = api.finded_com("singbox")
-local has_v2ray = api.finded_com("v2ray")
local has_xray = api.finded_com("xray")
local has_fw3 = api.is_finded("fw3")
local has_fw4 = api.is_finded("fw4")
@@ -141,8 +140,8 @@ o = s:option(Flag, "accept_icmpv6", translate("Hijacking ICMPv6 (IPv6 PING)"))
o:depends("ipv6_tproxy", true)
o.default = 0
-if has_v2ray or has_xray then
- s = m:section(TypedSection, "global_xray", "V2Ray/Xray " .. translate("Settings"))
+if has_xray then
+ s = m:section(TypedSection, "global_xray", "Xray " .. translate("Settings"))
s.anonymous = true
s.addremove = false
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
index 78ecd2455..f15133574 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
@@ -1,6 +1,5 @@
local api = require "luci.passwall.api"
local appname = api.appname
-local has_v2ray = api.finded_com("v2ray")
local has_xray = api.finded_com("xray")
m = Map(appname)
@@ -61,12 +60,12 @@ for e = 0, 23 do o:value(e, e .. translate("oclock")) end
o.default = 0
o:depends("auto_update", true)
-if has_v2ray or has_xray then
+if has_xray then
o = s:option(Value, "v2ray_location_asset", translate("Location of V2ray/Xray asset"), translate("This variable specifies a directory where geoip.dat and geosite.dat files are."))
o.default = "/usr/share/v2ray/"
o.rmempty = false
- s = m:section(TypedSection, "shunt_rules", "V2ray/Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "")
+ s = m:section(TypedSection, "shunt_rules", "Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "")
s.template = "cbi/tblsection"
s.anonymous = false
s.addremove = true
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua
index 1e457b8e0..2e84e907b 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/shunt_rules.lua
@@ -2,7 +2,7 @@ local api = require "luci.passwall.api"
local appname = api.appname
local datatypes = api.datatypes
-m = Map(appname, "V2ray/Xray " .. translate("Shunt Rule"))
+m = Map(appname, "Xray " .. translate("Shunt Rule"))
m.redirect = api.url()
s = m:section(NamedSection, arg[1], "shunt_rules", "")
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
index 3f3960f0d..784b4e11c 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
@@ -1,7 +1,6 @@
local api = require "luci.passwall.api"
local appname = api.appname
local uci = api.uci
-local has_v2ray = api.finded_com("v2ray")
local has_xray = api.finded_com("xray")
m = Map(appname)
@@ -54,7 +53,7 @@ o.default = n + 1080
o.datatype = "port"
o.rmempty = false
-if has_v2ray or has_xray then
+if has_xray then
o = s:option(Value, "http_port", "HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use"))
o.default = 0
o.datatype = "port"
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua
index 21e44c90e..6c268447f 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua
@@ -2,13 +2,15 @@ local m, s = ...
local api = require "luci.passwall.api"
-if not api.finded_com("xray") and not api.finded_com("v2ray") then
+if not api.finded_com("xray") then
return
end
local appname = api.appname
local uci = api.uci
+local type_name = "Xray"
+
local option_prefix = "xray_"
local function option_name(name)
@@ -21,52 +23,20 @@ local function rm_prefix_cfgvalue(self, section)
end
end
local function rm_prefix_write(self, section, value)
- if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then
+ if s.fields["type"]:formvalue(arg[1]) == type_name then
if self.option:find(option_prefix) == 1 then
m:set(section, self.option:sub(1 + #option_prefix), value)
end
end
end
local function rm_prefix_remove(self, section, value)
- if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then
+ if s.fields["type"]:formvalue(arg[1]) == type_name then
if self.option:find(option_prefix) == 1 then
m:del(section, self.option:sub(1 + #option_prefix))
end
end
end
-local function add_xray_depends(o, field, value)
- local deps = { type = "Xray" }
- if field then
- if type(field) == "string" then
- deps[field] = value
- else
- for key, value in pairs(field) do
- deps[key] = value
- end
- end
- end
- o:depends(deps)
-end
-
-local function add_v2ray_depends(o, field, value)
- local deps = { type = "V2ray" }
- if field then
- if type(field) == "string" then
- deps[field] = value
- else
- for key, value in pairs(field) do
- deps[key] = value
- end
- end
- end
- o:depends(deps)
-end
-
-local v_ss_encrypt_method_list = {
- "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305"
-}
-
local x_ss_encrypt_method_list = {
"aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
}
@@ -79,12 +49,7 @@ local header_type_list = {
-- [[ Xray ]]
-if api.finded_com("xray") then
- s.fields["type"]:value("Xray", translate("Xray"))
-end
-if api.finded_com("v2ray") then
- s.fields["type"]:value("V2ray", translate("V2ray"))
-end
+s.fields["type"]:value(type_name, "Xray")
o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
o:value("vmess", translate("Vmess"))
@@ -97,12 +62,10 @@ o:value("wireguard", translate("WireGuard"))
o:value("_balancing", translate("Balancing"))
o:value("_shunt", translate("Shunt"))
o:value("_iface", translate("Custom Interface") .. " (Only Support Xray)")
-add_xray_depends(o)
-add_v2ray_depends(o)
o = s:option(Value, option_name("iface"), translate("Interface"))
o.default = "eth1"
-add_xray_depends(o, { [option_name("protocol")] = "_iface" })
+o:depends({ [option_name("protocol")] = "_iface" })
local nodes_table = {}
local balancers_table = {}
@@ -130,44 +93,37 @@ end
-- 负载均衡列表
local o = s:option(DynamicList, option_name("balancing_node"), translate("Load balancing node list"), translate("Load balancing node list, document"))
-add_xray_depends(o, { [option_name("protocol")] = "_balancing" })
-add_v2ray_depends(o, { [option_name("protocol")] = "_balancing" })
+o:depends({ [option_name("protocol")] = "_balancing" })
for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end
local o = s:option(ListValue, option_name("balancingStrategy"), translate("Balancing Strategy"))
-add_xray_depends(o, { [option_name("protocol")] = "_balancing" })
-add_v2ray_depends(o, { [option_name("protocol")] = "_balancing" })
+o:depends({ [option_name("protocol")] = "_balancing" })
o:value("random")
o:value("leastPing")
o.default = "random"
-- 探测地址
local o = s:option(Flag, option_name("useCustomProbeUrl"), translate("Use Custome Probe URL"), translate("By default the built-in probe URL will be used, enable this option to use a custom probe URL."))
-add_xray_depends(o, { [option_name("balancingStrategy")] = "leastPing" })
-add_v2ray_depends(o, { [option_name("balancingStrategy")] = "leastPing" })
+o:depends({ [option_name("balancingStrategy")] = "leastPing" })
local o = s:option(Value, option_name("probeUrl"), translate("Probe URL"))
-add_xray_depends(o, { [option_name("useCustomProbeUrl")] = true })
-add_v2ray_depends(o, { [option_name("useCustomProbeUrl")] = true })
+o:depends({ [option_name("useCustomProbeUrl")] = true })
o.default = "https://www.google.com/generate_204"
o.description = translate("The URL used to detect the connection status.")
-- 探测间隔
local o = s:option(Value, option_name("probeInterval"), translate("Probe Interval"))
-add_xray_depends(o, { [option_name("balancingStrategy")] = "leastPing" })
-add_v2ray_depends(o, { [option_name("balancingStrategy")] = "leastPing" })
+o:depends({ [option_name("balancingStrategy")] = "leastPing" })
o.default = "1m"
o.description = translate("The interval between initiating probes. Every time this time elapses, a server status check is performed on a server. The time format is numbers + units, such as '10s', '2h45m', and the supported time units are ns
, us
, ms
, s
, m
, h
, which correspond to nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively.")
-- [[ 分流模块 ]]
if #nodes_table > 0 then
o = s:option(Flag, option_name("preproxy_enabled"), translate("Preproxy"))
- add_xray_depends(o, { [option_name("protocol")] = "_shunt" })
- add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" })
+ o:depends({ [option_name("protocol")] = "_shunt" })
o = s:option(Value, option_name("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default
) has a separate switch that controls whether this rule uses the pre-proxy or not."))
- add_xray_depends(o, { [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
- add_v2ray_depends(o, { [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
+ o:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
for k, v in pairs(balancers_table) do
o:value(v.id, v.remarks)
end
@@ -186,8 +142,7 @@ uci:foreach(appname, "shunt_rules", function(e)
o:value("_default", translate("Default"))
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
- add_xray_depends(o, { [option_name("protocol")] = "_shunt" })
- add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" })
+ o:depends({ [option_name("protocol")] = "_shunt" })
if #nodes_table > 0 then
for k, v in pairs(balancers_table) do
@@ -203,7 +158,6 @@ uci:foreach(appname, "shunt_rules", function(e)
for k, v in pairs(nodes_table) do
o:value(v.id, v.remarks)
pt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name(e[".name"])] = v.id })
- add_v2ray_depends(o, { [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name(e[".name"])] = v.id })
end
end
end
@@ -215,12 +169,10 @@ o.rawhtml = true
o.cfgvalue = function(t, n)
return string.format('%s', translate("No shunt rules? Click me to go to add."))
end
-add_xray_depends(o, { [option_name("protocol")] = "_shunt" })
-add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" })
+o:depends({ [option_name("protocol")] = "_shunt" })
local o = s:option(Value, option_name("default_node"), string.format('* %s', translate("Default")))
-add_xray_depends(o, { [option_name("protocol")] = "_shunt" })
-add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" })
+o:depends({ [option_name("protocol")] = "_shunt" })
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
@@ -250,14 +202,12 @@ o.description = "
- " .. translate("'AsIs': Only use domain for routi
.. "
- " .. translate("'IPIfNonMatch': When no rule matches current domain, resolves it into IP addresses (A or AAAA records) and try all rules again.")
.. "
- " .. translate("'IPOnDemand': As long as there is a IP-based rule, resolves the domain into IP immediately.")
.. "
"
-add_xray_depends(o, { [option_name("protocol")] = "_shunt" })
-add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" })
+o:depends({ [option_name("protocol")] = "_shunt" })
o = s:option(ListValue, option_name("domainMatcher"), translate("Domain matcher"))
o:value("hybrid")
o:value("linear")
-add_xray_depends(o, { [option_name("protocol")] = "_shunt" })
-add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" })
+o:depends({ [option_name("protocol")] = "_shunt" })
-- [[ 分流模块 End ]]
@@ -270,111 +220,80 @@ local protocols = s.fields[option_name("protocol")].keylist
if #protocols > 0 then
for index, value in ipairs(protocols) do
if not value:find("_") then
- add_xray_depends(s.fields[option_name("address")], { [option_name("protocol")] = value })
- add_v2ray_depends(s.fields[option_name("address")], { [option_name("protocol")] = value })
- add_xray_depends(s.fields[option_name("port")], { [option_name("protocol")] = value })
- add_v2ray_depends(s.fields[option_name("port")], { [option_name("protocol")] = value })
+ s.fields[option_name("address")]:depends({ [option_name("protocol")] = value })
+ s.fields[option_name("port")]:depends({ [option_name("protocol")] = value })
end
end
end
o = s:option(Value, option_name("username"), translate("Username"))
-add_xray_depends(o, { [option_name("protocol")] = "http" })
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "http" })
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "http" })
+o:depends({ [option_name("protocol")] = "socks" })
o = s:option(Value, option_name("password"), translate("Password"))
o.password = true
-add_xray_depends(o, { [option_name("protocol")] = "http" })
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_xray_depends(o, { [option_name("protocol")] = "trojan" })
-add_v2ray_depends(o, { [option_name("protocol")] = "http" })
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
+o:depends({ [option_name("protocol")] = "http" })
+o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "trojan" })
o = s:option(ListValue, option_name("security"), translate("Encrypt Method"))
for a, t in ipairs(security_list) do o:value(t) end
-add_xray_depends(o, { [option_name("protocol")] = "vmess" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
+o:depends({ [option_name("protocol")] = "vmess" })
o = s:option(Value, option_name("encryption"), translate("Encrypt Method"))
o.default = "none"
o:value("none")
-add_xray_depends(o, { [option_name("protocol")] = "vless" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
-
-o = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method"))
-o.not_rewrite = true
-for a, t in ipairs(v_ss_encrypt_method_list) do o:value(t) end
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-function o.cfgvalue(self, section)
- return m:get(section, "method")
-end
-function o.write(self, section, value)
- if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then
- m:set(section, "method", value)
- end
-end
+o:depends({ [option_name("protocol")] = "vless" })
o = s:option(ListValue, option_name("x_ss_encrypt_method"), translate("Encrypt Method"))
o.not_rewrite = true
for a, t in ipairs(x_ss_encrypt_method_list) do o:value(t) end
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
function o.cfgvalue(self, section)
return m:get(section, "method")
end
function o.write(self, section, value)
- if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then
+ if s.fields["type"]:formvalue(arg[1]) == type_name then
m:set(section, "method", value)
end
end
o = s:option(Flag, option_name("iv_check"), translate("IV Check"))
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "aes-128-gcm" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "aes-256-gcm" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "chacha20-poly1305" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "xchacha20-poly1305" })
+o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "aes-128-gcm" })
+o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "aes-256-gcm" })
+o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "chacha20-poly1305" })
+o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "xchacha20-poly1305" })
o = s:option(Flag, option_name("uot"), translate("UDP over TCP"), translate("Need Xray-core or sing-box as server side."))
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-aes-128-gcm" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-aes-256-gcm" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-chacha20-poly1305" })
+o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-aes-128-gcm" })
+o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-aes-256-gcm" })
+o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("x_ss_encrypt_method")] = "2022-blake3-chacha20-poly1305" })
o = s:option(Value, option_name("uuid"), translate("ID"))
o.password = true
-add_xray_depends(o, { [option_name("protocol")] = "vmess" })
-add_xray_depends(o, { [option_name("protocol")] = "vless" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
+o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [option_name("protocol")] = "vless" })
o = s:option(ListValue, option_name("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "tcp" })
+o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "tcp" })
o = s:option(Flag, option_name("tls"), translate("TLS"))
o.default = 0
-add_xray_depends(o, { [option_name("protocol")] = "vmess" })
-add_xray_depends(o, { [option_name("protocol")] = "vless" })
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
-add_xray_depends(o, { [option_name("protocol")] = "trojan" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
o = s:option(Flag, option_name("reality"), translate("REALITY"), translate("Only recommend to use with VLESS-TCP-XTLS-Vision."))
o.default = 0
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("transport")] = "tcp" })
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("transport")] = "h2" })
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("transport")] = "grpc" })
+o:depends({ [option_name("tls")] = true, [option_name("transport")] = "tcp" })
+o:depends({ [option_name("tls")] = true, [option_name("transport")] = "h2" })
+o:depends({ [option_name("tls")] = true, [option_name("transport")] = "grpc" })
o = s:option(ListValue, option_name("alpn"), translate("alpn"))
o.default = "default"
@@ -382,38 +301,34 @@ o:value("default", translate("Default"))
o:value("h2,http/1.1")
o:value("h2")
o:value("http/1.1")
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = false })
-add_v2ray_depends(o, { [option_name("tls")] = true })
+o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
-- o = s:option(Value, option_name("minversion"), translate("minversion"))
-- o.default = "1.3"
-- o:value("1.3")
--- add_xray_depends(o, { [option_name("tls")] = true })
--- add_v2ray_depends(o, { [option_name("tls")] = true })
+-- o:depends({ [option_name("tls")] = true })
o = s:option(Value, option_name("tls_serverName"), translate("Domain"))
-add_xray_depends(o, { [option_name("tls")] = true })
-add_v2ray_depends(o, { [option_name("tls")] = true })
+o:depends({ [option_name("tls")] = true })
o = s:option(Flag, option_name("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
o.default = "0"
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = false })
-add_v2ray_depends(o, { [option_name("tls")] = true })
+o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
-- [[ REALITY部分 ]] --
o = s:option(Value, option_name("reality_publicKey"), translate("Public Key"))
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true })
+o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
o = s:option(Value, option_name("reality_shortId"), translate("Short Id"))
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true })
+o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
o = s:option(Value, option_name("reality_spiderX"), translate("Spider X"))
o.placeholder = "/"
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true })
+o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
o = s:option(Flag, option_name("utls"), translate("uTLS"))
o.default = "0"
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
o = s:option(ListValue, option_name("fingerprint"), translate("Finger Print"))
o:value("chrome")
@@ -427,8 +342,8 @@ o:value("android")
o:value("random")
o:value("randomized")
o.default = "chrome"
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("utls")] = true })
-add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true })
+o:depends({ [option_name("tls")] = true, [option_name("utls")] = true })
+o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
o = s:option(ListValue, option_name("transport"), translate("Transport"))
o:value("tcp", "TCP")
@@ -438,50 +353,44 @@ o:value("h2", "HTTP/2")
o:value("ds", "DomainSocket")
o:value("quic", "QUIC")
o:value("grpc", "gRPC")
-add_xray_depends(o, { [option_name("protocol")] = "vmess" })
-add_xray_depends(o, { [option_name("protocol")] = "vless" })
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_xray_depends(o, { [option_name("protocol")] = "trojan" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
+o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "trojan" })
--[[
o = s:option(ListValue, option_name("ss_transport"), translate("Transport"))
o:value("ws", "WebSocket")
o:value("h2", "HTTP/2")
o:value("h2+ws", "HTTP/2 & WebSocket")
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
]]--
o = s:option(Value, option_name("wireguard_public_key"), translate("Public Key"))
-add_xray_depends(o, { [option_name("protocol")] = "wireguard" })
+o:depends({ [option_name("protocol")] = "wireguard" })
o = s:option(Value, option_name("wireguard_secret_key"), translate("Private Key"))
-add_xray_depends(o, { [option_name("protocol")] = "wireguard" })
+o:depends({ [option_name("protocol")] = "wireguard" })
o = s:option(Value, option_name("wireguard_preSharedKey"), translate("Pre shared key"))
-add_xray_depends(o, { [option_name("protocol")] = "wireguard" })
+o:depends({ [option_name("protocol")] = "wireguard" })
o = s:option(DynamicList, option_name("wireguard_local_address"), translate("Local Address"))
-add_xray_depends(o, { [option_name("protocol")] = "wireguard" })
+o:depends({ [option_name("protocol")] = "wireguard" })
o = s:option(Value, option_name("wireguard_mtu"), translate("MTU"))
o.default = "1420"
-add_xray_depends(o, { [option_name("protocol")] = "wireguard" })
+o:depends({ [option_name("protocol")] = "wireguard" })
if api.compare_versions(api.get_app_version("xray"), ">=", "1.8.0") then
o = s:option(Value, option_name("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
- add_xray_depends(o, { [option_name("protocol")] = "wireguard" })
+ o:depends({ [option_name("protocol")] = "wireguard" })
end
o = s:option(Value, option_name("wireguard_keepAlive"), translate("Keep Alive"))
o.default = "0"
-add_xray_depends(o, { [option_name("protocol")] = "wireguard" })
+o:depends({ [option_name("protocol")] = "wireguard" })
-- [[ TCP部分 ]]--
@@ -489,193 +398,151 @@ add_xray_depends(o, { [option_name("protocol")] = "wireguard" })
o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type"))
o:value("none", "none")
o:value("http", "http")
-add_xray_depends(o, { [option_name("transport")] = "tcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "tcp" })
+o:depends({ [option_name("transport")] = "tcp" })
-- HTTP域名
o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host"))
-add_xray_depends(o, { [option_name("tcp_guise")] = "http" })
-add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" })
+o:depends({ [option_name("tcp_guise")] = "http" })
-- HTTP路径
o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path"))
o.placeholder = "/"
-add_xray_depends(o, { [option_name("tcp_guise")] = "http" })
-add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" })
+o:depends({ [option_name("tcp_guise")] = "http" })
-- [[ mKCP部分 ]]--
o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
for a, t in ipairs(header_type_list) do o:value(t) end
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU"))
o.default = "1350"
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI"))
o.default = "20"
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
o.default = "5"
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
o.default = "20"
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion"))
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize"))
o.default = "1"
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
o.default = "1"
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed"))
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
-- [[ WebSocket部分 ]]--
o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-add_xray_depends(o, { [option_name("transport")] = "ws" })
-add_xray_depends(o, { [option_name("ss_transport")] = "ws" })
-add_v2ray_depends(o, { [option_name("transport")] = "ws" })
-add_v2ray_depends(o, { [option_name("ss_transport")] = "ws" })
+o:depends({ [option_name("transport")] = "ws" })
+o:depends({ [option_name("ss_transport")] = "ws" })
o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
o.placeholder = "/"
-add_xray_depends(o, { [option_name("transport")] = "ws" })
-add_xray_depends(o, { [option_name("ss_transport")] = "ws" })
-add_v2ray_depends(o, { [option_name("transport")] = "ws" })
-add_v2ray_depends(o, { [option_name("ss_transport")] = "ws" })
-
-o = s:option(Flag, "v2ray_ws_enableEarlyData", translate("Enable early data"))
-add_v2ray_depends(o, { [option_name("transport")] = "ws" })
-
-o = s:option(Value, "v2ray_ws_maxEarlyData", translate("Early data length"))
-o.default = "1024"
-add_v2ray_depends(o, { v2ray_ws_enableEarlyData = true })
-
-o = s:option(Value, "v2ray_ws_earlyDataHeaderName", translate("Early data header name"), translate("Recommended value: Sec-WebSocket-Protocol"))
-add_v2ray_depends(o, { v2ray_ws_enableEarlyData = true })
+o:depends({ [option_name("transport")] = "ws" })
+o:depends({ [option_name("ss_transport")] = "ws" })
-- [[ HTTP/2部分 ]]--
o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host"))
-add_xray_depends(o, { [option_name("transport")] = "h2" })
-add_xray_depends(o, { [option_name("ss_transport")] = "h2" })
-add_v2ray_depends(o, { [option_name("transport")] = "h2" })
-add_v2ray_depends(o, { [option_name("ss_transport")] = "h2" })
+o:depends({ [option_name("transport")] = "h2" })
+o:depends({ [option_name("ss_transport")] = "h2" })
o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path"))
o.placeholder = "/"
-add_xray_depends(o, { [option_name("transport")] = "h2" })
-add_xray_depends(o, { [option_name("ss_transport")] = "h2" })
-add_v2ray_depends(o, { [option_name("transport")] = "h2" })
-add_v2ray_depends(o, { [option_name("ss_transport")] = "h2" })
+o:depends({ [option_name("transport")] = "h2" })
+o:depends({ [option_name("ss_transport")] = "h2" })
o = s:option(Flag, option_name("h2_health_check"), translate("Health check"))
-add_xray_depends(o, { [option_name("transport")] = "h2" })
+o:depends({ [option_name("transport")] = "h2" })
o = s:option(Value, option_name("h2_read_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-add_xray_depends(o, { [option_name("h2_health_check")] = true })
+o:depends({ [option_name("h2_health_check")] = true })
o = s:option(Value, option_name("h2_health_check_timeout"), translate("Health check timeout"))
o.default = "15"
-add_xray_depends(o, { [option_name("h2_health_check")] = true })
+o:depends({ [option_name("h2_health_check")] = true })
-- [[ DomainSocket部分 ]]--
o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
-add_xray_depends(o, { [option_name("transport")] = "ds" })
-add_v2ray_depends(o, { [option_name("transport")] = "ds" })
+o:depends({ [option_name("transport")] = "ds" })
-- [[ QUIC部分 ]]--
o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method"))
o:value("none")
o:value("aes-128-gcm")
o:value("chacha20-poly1305")
-add_xray_depends(o, { [option_name("transport")] = "quic" })
-add_v2ray_depends(o, { [option_name("transport")] = "quic" })
+o:depends({ [option_name("transport")] = "quic" })
o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key"))
-add_xray_depends(o, { [option_name("transport")] = "quic" })
-add_v2ray_depends(o, { [option_name("transport")] = "quic" })
+o:depends({ [option_name("transport")] = "quic" })
o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type"))
for a, t in ipairs(header_type_list) do o:value(t) end
-add_xray_depends(o, { [option_name("transport")] = "quic" })
-add_v2ray_depends(o, { [option_name("transport")] = "quic" })
+o:depends({ [option_name("transport")] = "quic" })
-- [[ gRPC部分 ]]--
o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-add_xray_depends(o, { [option_name("transport")] = "grpc" })
-add_v2ray_depends(o, { [option_name("transport")] = "grpc" })
+o:depends({ [option_name("transport")] = "grpc" })
o = s:option(ListValue, option_name("grpc_mode"), "gRPC " .. translate("Transfer mode"))
o:value("gun")
o:value("multi")
-add_xray_depends(o, { [option_name("transport")] = "grpc" })
+o:depends({ [option_name("transport")] = "grpc" })
o = s:option(Flag, option_name("grpc_health_check"), translate("Health check"))
-add_xray_depends(o, { [option_name("transport")] = "grpc" })
+o:depends({ [option_name("transport")] = "grpc" })
o = s:option(Value, option_name("grpc_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-add_xray_depends(o, { [option_name("grpc_health_check")] = true })
+o:depends({ [option_name("grpc_health_check")] = true })
o = s:option(Value, option_name("grpc_health_check_timeout"), translate("Health check timeout"))
o.default = "20"
-add_xray_depends(o, { [option_name("grpc_health_check")] = true })
+o:depends({ [option_name("grpc_health_check")] = true })
o = s:option(Flag, option_name("grpc_permit_without_stream"), translate("Permit without stream"))
o.default = "0"
-add_xray_depends(o, { [option_name("grpc_health_check")] = true })
+o:depends({ [option_name("grpc_health_check")] = true })
o = s:option(Value, option_name("grpc_initial_windows_size"), translate("Initial Windows Size"))
o.default = "0"
-add_xray_depends(o, { [option_name("transport")] = "grpc" })
+o:depends({ [option_name("transport")] = "grpc" })
-- [[ Mux ]]--
o = s:option(Flag, option_name("mux"), translate("Mux"))
-add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
-add_v2ray_depends(o, { [option_name("protocol")] = "http" })
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
-add_xray_depends(o, { [option_name("protocol")] = "vmess" })
-add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("flow")] = "" })
-add_xray_depends(o, { [option_name("protocol")] = "http" })
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_xray_depends(o, { [option_name("protocol")] = "trojan" })
+o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "" })
+o:depends({ [option_name("protocol")] = "http" })
+o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "trojan" })
o = s:option(Value, option_name("mux_concurrency"), translate("Mux concurrency"))
o.default = 8
-add_xray_depends(o, { [option_name("mux")] = true })
-add_v2ray_depends(o, { [option_name("mux")] = true })
+o:depends({ [option_name("mux")] = true })
-- [[ XUDP Mux ]]--
o = s:option(Flag, option_name("xmux"), translate("xMux"))
o.default = 1
-add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision" })
+o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision" })
o = s:option(Value, option_name("xudp_concurrency"), translate("XUDP Mux concurrency"))
o.default = 8
-add_xray_depends(o, { [option_name("xmux")] = true })
+o:depends({ [option_name("xmux")] = true })
for key, value in pairs(s.fields) do
if key:find(option_prefix) == 1 then
@@ -684,5 +551,14 @@ for key, value in pairs(s.fields) do
s.fields[key].write = rm_prefix_write
s.fields[key].remove = rm_prefix_remove
end
+
+ local deps = s.fields[key].deps
+ if #deps > 0 then
+ for index, value in ipairs(deps) do
+ deps[index]["type"] = type_name
+ end
+ else
+ s.fields[key]:depends({ type = type_name })
+ end
end
end
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua
index 45bb3a834..d18b75444 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/index.lua
@@ -45,7 +45,7 @@ e = t:option(DummyValue, "type", translate("Type"))
e.cfgvalue = function(t, n)
local v = Value.cfgvalue(t, n)
if v then
- if v == "sing-box" or v == "V2ray" or v == "Xray" then
+ if v == "sing-box" or v == "Xray" then
local protocol = m:get(n, "protocol")
return v .. " -> " .. protocol
end
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
index d951499f8..6e2d67f79 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
@@ -2,10 +2,12 @@ local m, s = ...
local api = require "luci.passwall.api"
-if not api.finded_com("xray") and not api.finded_com("v2ray")then
+if not api.finded_com("xray") then
return
end
+local type_name = "Xray"
+
local option_prefix = "xray_"
local function option_name(name)
@@ -18,52 +20,20 @@ local function rm_prefix_cfgvalue(self, section)
end
end
local function rm_prefix_write(self, section, value)
- if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then
+ if s.fields["type"]:formvalue(arg[1]) == type_name then
if self.option:find(option_prefix) == 1 then
m:set(section, self.option:sub(1 + #option_prefix), value)
end
end
end
local function rm_prefix_remove(self, section, value)
- if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then
+ if s.fields["type"]:formvalue(arg[1]) == type_name then
if self.option:find(option_prefix) == 1 then
m:del(section, self.option:sub(1 + #option_prefix))
end
end
end
-local function add_xray_depends(o, field, value)
- local deps = { type = "Xray" }
- if field then
- if type(field) == "string" then
- deps[field] = value
- else
- for key, value in pairs(field) do
- deps[key] = value
- end
- end
- end
- o:depends(deps)
-end
-
-local function add_v2ray_depends(o, field, value)
- local deps = { type = "V2ray" }
- if field then
- if type(field) == "string" then
- deps[field] = value
- else
- for key, value in pairs(field) do
- deps[key] = value
- end
- end
- end
- o:depends(deps)
-end
-
-local v_ss_method_list = {
- "aes-128-gcm", "aes-256-gcm", "chacha20-poly1305"
-}
-
local x_ss_method_list = {
"aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
}
@@ -74,12 +44,7 @@ local header_type_list = {
-- [[ Xray ]]
-if api.finded_com("v2ray") then
- s.fields["type"]:value("V2ray", translate("V2ray"))
-end
-if api.finded_com("xray") then
- s.fields["type"]:value("Xray", translate("Xray"))
-end
+s.fields["type"]:value(type_name, "Xray")
o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
o:value("vmess", "Vmess")
@@ -89,13 +54,9 @@ o:value("socks", "Socks")
o:value("shadowsocks", "Shadowsocks")
o:value("trojan", "Trojan")
o:value("dokodemo-door", "dokodemo-door")
-add_xray_depends(o)
-add_v2ray_depends(o)
o = s:option(Value, option_name("port"), translate("Listen Port"))
o.datatype = "port"
-add_xray_depends(o)
-add_v2ray_depends(o)
o = s:option(Flag, option_name("auth"), translate("Auth"))
o.validate = function(self, value, t)
@@ -108,103 +69,75 @@ o.validate = function(self, value, t)
end
return value
end
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
-add_xray_depends(o, { [option_name("protocol")] = "http" })
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "http" })
+o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "http" })
o = s:option(Value, option_name("username"), translate("Username"))
-add_xray_depends(o, { [option_name("auth")] = true })
-add_v2ray_depends(o, { [option_name("auth")] = true })
+o:depends({ [option_name("auth")] = true })
o = s:option(Value, option_name("password"), translate("Password"))
o.password = true
-add_xray_depends(o, { [option_name("auth")] = true })
-add_v2ray_depends(o, { [option_name("auth")] = true })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("auth")] = true })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
o = s:option(ListValue, option_name("d_protocol"), translate("Destination protocol"))
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:value("tcp,udp", "TCP,UDP")
-add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
-add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
+o:depends({ [option_name("protocol")] = "dokodemo-door" })
o = s:option(Value, option_name("d_address"), translate("Destination address"))
-add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
-add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
+o:depends({ [option_name("protocol")] = "dokodemo-door" })
o = s:option(Value, option_name("d_port"), translate("Destination port"))
o.datatype = "port"
-add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
-add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
+o:depends({ [option_name("protocol")] = "dokodemo-door" })
o = s:option(Value, option_name("decryption"), translate("Encrypt Method"))
o.default = "none"
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
-add_xray_depends(o, { [option_name("protocol")] = "vless" })
-
-o = s:option(ListValue, option_name("v_ss_method"), translate("Encrypt Method"))
-o.not_rewrite = true
-for a, t in ipairs(v_ss_method_list) do o:value(t) end
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-function o.cfgvalue(self, section)
- return m:get(section, "method")
-end
-function o.write(self, section, value)
- if s.fields["type"]:formvalue(arg[1]) == "V2ray" then
- m:set(section, "method", value)
- end
-end
+o:depends({ [option_name("protocol")] = "vless" })
o = s:option(ListValue, option_name("x_ss_method"), translate("Encrypt Method"))
o.not_rewrite = true
for a, t in ipairs(x_ss_method_list) do o:value(t) end
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
function o.cfgvalue(self, section)
return m:get(section, "method")
end
function o.write(self, section, value)
- if s.fields["type"]:formvalue(arg[1]) == "Xray" then
+ if s.fields["type"]:formvalue(arg[1]) == type_name then
m:set(section, "method", value)
end
end
o = s:option(Flag, option_name("iv_check"), translate("IV Check"))
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
o = s:option(ListValue, option_name("ss_network"), translate("Transport"))
o.default = "tcp,udp"
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:value("tcp,udp", "TCP,UDP")
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
o = s:option(Flag, option_name("udp_forward"), translate("UDP Forward"))
o.default = "1"
o.rmempty = false
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "socks" })
o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password"))
for i = 1, 3 do
o:value(api.gen_uuid(1))
end
-add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
-add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
-add_xray_depends(o, { [option_name("protocol")] = "vmess" })
-add_xray_depends(o, { [option_name("protocol")] = "vless" })
-add_xray_depends(o, { [option_name("protocol")] = "trojan" })
+o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [option_name("protocol")] = "trojan" })
o = s:option(ListValue, option_name("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "tcp" })
+o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "tcp" })
o = s:option(Flag, option_name("tls"), translate("TLS"))
o.default = 0
@@ -220,37 +153,29 @@ o.validate = function(self, value, t)
return value
end
end
-add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
-add_xray_depends(o, { [option_name("protocol")] = "vmess" })
-add_xray_depends(o, { [option_name("protocol")] = "vless" })
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_xray_depends(o, { [option_name("protocol")] = "trojan" })
+o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "trojan" })
o = s:option(ListValue, option_name("alpn"), translate("alpn"))
o.default = "h2,http/1.1"
o:value("h2,http/1.1")
o:value("h2")
o:value("http/1.1")
-add_v2ray_depends(o, { [option_name("tls")] = true })
-add_xray_depends(o, { [option_name("tls")] = true })
+o:depends({ [option_name("tls")] = true })
-- o = s:option(Value, option_name("minversion"), translate("minversion"))
-- o.default = "1.3"
-- o:value("1.3")
---add_v2ray_depends(o, { [option_name("tls")] = true })
---add_xray_depends(o, { [option_name("tls")] = true })
+--o:depends({ [option_name("tls")] = true })
-- [[ TLS部分 ]] --
o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
-add_v2ray_depends(o, { [option_name("tls")] = true })
-add_xray_depends(o, { [option_name("tls")] = true })
+o:depends({ [option_name("tls")] = true })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -264,8 +189,7 @@ end
o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
-add_v2ray_depends(o, { [option_name("tls")] = true })
-add_xray_depends(o, { [option_name("tls")] = true })
+o:depends({ [option_name("tls")] = true })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -285,36 +209,27 @@ o:value("h2", "HTTP/2")
o:value("ds", "DomainSocket")
o:value("quic", "QUIC")
o:value("grpc", "gRPC")
-add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
-add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
-add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
-add_xray_depends(o, { [option_name("protocol")] = "vmess" })
-add_xray_depends(o, { [option_name("protocol")] = "vless" })
-add_xray_depends(o, { [option_name("protocol")] = "socks" })
-add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
-add_xray_depends(o, { [option_name("protocol")] = "trojan" })
+o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [option_name("protocol")] = "trojan" })
-- [[ WebSocket部分 ]]--
o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-add_v2ray_depends(o, { [option_name("transport")] = "ws" })
-add_xray_depends(o, { [option_name("transport")] = "ws" })
+o:depends({ [option_name("transport")] = "ws" })
o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
-add_v2ray_depends(o, { [option_name("transport")] = "ws" })
-add_xray_depends(o, { [option_name("transport")] = "ws" })
+o:depends({ [option_name("transport")] = "ws" })
-- [[ HTTP/2部分 ]]--
o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host"))
-add_v2ray_depends(o, { [option_name("transport")] = "h2" })
-add_xray_depends(o, { [option_name("transport")] = "h2" })
+o:depends({ [option_name("transport")] = "h2" })
o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path"))
-add_v2ray_depends(o, { [option_name("transport")] = "h2" })
-add_xray_depends(o, { [option_name("transport")] = "h2" })
+o:depends({ [option_name("transport")] = "h2" })
-- [[ TCP部分 ]]--
@@ -322,141 +237,111 @@ add_xray_depends(o, { [option_name("transport")] = "h2" })
o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type"))
o:value("none", "none")
o:value("http", "http")
-add_v2ray_depends(o, { [option_name("transport")] = "tcp" })
-add_xray_depends(o, { [option_name("transport")] = "tcp" })
+o:depends({ [option_name("transport")] = "tcp" })
-- HTTP域名
o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host"))
-add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" })
-add_xray_depends(o, { [option_name("tcp_guise")] = "http" })
+o:depends({ [option_name("tcp_guise")] = "http" })
-- HTTP路径
o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path"))
-add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" })
-add_xray_depends(o, { [option_name("tcp_guise")] = "http" })
+o:depends({ [option_name("tcp_guise")] = "http" })
-- [[ mKCP部分 ]]--
o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
for a, t in ipairs(header_type_list) do o:value(t) end
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU"))
o.default = "1350"
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI"))
o.default = "20"
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
o.default = "5"
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
o.default = "20"
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion"))
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize"))
o.default = "1"
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
o.default = "1"
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed"))
-add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
-add_xray_depends(o, { [option_name("transport")] = "mkcp" })
+o:depends({ [option_name("transport")] = "mkcp" })
-- [[ DomainSocket部分 ]]--
o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
-add_v2ray_depends(o, { [option_name("transport")] = "ds" })
-add_xray_depends(o, { [option_name("transport")] = "ds" })
+o:depends({ [option_name("transport")] = "ds" })
-- [[ QUIC部分 ]]--
o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method"))
o:value("none")
o:value("aes-128-gcm")
o:value("chacha20-poly1305")
-add_v2ray_depends(o, { [option_name("transport")] = "quic" })
-add_xray_depends(o, { [option_name("transport")] = "quic" })
+o:depends({ [option_name("transport")] = "quic" })
o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key"))
-add_v2ray_depends(o, { [option_name("transport")] = "quic" })
-add_xray_depends(o, { [option_name("transport")] = "quic" })
+o:depends({ [option_name("transport")] = "quic" })
o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type"))
for a, t in ipairs(header_type_list) do o:value(t) end
-add_v2ray_depends(o, { [option_name("transport")] = "quic" })
-add_xray_depends(o, { [option_name("transport")] = "quic" })
+o:depends({ [option_name("transport")] = "quic" })
-- [[ gRPC部分 ]]--
o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-add_v2ray_depends(o, { [option_name("transport")] = "grpc" })
-add_xray_depends(o, { [option_name("transport")] = "grpc" })
+o:depends({ [option_name("transport")] = "grpc" })
o = s:option(Flag, option_name("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used."))
-add_v2ray_depends(o, { [option_name("transport")] = "tcp" })
-add_v2ray_depends(o, { [option_name("transport")] = "ws" })
-add_xray_depends(o, { [option_name("transport")] = "tcp" })
-add_xray_depends(o, { [option_name("transport")] = "ws" })
+o:depends({ [option_name("transport")] = "tcp" })
+o:depends({ [option_name("transport")] = "ws" })
-- [[ Fallback部分 ]]--
o = s:option(Flag, option_name("fallback"), translate("Fallback"))
-add_v2ray_depends(o, { [option_name("protocol")] = "vless", [option_name("transport")] = "tcp" })
-add_v2ray_depends(o, { [option_name("protocol")] = "trojan", [option_name("transport")] = "tcp" })
-add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("transport")] = "tcp" })
-add_xray_depends(o, { [option_name("protocol")] = "trojan", [option_name("transport")] = "tcp" })
+o:depends({ [option_name("protocol")] = "vless", [option_name("transport")] = "tcp" })
+o:depends({ [option_name("protocol")] = "trojan", [option_name("transport")] = "tcp" })
--[[
o = s:option(Value, option_name("fallback_alpn"), "Fallback alpn")
-add_v2ray_depends(o, { [option_name("fallback")] = true })
-add_xray_depends(o, { [option_name("fallback")] = true })
+o:depends({ [option_name("fallback")] = true })
o = s:option(Value, option_name("fallback_path"), "Fallback path")
-add_v2ray_depends(o, { [option_name("fallback")] = true })
-add_xray_depends(o, { [option_name("fallback")] = true })
+o:depends({ [option_name("fallback")] = true })
o = s:option(Value, option_name("fallback_dest"), "Fallback dest")
-add_v2ray_depends(o, { [option_name("fallback")] = true })
-add_xray_depends(o, { [option_name("fallback")] = true })
+o:depends({ [option_name("fallback")] = true })
o = s:option(Value, option_name("fallback_xver"), "Fallback xver")
o.default = 0
-add_v2ray_depends(o, { [option_name("fallback")] = true })
-add_xray_depends(o, { [option_name("fallback")] = true })
+o:depends({ [option_name("fallback")] = true })
]]--
o = s:option(DynamicList, option_name("fallback_list"), "Fallback", translate("dest,path"))
-add_v2ray_depends(o, { [option_name("fallback")] = true })
-add_xray_depends(o, { [option_name("fallback")] = true })
+o:depends({ [option_name("fallback")] = true })
o = s:option(Flag, option_name("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed locally, It is recommended to turn on when using reverse proxies or be fallback."))
o.default = "0"
-add_v2ray_depends(o)
-add_xray_depends(o)
o = s:option(Flag, option_name("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
o.default = "0"
-add_v2ray_depends(o)
-add_xray_depends(o)
local nodes_table = {}
for k, e in ipairs(api.get_valid_nodes()) do
- if e.node_type == "normal" and (e.type == "V2ray" or e.type == "Xray") then
+ if e.node_type == "normal" and e.type == type_name then
nodes_table[#nodes_table + 1] = {
id = e[".name"],
remarks = e["remark"]
@@ -471,45 +356,32 @@ o:value("_http", translate("Custom HTTP"))
o:value("_iface", translate("Custom Interface") .. " (Only Support Xray)")
for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end
o.default = "nil"
-add_v2ray_depends(o)
-add_xray_depends(o)
o = s:option(Value, option_name("outbound_node_address"), translate("Address (Support Domain Name)"))
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"})
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_socks"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_http"})
+o:depends({ [option_name("outbound_node")] = "_socks"})
+o:depends({ [option_name("outbound_node")] = "_http"})
o = s:option(Value, option_name("outbound_node_port"), translate("Port"))
o.datatype = "port"
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"})
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_socks"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_http"})
+o:depends({ [option_name("outbound_node")] = "_socks"})
+o:depends({ [option_name("outbound_node")] = "_http"})
o = s:option(Value, option_name("outbound_node_username"), translate("Username"))
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"})
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_socks"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_http"})
+o:depends({ [option_name("outbound_node")] = "_socks"})
+o:depends({ [option_name("outbound_node")] = "_http"})
o = s:option(Value, option_name("outbound_node_password"), translate("Password"))
o.password = true
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"})
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_socks"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_http"})
+o:depends({ [option_name("outbound_node")] = "_socks"})
+o:depends({ [option_name("outbound_node")] = "_http"})
o = s:option(Value, option_name("outbound_node_iface"), translate("Interface"))
o.default = "eth1"
-add_v2ray_depends(o, { [option_name("outbound_node")] = "_iface"})
-add_xray_depends(o, { [option_name("outbound_node")] = "_iface"})
+o:depends({ [option_name("outbound_node")] = "_iface"})
o = s:option(Flag, option_name("log"), translate("Log"))
o.default = "1"
o.rmempty = false
-add_v2ray_depends(o)
-add_xray_depends(o)
o = s:option(ListValue, option_name("loglevel"), translate("Log Level"))
o.default = "warning"
@@ -517,8 +389,7 @@ o:value("debug")
o:value("info")
o:value("warning")
o:value("error")
-add_v2ray_depends(o, { [option_name("log")] = true })
-add_xray_depends(o, { [option_name("log")] = true })
+o:depends({ [option_name("log")] = true })
for key, value in pairs(s.fields) do
if key:find(option_prefix) == 1 then
diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua
index dfb5cda2c..e8c27f2a5 100644
--- a/luci-app-passwall/luasrc/passwall/api.lua
+++ b/luci-app-passwall/luasrc/passwall/api.lua
@@ -298,7 +298,7 @@ function get_valid_nodes()
local address = e.address
if is_ip(address) or datatypes.hostname(address) then
local type = e.type
- if (type == "sing-box" or type == "V2ray" or type == "Xray") and e.protocol then
+ if (type == "sing-box" or type == "Xray") and e.protocol then
local protocol = e.protocol
if protocol == "vmess" then
protocol = "VMess"
@@ -330,7 +330,7 @@ function get_node_remarks(n)
remarks = "%s:[%s] " % {n.type .. " " .. i18n.translatef(n.protocol), n.remarks}
else
local type2 = n.type
- if (n.type == "sing-box" or n.type == "V2ray" or n.type == "Xray") and n.protocol then
+ if (n.type == "sing-box" or n.type == "Xray") and n.protocol then
local protocol = n.protocol
if protocol == "vmess" then
protocol = "VMess"
diff --git a/luci-app-passwall/luasrc/passwall/com.lua b/luci-app-passwall/luasrc/passwall/com.lua
index a7f33c885..c5aba09e1 100644
--- a/luci-app-passwall/luasrc/passwall/com.lua
+++ b/luci-app-passwall/luasrc/passwall/com.lua
@@ -63,13 +63,13 @@ _M.singbox = {
}
}
-_M.v2ray = {
- name = "V2ray",
- repo = "v2fly/v2ray-core",
+_M.xray = {
+ name = "Xray",
+ repo = "XTLS/Xray-core",
get_url = gh_pre_release_url,
cmd_version = "version | awk '{print $2}' | sed -n 1P",
zipped = true,
- default_path = "/usr/bin/v2ray",
+ default_path = "/usr/bin/xray",
match_fmt_str = "linux%%-%s",
file_tree = {
x86_64 = "64",
@@ -79,17 +79,6 @@ _M.v2ray = {
}
}
-_M.xray = {
- name = "Xray",
- repo = "XTLS/Xray-core",
- get_url = gh_pre_release_url,
- cmd_version = _M.v2ray.cmd_version,
- zipped = true,
- default_path = "/usr/bin/xray",
- match_fmt_str = _M.v2ray.match_fmt_str,
- file_tree = _M.v2ray.file_tree
-}
-
_M["chinadns-ng"] = {
name = "ChinaDNS-NG",
repo = "zfl9/chinadns-ng",
diff --git a/luci-app-passwall/luasrc/passwall/server_app.lua b/luci-app-passwall/luasrc/passwall/server_app.lua
index 4b63f6a18..1b3cdfafe 100644
--- a/luci-app-passwall/luasrc/passwall/server_app.lua
+++ b/luci-app-passwall/luasrc/passwall/server_app.lua
@@ -143,9 +143,6 @@ local function start()
elseif type == "sing-box" then
config = require(require_dir .. "util_sing-box").gen_config_server(user)
bin = ln_run(api.get_app_path("singbox"), "sing-box", "run -c " .. config_file, log_path)
- elseif type == "V2ray" then
- config = require(require_dir .. "util_xray").gen_config_server(user)
- bin = ln_run(api.get_app_path("v2ray"), "v2ray", "run -c " .. config_file, log_path)
elseif type == "Xray" then
config = require(require_dir .. "util_xray").gen_config_server(user)
bin = ln_run(api.get_app_path("xray"), "xray", "run -c " .. config_file, log_path)
diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua
index 69a51b015..f26dbf14c 100644
--- a/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -47,8 +47,8 @@ function gen_outbound(flag, node, tag, proxy_table)
proxy_tag = proxy_table.tag or "nil"
end
- if node.type == "V2ray" or node.type == "Xray" then
- if node.type == "Xray" and node.flow == "xtls-rprx-vision" then
+ if node.type == "Xray" then
+ if node.flow == "xtls-rprx-vision" then
else
proxy = 0
if proxy_tag ~= "nil" then
@@ -60,7 +60,7 @@ function gen_outbound(flag, node, tag, proxy_table)
end
end
- if node.type ~= "V2ray" and node.type ~= "Xray" then
+ if node.type ~= "Xray" then
if node.type == "Socks" then
node.protocol = "socks"
node.transport = "tcp"
@@ -91,7 +91,7 @@ function gen_outbound(flag, node, tag, proxy_table)
node.stream_security = "none"
end
- if node.type == "V2ray" or node.type == "Xray" then
+ if node.type == "Xray" then
if node.tls and node.tls == "1" then
node.stream_security = "tls"
if node.type == "Xray" and node.reality and node.reality == "1" then
@@ -762,7 +762,7 @@ function gen_config(var)
else
if proxy then
local pre_proxy = nil
- if _node.type ~= "V2ray" and _node.type ~= "Xray" then
+ if _node.type ~= "Xray" then
pre_proxy = true
end
if _node.type == "Xray" and _node.flow == "xtls-rprx-vision" then
diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm
index 3f31d88df..d0ae5f273 100644
--- a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm
+++ b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm
@@ -2,7 +2,6 @@
<%
local api = require "luci.passwall.api"
local has_singbox = api.finded_com("singbox")
-local has_v2ray = api.finded_com("v2ray")
local has_xray = api.finded_com("xray")
-%>