mirror of https://github.com/kenzok8/small.git
update 2023-09-05 19:21:55
This commit is contained in:
parent
dc46158506
commit
94253645fc
|
@ -5,24 +5,30 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=hysteria
|
||||
PKG_VERSION:=1.3.5
|
||||
PKG_VERSION:=2.0.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/apernet/hysteria/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=9b3b5fca069d215a1f4c9cf3aa0a7b4e9b1fe21216fddb483a20ab42eb4a4dd7
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/apernet/hysteria/tar.gz/app/v$(PKG_VERSION)?
|
||||
PKG_HASH:=06f86cf466cbe08e7aaea68914263780ed4474cd73df9a591676779535d330d5
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-app-v$(PKG_VERSION)
|
||||
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_LICENSE_FILE:=LICENSE
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
PKG_BUILD_FLAGS:=no-mips16
|
||||
|
||||
GO_PKG:=github.com/apernet/hysteria
|
||||
GO_PKG_BUILD_PKG:=$(GO_PKG)/app/cmd
|
||||
GO_PKG_LDFLAGS_X:=main.appVersion=$(PKG_VERSION)
|
||||
GO_PKG_BUILD_PKG:=$(GO_PKG)/app
|
||||
GO_PKG_LDFLAGS_X = \
|
||||
$(GO_PKG)/app/cmd.appVersion=v$(PKG_VERSION) \
|
||||
$(GO_PKG)/app/cmd.appType=release \
|
||||
$(GO_PKG)/app/cmd.appPlatform=$(GO_OS) \
|
||||
$(GO_PKG)/app/cmd.appArch=$(GO_ARCH)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||
|
@ -31,7 +37,7 @@ define Package/hysteria
|
|||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=A feature-packed network utility optimized for networks of poor quality
|
||||
URL:=https://github.com/apernet/hysteria
|
||||
URL:=https://github.com/tobyxdd/hysteria
|
||||
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle
|
||||
endef
|
||||
|
||||
|
@ -45,8 +51,8 @@ endef
|
|||
define Package/hysteria/install
|
||||
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/bin/
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/cmd $(1)/usr/bin/hysteria
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/app $(1)/usr/bin/hysteria
|
||||
endef
|
||||
|
||||
$(eval $(call GoBinPackage,hysteria))
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall2
|
||||
PKG_VERSION:=1.20-3
|
||||
PKG_VERSION:=1.20-4
|
||||
PKG_RELEASE:=
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
@ -22,10 +22,9 @@ PKG_CONFIG_DEPENDS:= \
|
|||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Server \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_SingBox \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_SingBox \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin
|
||||
|
||||
LUCI_TITLE:=LuCI support for PassWall 2
|
||||
|
@ -47,10 +46,9 @@ LUCI_DEPENDS:=+coreutils +coreutils-base64 +coreutils-nohup +curl \
|
|||
+PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-local \
|
||||
+PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Client:shadowsocksr-libev-ssr-redir \
|
||||
+PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server:shadowsocksr-libev-ssr-server \
|
||||
+PACKAGE_$(PKG_NAME)_INCLUDE_SingBox:sing-box \
|
||||
+PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs:simple-obfs \
|
||||
+PACKAGE_$(PKG_NAME)_INCLUDE_SingBox:sing-box \
|
||||
+PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client:tuic-client \
|
||||
+PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray-core \
|
||||
+PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin:v2ray-plugin
|
||||
|
||||
define Package/$(PKG_NAME)/config
|
||||
|
@ -131,23 +129,19 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server
|
|||
bool "Include ShadowsocksR Libev Server"
|
||||
default n
|
||||
|
||||
config PACKAGE_$(PKG_NAME)_INCLUDE_SingBox
|
||||
bool "Include Sing-Box"
|
||||
default y if aarch64||arm||i386||x86_64
|
||||
|
||||
config PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs
|
||||
bool "Include Simple-Obfs (Shadowsocks Plugin)"
|
||||
default y
|
||||
|
||||
config PACKAGE_$(PKG_NAME)_INCLUDE_SingBox
|
||||
bool "Include Sing-Box"
|
||||
default y if aarch64||arm||i386||x86_64
|
||||
|
||||
config PACKAGE_$(PKG_NAME)_INCLUDE_tuic_client
|
||||
bool "Include tuic-client"
|
||||
depends on aarch64||arm||i386||x86_64
|
||||
default n
|
||||
|
||||
config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray
|
||||
bool "Include V2ray"
|
||||
default n
|
||||
|
||||
config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_Plugin
|
||||
bool "Include V2ray-Plugin (Shadowsocks Plugin)"
|
||||
default y if aarch64||arm||i386||x86_64
|
||||
|
|
|
@ -3,7 +3,6 @@ local appname = api.appname
|
|||
local uci = api.uci
|
||||
local datatypes = api.datatypes
|
||||
local has_singbox = api.is_finded("sing-box")
|
||||
local has_v2ray = api.is_finded("v2ray")
|
||||
local has_xray = api.is_finded("xray")
|
||||
|
||||
m = Map(appname)
|
||||
|
@ -54,7 +53,7 @@ node = s:taboption("Main", ListValue, "node", "<a style='color: red'>" .. transl
|
|||
node:value("nil", translate("Close"))
|
||||
|
||||
-- 分流
|
||||
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 = {}
|
||||
|
@ -87,14 +86,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", translate("Sing-Box"))
|
||||
end
|
||||
if has_v2ray then
|
||||
type:value("V2ray", translate("V2ray"))
|
||||
end
|
||||
if has_xray then
|
||||
type:value("Xray", translate("Xray"))
|
||||
end
|
||||
|
@ -125,7 +121,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("node", v.id)
|
||||
else
|
||||
type:depends("node", "hide") --不存在的依赖,即始终隐藏
|
||||
|
@ -218,14 +214,6 @@ node_socks_port = s:taboption("Main", Value, "node_socks_port", translate("Node"
|
|||
node_socks_port.default = 1070
|
||||
node_socks_port.datatype = "port"
|
||||
|
||||
--[[
|
||||
if has_v2ray or has_xray then
|
||||
node_http_port = s:taboption("Main", Value, "node_http_port", translate("Node") .. " HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use"))
|
||||
node_http_port.default = 0
|
||||
node_http_port.datatype = "port"
|
||||
end
|
||||
]]--
|
||||
|
||||
s:tab("DNS", translate("DNS"))
|
||||
|
||||
o = s:taboption("DNS", ListValue, "remote_dns_protocol", translate("Remote DNS Protocol"))
|
||||
|
@ -361,7 +349,7 @@ o.default = n + 1080
|
|||
o.datatype = "port"
|
||||
o.rmempty = false
|
||||
|
||||
if 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"
|
||||
|
@ -370,7 +358,7 @@ end
|
|||
for k, v in pairs(nodes_table) do
|
||||
node:value(v.id, v["remark"])
|
||||
if v.type == "Socks" then
|
||||
if has_v2ray or has_xray then
|
||||
if has_singbox or has_xray then
|
||||
socks_node:value(v.id, v["remark"])
|
||||
end
|
||||
else
|
||||
|
|
|
@ -83,7 +83,7 @@ o.cfgvalue = function(t, n)
|
|||
local remarks = m:get(n, "remarks") or ""
|
||||
local type = m:get(n, "type") or ""
|
||||
str = str .. string.format("<input type='hidden' id='cbid.%s.%s.type' value='%s'/>", 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")
|
||||
|
|
|
@ -3,7 +3,6 @@ local appname = api.appname
|
|||
local has_ss = api.is_finded("ss-redir")
|
||||
local has_ss_rust = api.is_finded("sslocal")
|
||||
local has_singbox = api.is_finded("sing-box")
|
||||
local has_v2ray = api.is_finded("v2ray")
|
||||
local has_xray = api.is_finded("xray")
|
||||
local ss_aead_type = {}
|
||||
if has_ss then
|
||||
|
@ -15,9 +14,6 @@ end
|
|||
if has_singbox then
|
||||
ss_aead_type[#ss_aead_type + 1] = "sing-box"
|
||||
end
|
||||
if has_v2ray then
|
||||
ss_aead_type[#ss_aead_type + 1] = "v2ray"
|
||||
end
|
||||
if has_xray then
|
||||
ss_aead_type[#ss_aead_type + 1] = "xray"
|
||||
end
|
||||
|
|
|
@ -4,7 +4,6 @@ local sys = api.sys
|
|||
local has_ss = api.is_finded("ss-redir")
|
||||
local has_ss_rust = api.is_finded("sslocal")
|
||||
local has_singbox = api.is_finded("sing-box")
|
||||
local has_v2ray = api.is_finded("v2ray")
|
||||
local has_xray = api.is_finded("xray")
|
||||
local ss_aead_type = {}
|
||||
if has_ss then
|
||||
|
@ -16,9 +15,6 @@ end
|
|||
if has_singbox then
|
||||
ss_aead_type[#ss_aead_type + 1] = "sing-box"
|
||||
end
|
||||
if has_v2ray then
|
||||
ss_aead_type[#ss_aead_type + 1] = "v2ray"
|
||||
end
|
||||
if has_xray then
|
||||
ss_aead_type[#ss_aead_type + 1] = "xray"
|
||||
end
|
||||
|
|
|
@ -3,7 +3,6 @@ local appname = api.appname
|
|||
local fs = api.fs
|
||||
local uci = api.uci
|
||||
local has_singbox = api.is_finded("sing-box")
|
||||
local has_v2ray = api.is_finded("v2ray")
|
||||
local has_xray = api.is_finded("xray")
|
||||
local has_fw3 = api.is_finded("fw3")
|
||||
local has_fw4 = api.is_finded("fw4")
|
||||
|
@ -128,8 +127,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
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ for e = 0, 23 do o:value(e, e .. translate("oclock")) end
|
|||
o.default = 0
|
||||
o:depends("auto_update", true)
|
||||
|
||||
s = m:section(TypedSection, "shunt_rules", "V2ray/Xray " .. translate("Shunt Rule"), "<a style='color: red'>" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "</a>")
|
||||
s = m:section(TypedSection, "shunt_rules", "Xray " .. translate("Shunt Rule"), "<a style='color: red'>" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "</a>")
|
||||
s.template = "cbi/tblsection"
|
||||
s.anonymous = false
|
||||
s.addremove = true
|
||||
|
|
|
@ -2,7 +2,7 @@ local api = require "luci.passwall2.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", "")
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
local api = require "luci.passwall2.api"
|
||||
local appname = api.appname
|
||||
local uci = api.uci
|
||||
local has_v2ray = api.is_finded("v2ray")
|
||||
local has_singbox = api.is_finded("sing-box")
|
||||
local has_xray = api.is_finded("xray")
|
||||
|
||||
m = Map(appname)
|
||||
|
@ -54,7 +54,7 @@ o.default = n + 1080
|
|||
o.datatype = "port"
|
||||
o.rmempty = false
|
||||
|
||||
if 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"
|
||||
|
|
|
@ -2,13 +2,15 @@ local m, s = ...
|
|||
|
||||
local api = require "luci.passwall2.api"
|
||||
|
||||
if not api.is_finded("xray") and not api.is_finded("v2ray") then
|
||||
if not api.is_finded("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.is_finded("xray") then
|
||||
s.fields["type"]:value("Xray", translate("Xray"))
|
||||
end
|
||||
if api.is_finded("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,8 +62,6 @@ 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"
|
||||
|
@ -131,31 +94,26 @@ end
|
|||
-- 负载均衡列表
|
||||
local o = s:option(DynamicList, option_name("balancing_node"), translate("Load balancing node list"), translate("Load balancing node list, <a target='_blank' href='https://toutyrater.github.io/routing/balance2.html'>document</a>"))
|
||||
o:depends({ [option_name("protocol")] = "_balancing" })
|
||||
add_v2ray_depends(o, { [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 <code>ns</code>, <code>us</code>, <code>ms</code>, <code>s</code>, <code>m</code>, <code>h</code>, which correspond to nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively.")
|
||||
|
||||
|
@ -163,11 +121,9 @@ o.description = translate("The interval between initiating probes. Every time th
|
|||
if #nodes_table > 0 then
|
||||
o = s:option(Flag, option_name("preproxy_enabled"), translate("Preproxy"))
|
||||
o:depends({ [option_name("protocol")] = "_shunt" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "_shunt" })
|
||||
|
||||
o = s:option(Value, option_name("main_node"), string.format('<a style="color:red">%s</a>', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including <code>Default</code>) has a separate switch that controls whether this rule uses the pre-proxy or not."))
|
||||
o:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
|
||||
for k, v in pairs(balancers_table) do
|
||||
o:value(v.id, v.remarks)
|
||||
end
|
||||
|
@ -187,7 +143,6 @@ uci:foreach(appname, "shunt_rules", function(e)
|
|||
o:value("_direct", translate("Direct Connection"))
|
||||
o:value("_blackhole", translate("Blackhole"))
|
||||
o:depends({ [option_name("protocol")] = "_shunt" })
|
||||
add_v2ray_depends(o, { [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
|
||||
|
@ -258,133 +212,88 @@ o:depends({ [option_name("protocol")] = "_shunt" })
|
|||
-- [[ 分流模块 End ]]
|
||||
|
||||
o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vmess" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
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_xray_depends(o, { [option_name("protocol")] = "wireguard" })
|
||||
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" })
|
||||
|
||||
o = s:option(Value, option_name("port"), translate("Port"))
|
||||
o.datatype = "port"
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vmess" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
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_xray_depends(o, { [option_name("protocol")] = "wireguard" })
|
||||
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" })
|
||||
|
||||
local protocols = s.fields[option_name("protocol")].keylist
|
||||
if #protocols > 0 then
|
||||
for index, value in ipairs(protocols) do
|
||||
if not value:find("_") then
|
||||
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" })
|
||||
o:depends({ [option_name("protocol")] = "vless" })
|
||||
|
||||
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"))
|
||||
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"
|
||||
|
@ -392,72 +301,49 @@ 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 = s:option(Value, option_name("fingerprint"), translate("Finger Print"), translate("Avoid using randomized, unless you have to."))
|
||||
o:value("", translate("Disable"))
|
||||
o:value("chrome")
|
||||
o:value("firefox")
|
||||
o:value("safari")
|
||||
o:value("ios")
|
||||
-- o:value("android")
|
||||
o:value("edge")
|
||||
-- o:value("360")
|
||||
o:value("qq")
|
||||
o:value("random")
|
||||
o:value("randomized")
|
||||
o.default = ""
|
||||
add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = false })
|
||||
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(Value, option_name("reality_fingerprint"), translate("Finger Print"), translate("Avoid using randomized, unless you have to."))
|
||||
o.not_rewrite = true
|
||||
o = s:option(Flag, option_name("utls"), translate("uTLS"))
|
||||
o.default = "0"
|
||||
o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
|
||||
|
||||
o = s:option(ListValue, option_name("fingerprint"), translate("Finger Print"))
|
||||
o:value("chrome")
|
||||
o:value("firefox")
|
||||
o:value("safari")
|
||||
o:value("ios")
|
||||
-- o:value("android")
|
||||
o:value("edge")
|
||||
-- o:value("360")
|
||||
o:value("safari")
|
||||
o:value("360")
|
||||
o:value("qq")
|
||||
o:value("ios")
|
||||
o:value("android")
|
||||
o:value("random")
|
||||
o:value("randomized")
|
||||
o.default = "chrome"
|
||||
add_xray_depends(o, { [option_name("tls")] = true, [option_name("reality")] = true })
|
||||
function o.cfgvalue(self, section)
|
||||
return m:get(section, "fingerprint")
|
||||
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, "fingerprint", value)
|
||||
end
|
||||
end
|
||||
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")
|
||||
|
@ -467,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部分 ]]--
|
||||
|
||||
|
@ -518,194 +398,152 @@ 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('<br />none: default, no masquerade, data sent is packets with no characteristics.<br />srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).<br />utp: packets disguised as uTP will be recognized as bittorrent downloaded data.<br />wechat-video: packets disguised as WeChat video calls.<br />dtls: disguised as DTLS 1.2 packet.<br />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" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision-udp443" })
|
||||
o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision" })
|
||||
o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision-udp443" })
|
||||
|
||||
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
|
||||
|
@ -714,5 +552,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
|
||||
|
|
|
@ -180,27 +180,19 @@ end
|
|||
-- [[ 分流模块 End ]]
|
||||
|
||||
o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
|
||||
o:depends({ [option_name("protocol")] = "vmess" })
|
||||
o:depends({ [option_name("protocol")] = "vless" })
|
||||
o:depends({ [option_name("protocol")] = "http" })
|
||||
o:depends({ [option_name("protocol")] = "socks" })
|
||||
o:depends({ [option_name("protocol")] = "shadowsocks" })
|
||||
o:depends({ [option_name("protocol")] = "shadowsocksr" })
|
||||
o:depends({ [option_name("protocol")] = "trojan" })
|
||||
o:depends({ [option_name("protocol")] = "wireguard" })
|
||||
o:depends({ [option_name("protocol")] = "shadowtls" })
|
||||
|
||||
o = s:option(Value, option_name("port"), translate("Port"))
|
||||
o.datatype = "port"
|
||||
o:depends({ [option_name("protocol")] = "vmess" })
|
||||
o:depends({ [option_name("protocol")] = "vless" })
|
||||
o:depends({ [option_name("protocol")] = "http" })
|
||||
o:depends({ [option_name("protocol")] = "socks" })
|
||||
o:depends({ [option_name("protocol")] = "shadowsocks" })
|
||||
o:depends({ [option_name("protocol")] = "shadowsocksr" })
|
||||
o:depends({ [option_name("protocol")] = "trojan" })
|
||||
o:depends({ [option_name("protocol")] = "wireguard" })
|
||||
o:depends({ [option_name("protocol")] = "shadowtls" })
|
||||
|
||||
local protocols = s.fields[option_name("protocol")].keylist
|
||||
if #protocols > 0 then
|
||||
for index, value in ipairs(protocols) do
|
||||
if not value:find("_") then
|
||||
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(ListValue, option_name("shadowtls_version"), translate("Version"))
|
||||
o.default = "1"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,10 +2,12 @@ local m, s = ...
|
|||
|
||||
local api = require "luci.passwall2.api"
|
||||
|
||||
if not api.is_finded("xray") and not api.is_finded("v2ray")then
|
||||
if not api.is_finded("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.is_finded("v2ray") then
|
||||
s.fields["type"]:value("V2ray", translate("V2ray"))
|
||||
end
|
||||
if api.is_finded("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,60 +69,38 @@ 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
|
||||
|
@ -172,39 +111,33 @@ function o.write(self, section, value)
|
|||
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" })
|
||||
o:depends({ [option_name("protocol")] = "vless" })
|
||||
|
||||
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('<br />none: default, no masquerade, data sent is packets with no characteristics.<br />srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).<br />utp: packets disguised as uTP will be recognized as bittorrent downloaded data.<br />wechat-video: packets disguised as WeChat video calls.<br />dtls: disguised as DTLS 1.2 packet.<br />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
|
||||
|
@ -528,4 +399,13 @@ for key, value in pairs(s.fields) do
|
|||
s.fields[key].remove = rm_prefix_remove
|
||||
end
|
||||
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
|
||||
|
|
|
@ -282,7 +282,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"
|
||||
|
@ -314,7 +314,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"
|
||||
|
|
|
@ -46,13 +46,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",
|
||||
|
@ -62,15 +62,4 @@ _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
|
||||
}
|
||||
|
||||
return _M
|
||||
|
|
|
@ -144,9 +144,6 @@ local function start()
|
|||
elseif type == "SS-Rust" then
|
||||
config = require(require_dir .. "util_shadowsocks").gen_config_server(user)
|
||||
bin = ln_run("/usr/bin/ssserver", "ssserver", "-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)
|
||||
|
|
|
@ -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
|
||||
local relay_port = node.port
|
||||
new_port = get_new_port()
|
||||
local config_file = string.format("%s_%s_%s.json", flag, tag, new_port)
|
||||
|
@ -87,10 +87,10 @@ 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
|
||||
if node.reality and node.reality == "1" then
|
||||
node.stream_security = "reality"
|
||||
end
|
||||
end
|
||||
|
@ -133,7 +133,7 @@ function gen_outbound(flag, node, tag, proxy_table)
|
|||
tlsSettings = (node.stream_security == "tls") and {
|
||||
serverName = node.tls_serverName,
|
||||
allowInsecure = (node.tls_allowInsecure == "1") and true or false,
|
||||
fingerprint = (node.type == "Xray" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil
|
||||
fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil
|
||||
} or nil,
|
||||
realitySettings = (node.stream_security == "reality") and {
|
||||
serverName = node.tls_serverName,
|
||||
|
@ -760,7 +760,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
|
||||
|
|
|
@ -91,7 +91,7 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md
|
|||
</div>
|
||||
</div>
|
||||
<div class="pure-u-2-3">
|
||||
<h4 id="status_node">V2ray<br /><span class="red"><%:NOT RUNNING%></span></h4>
|
||||
<h4 id="status_node">Xray<br /><span class="red"><%:NOT RUNNING%></span></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -145,7 +145,7 @@ https://github.com/pure-css/pure/blob/master/LICENSE.md
|
|||
if (true) {
|
||||
var status_node = document.getElementById('status_node');
|
||||
if (status_node) {
|
||||
var text = 'V2ray<br />';
|
||||
var text = 'Xray<br />';
|
||||
if (data["global_status"])
|
||||
text += '<span class="green"><%:RUNNING%></span>';
|
||||
else
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<%+cbi/valueheader%>
|
||||
<%
|
||||
local api = require "luci.passwall2.api"
|
||||
local has_v2ray = api.is_finded("v2ray")
|
||||
local has_xray = api.is_finded("xray")
|
||||
-%>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
|
@ -141,7 +140,7 @@ local has_xray = api.is_finded("xray")
|
|||
} else if (v_type === "Hysteria") {
|
||||
dom_prefix = "hysteria_"
|
||||
protocol = "hysteria"
|
||||
} else if (v_type === "V2ray" || v_type === "Xray") {
|
||||
} else if (v_type === "Xray") {
|
||||
dom_prefix = "xray_"
|
||||
}
|
||||
var _address = ""
|
||||
|
@ -230,7 +229,7 @@ local has_xray = api.is_finded("xray")
|
|||
"&protoparam=" + b64encsafe(v_protocol_param.value) +
|
||||
"&remarks=" + b64encutf8safe(v_alias.value);
|
||||
url = b64encsafe(ssr_str);
|
||||
} else if ((v_type === "V2ray" || v_type === "Xray") && opt.get(dom_prefix + "protocol").value === "vmess") {
|
||||
} else if (v_type === "Xray" && opt.get(dom_prefix + "protocol").value === "vmess") {
|
||||
protocol = "vmess";
|
||||
var info = {};
|
||||
info.v = "2";
|
||||
|
@ -275,7 +274,7 @@ local has_xray = api.is_finded("xray")
|
|||
info.sni = opt.get(dom_prefix + "tls_serverName").value;
|
||||
}
|
||||
url = b64EncodeUnicode(JSON.stringify(info));
|
||||
} else if ((v_type === "V2ray" || v_type === "Xray") && opt.get(dom_prefix + "protocol").value === "vless") {
|
||||
} else if (v_type === "Xray" && opt.get(dom_prefix + "protocol").value === "vless") {
|
||||
protocol = "vless";
|
||||
var v_password = opt.get(dom_prefix + "uuid");
|
||||
var v_port = opt.get(dom_prefix + "port");
|
||||
|
@ -341,7 +340,7 @@ local has_xray = api.is_finded("xray")
|
|||
params = params.substring(1);
|
||||
}
|
||||
url += params;
|
||||
} else if (((v_type === "V2ray" || v_type === "Xray") && opt.get(dom_prefix + "protocol").value === "trojan")) {
|
||||
} else if ((v_type === "Xray" && opt.get(dom_prefix + "protocol").value === "trojan")) {
|
||||
protocol = "trojan";
|
||||
var v_password = opt.get(dom_prefix + "password");
|
||||
var v_port = opt.get(dom_prefix + "port");
|
||||
|
@ -649,9 +648,7 @@ local has_xray = api.is_finded("xray")
|
|||
queryParam[decodeURIComponent(params[0]).toLowerCase()] = decodeURIComponent(params[1] || '');
|
||||
}
|
||||
}
|
||||
<% if has_v2ray then %>
|
||||
opt.set('type', "V2ray");
|
||||
<% elseif has_xray then %>
|
||||
<% if has_xray then %>
|
||||
opt.set('type', "Xray");
|
||||
<% end %>
|
||||
opt.set(dom_prefix + 'protocol', "trojan");
|
||||
|
@ -670,9 +667,7 @@ local has_xray = api.is_finded("xray")
|
|||
dom_prefix = "xray_"
|
||||
var sstr = b64DecodeUnicode(ssu[1]);
|
||||
var ploc = sstr.indexOf("/?");
|
||||
<% if has_v2ray then %>
|
||||
opt.set('type', "V2ray");
|
||||
<% elseif has_xray then %>
|
||||
<% if has_xray then %>
|
||||
opt.set('type', "Xray");
|
||||
<% end %>
|
||||
opt.set(dom_prefix + 'protocol', "vmess");
|
||||
|
@ -723,8 +718,6 @@ local has_xray = api.is_finded("xray")
|
|||
dom_prefix = "xray_"
|
||||
<% if has_xray then %>
|
||||
opt.set('type', "Xray");
|
||||
<% elseif has_v2ray then %>
|
||||
opt.set('type', "V2ray");
|
||||
<% end %>
|
||||
opt.set(dom_prefix + 'protocol', "vless");
|
||||
var m = parseNodeUrl(ssrurl);
|
||||
|
|
|
@ -8,7 +8,7 @@ local node = api.uci_get_type("global", "node", "nil")
|
|||
if node ~= "nil" then
|
||||
local node_type = api.uci_get_type_id(node, "type")
|
||||
local node_protocol = api.uci_get_type_id(node, "protocol")
|
||||
if (node_type == "V2ray" or node_type == "Xray") and node_protocol == "_shunt" then
|
||||
if node_type == "Xray" and node_protocol == "_shunt" then
|
||||
default_node_type = node_protocol
|
||||
uci:foreach("passwall2", "shunt_rules", function(e)
|
||||
if e[".name"] and e.remarks then
|
||||
|
|
|
@ -1012,9 +1012,6 @@ msgstr "使用TLS"
|
|||
msgid "Naiveproxy Protocol"
|
||||
msgstr "Naiveproxy协议"
|
||||
|
||||
msgid "V2ray Protocol"
|
||||
msgstr "V2ray协议"
|
||||
|
||||
msgid "User Level"
|
||||
msgstr "用户等级(level)"
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ config global_rules
|
|||
option v2ray_location_asset '/usr/share/v2ray/'
|
||||
|
||||
config global_app
|
||||
option v2ray_file '/usr/bin/v2ray'
|
||||
option xray_file '/usr/bin/xray'
|
||||
option brook_file '/usr/bin/brook'
|
||||
option hysteria_file '/usr/bin/hysteria'
|
||||
|
|
|
@ -284,21 +284,16 @@ lua_api() {
|
|||
echo $(lua -e "local api = require 'luci.passwall2.api' print(api.${func})")
|
||||
}
|
||||
|
||||
run_v2ray() {
|
||||
run_xray() {
|
||||
local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
||||
local dns_listen_port direct_dns_protocol direct_dns_udp_server direct_dns_tcp_server direct_dns_doh direct_dns_client_ip direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_fakedns remote_dns_query_strategy dns_cache
|
||||
local loglevel log_file config_file
|
||||
local _extra_param=""
|
||||
eval_set_val $@
|
||||
local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
|
||||
if [ "$type" != "v2ray" ] && [ "$type" != "xray" ]; then
|
||||
if [ "$type" != "xray" ]; then
|
||||
local bin=$(first_type $(config_t_get global_app xray_file) xray)
|
||||
if [ -n "$bin" ]; then
|
||||
type="xray"
|
||||
else
|
||||
bin=$(first_type $(config_t_get global_app v2ray_file) v2ray)
|
||||
[ -n "$bin" ] && type="v2ray"
|
||||
fi
|
||||
[ -n "$bin" ] && type="xray"
|
||||
fi
|
||||
[ -z "$type" ] && return 1
|
||||
[ -n "$log_file" ] || local log_file="/dev/null"
|
||||
|
@ -601,7 +596,7 @@ run_socks() {
|
|||
error_msg="某种原因,此 Socks 服务的相关配置已失联,启动中止!"
|
||||
fi
|
||||
|
||||
if [ "$type" == "sing-box" ] || [ "$type" == "v2ray" ] || [ "$type" == "xray" ]; then
|
||||
if [ "$type" == "sing-box" ] || [ "$type" == "xray" ]; then
|
||||
local protocol=$(config_n_get $node protocol)
|
||||
if [ "$protocol" == "_balancing" ] || [ "$protocol" == "_shunt" ] || [ "$protocol" == "_iface" ]; then
|
||||
unset error_msg
|
||||
|
@ -624,7 +619,6 @@ run_socks() {
|
|||
lua $UTIL_SINGBOX gen_config -flag SOCKS_$flag -node $node -local_socks_port $socks_port ${_extra_param} > $config_file
|
||||
ln_run "$(first_type $(config_t_get global_app singbox_file) sing-box)" "sing-box" $log_file run -c "$config_file"
|
||||
;;
|
||||
v2ray|\
|
||||
xray)
|
||||
[ "$http_port" != "0" ] && {
|
||||
http_flag=1
|
||||
|
@ -632,7 +626,7 @@ run_socks() {
|
|||
local _extra_param="-local_http_port $http_port"
|
||||
}
|
||||
lua $UTIL_XRAY gen_config -flag SOCKS_$flag -node $node -local_socks_port $socks_port ${_extra_param} > $config_file
|
||||
ln_run "$(first_type $(config_t_get global_app ${type}_file) ${type})" ${type} $log_file run -c "$config_file"
|
||||
ln_run "$(first_type $(config_t_get global_app xray_file) xray)" "xray" $log_file run -c "$config_file"
|
||||
;;
|
||||
naiveproxy)
|
||||
lua $UTIL_NAIVE gen_config -node $node -run_type socks -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $port > $config_file
|
||||
|
@ -686,20 +680,15 @@ run_socks() {
|
|||
esac
|
||||
|
||||
# http to socks
|
||||
[ -z "$http_flag" ] && [ "$http_port" != "0" ] && [ -n "$http_config_file" ] && [ "$type" != "sing-box" ] && [ "$type" != "v2ray" ] && [ "$type" != "xray" ] && [ "$type" != "socks" ] && {
|
||||
[ -z "$http_flag" ] && [ "$http_port" != "0" ] && [ -n "$http_config_file" ] && [ "$type" != "sing-box" ] && [ "$type" != "xray" ] && [ "$type" != "socks" ] && {
|
||||
local bin=$(first_type $(config_t_get global_app singbox_file) sing-box)
|
||||
if [ -n "$bin" ]; then
|
||||
type="sing-box"
|
||||
lua $UTIL_SINGBOX gen_proto_config -local_http_port $http_port -server_proto socks -server_address "127.0.0.1" -server_port $socks_port -server_username $_username -server_password $_password > $http_config_file
|
||||
ln_run "$bin" ${type} /dev/null run -c "$http_config_file"
|
||||
else
|
||||
bin=$(first_type $(config_t_get global_app v2ray_file) v2ray)
|
||||
if [ -n "$bin" ]; then
|
||||
type="v2ray"
|
||||
else
|
||||
bin=$(first_type $(config_t_get global_app xray_file) xray)
|
||||
[ -n "$bin" ] && type="xray"
|
||||
fi
|
||||
bin=$(first_type $(config_t_get global_app xray_file) xray)
|
||||
[ -n "$bin" ] && type="xray"
|
||||
[ -z "$type" ] && return 1
|
||||
lua $UTIL_XRAY gen_proto_config -local_http_port $http_port -server_proto socks -server_address "127.0.0.1" -server_port $socks_port -server_username $_username -server_password $_password > $http_config_file
|
||||
ln_run "$bin" ${type} /dev/null run -c "$http_config_file"
|
||||
|
@ -819,7 +808,8 @@ run_global() {
|
|||
node_http_port=$(config_t_get global node_http_port 0)
|
||||
[ "$node_http_port" != "0" ] && V2RAY_ARGS="${V2RAY_ARGS} http_port=${node_http_port}"
|
||||
|
||||
run_singbox $V2RAY_ARGS
|
||||
[ "${TYPE}" = "xray" ] && run_xray $V2RAY_ARGS
|
||||
[ "${TYPE}" = "sing-box" ] && run_singbox $V2RAY_ARGS
|
||||
}
|
||||
|
||||
start_socks() {
|
||||
|
@ -1070,7 +1060,10 @@ acl_app() {
|
|||
config_file=$TMP_ACL_PATH/${node}_TCP_UDP_DNS_${redir_port}.json
|
||||
dns_port=$(get_new_port $(expr $dns_port + 1))
|
||||
local acl_socks_port=$(get_new_port $(expr $redir_port + $index))
|
||||
run_singbox flag=acl_$sid node=$node redir_port=$redir_port socks_address=127.0.0.1 socks_port=$acl_socks_port dns_listen_port=${dns_port} direct_dns_protocol=${direct_dns_protocol} direct_dns_udp_server=${direct_dns} direct_dns_tcp_server=${direct_dns} direct_dns_doh="${direct_dns}" direct_dns_client_ip=${direct_dns_client_ip} direct_dns_query_strategy=${direct_dns_query_strategy} remote_dns_protocol=${remote_dns_protocol} remote_dns_tcp_server=${remote_dns} remote_dns_udp_server=${remote_dns} remote_dns_doh="${remote_dns}" remote_dns_client_ip=${remote_dns_client_ip} remote_fakedns=${remote_fakedns} remote_dns_query_strategy=${remote_dns_query_strategy} config_file=${config_file}
|
||||
local run_func
|
||||
[ "${TYPE}" = "xray" ] && run_func="run_xray"
|
||||
[ "${TYPE}" = "sing-box" ] && run_func="run_singbox"
|
||||
${run_func} flag=acl_$sid node=$node redir_port=$redir_port socks_address=127.0.0.1 socks_port=$acl_socks_port dns_listen_port=${dns_port} direct_dns_protocol=${direct_dns_protocol} direct_dns_udp_server=${direct_dns} direct_dns_tcp_server=${direct_dns} direct_dns_doh="${direct_dns}" direct_dns_client_ip=${direct_dns_client_ip} direct_dns_query_strategy=${direct_dns_query_strategy} remote_dns_protocol=${remote_dns_protocol} remote_dns_tcp_server=${remote_dns} remote_dns_udp_server=${remote_dns} remote_dns_doh="${remote_dns}" remote_dns_client_ip=${remote_dns_client_ip} remote_fakedns=${remote_fakedns} remote_dns_query_strategy=${remote_dns_query_strategy} config_file=${config_file}
|
||||
fi
|
||||
dnsmasq_port=$(get_new_port $(expr $dnsmasq_port + 1))
|
||||
redirect_dns_port=$dnsmasq_port
|
||||
|
|
|
@ -12,7 +12,7 @@ local arg1 = arg[1]
|
|||
local reboot = 0
|
||||
local geoip_update = 0
|
||||
local geosite_update = 0
|
||||
local v2ray_asset_location = ucic:get_first(name, 'global_rules', "v2ray_location_asset", "/usr/share/v2ray/")
|
||||
local asset_location = ucic:get_first(name, 'global_rules', "v2ray_location_asset", "/usr/share/v2ray/")
|
||||
|
||||
-- Custom geo file
|
||||
local geoip_api = ucic:get_first(name, 'global_rules', "geoip_url", "https://api.github.com/repos/Loyalsoldier/v2ray-rules-dat/releases/latest")
|
||||
|
@ -61,8 +61,8 @@ local function fetch_geoip()
|
|||
f:write(content:gsub("geoip.dat", "/tmp/geoip.dat"), "")
|
||||
f:close()
|
||||
|
||||
if nixio.fs.access(v2ray_asset_location .. "geoip.dat") then
|
||||
luci.sys.call(string.format("cp -f %s %s", v2ray_asset_location .. "geoip.dat", "/tmp/geoip.dat"))
|
||||
if nixio.fs.access(asset_location .. "geoip.dat") then
|
||||
luci.sys.call(string.format("cp -f %s %s", asset_location .. "geoip.dat", "/tmp/geoip.dat"))
|
||||
if luci.sys.call('sha256sum -c /tmp/geoip.dat.sha256sum > /dev/null 2>&1') == 0 then
|
||||
log("geoip 版本一致,无需更新。")
|
||||
return 1
|
||||
|
@ -72,7 +72,7 @@ local function fetch_geoip()
|
|||
if v2.name and v2.name == "geoip.dat" then
|
||||
sret = curl(v2.browser_download_url, "/tmp/geoip.dat")
|
||||
if luci.sys.call('sha256sum -c /tmp/geoip.dat.sha256sum > /dev/null 2>&1') == 0 then
|
||||
luci.sys.call(string.format("mkdir -p %s && cp -f %s %s", v2ray_asset_location, "/tmp/geoip.dat", v2ray_asset_location .. "geoip.dat"))
|
||||
luci.sys.call(string.format("mkdir -p %s && cp -f %s %s", asset_location, "/tmp/geoip.dat", asset_location .. "geoip.dat"))
|
||||
reboot = 1
|
||||
log("geoip 更新成功。")
|
||||
return 1
|
||||
|
@ -112,8 +112,8 @@ local function fetch_geosite()
|
|||
f:write(content:gsub("geosite.dat", "/tmp/geosite.dat"), "")
|
||||
f:close()
|
||||
|
||||
if nixio.fs.access(v2ray_asset_location .. "geosite.dat") then
|
||||
luci.sys.call(string.format("cp -f %s %s", v2ray_asset_location .. "geosite.dat", "/tmp/geosite.dat"))
|
||||
if nixio.fs.access(asset_location .. "geosite.dat") then
|
||||
luci.sys.call(string.format("cp -f %s %s", asset_location .. "geosite.dat", "/tmp/geosite.dat"))
|
||||
if luci.sys.call('sha256sum -c /tmp/geosite.dat.sha256sum > /dev/null 2>&1') == 0 then
|
||||
log("geosite 版本一致,无需更新。")
|
||||
return 1
|
||||
|
@ -123,7 +123,7 @@ local function fetch_geosite()
|
|||
if v2.name and v2.name == "geosite.dat" then
|
||||
sret = curl(v2.browser_download_url, "/tmp/geosite.dat")
|
||||
if luci.sys.call('sha256sum -c /tmp/geosite.dat.sha256sum > /dev/null 2>&1') == 0 then
|
||||
luci.sys.call(string.format("mkdir -p %s && cp -f %s %s", v2ray_asset_location, "/tmp/geosite.dat", v2ray_asset_location .. "geosite.dat"))
|
||||
luci.sys.call(string.format("mkdir -p %s && cp -f %s %s", asset_location, "/tmp/geosite.dat", asset_location .. "geosite.dat"))
|
||||
reboot = 1
|
||||
log("geosite 更新成功。")
|
||||
return 1
|
||||
|
|
|
@ -24,7 +24,6 @@ uci:revert(appname)
|
|||
local has_ss = api.is_finded("ss-redir")
|
||||
local has_ss_rust = api.is_finded("sslocal")
|
||||
local has_singbox = api.is_finded("sing-box")
|
||||
local has_v2ray = api.is_finded("v2ray")
|
||||
local has_xray = api.is_finded("xray")
|
||||
local allowInsecure_default = true
|
||||
local ss_aead_type_default = uci:get(appname, "@global_subscribe[0]", "ss_aead_type") or "shadowsocks-libev"
|
||||
|
@ -388,7 +387,6 @@ local function processData(szType, content, add_mode, add_from)
|
|||
result.remarks = base64Decode(params.remarks)
|
||||
elseif szType == 'vmess' then
|
||||
local info = jsonParse(content)
|
||||
result.type = 'V2ray'
|
||||
if has_xray then
|
||||
result.type = 'Xray'
|
||||
end
|
||||
|
@ -539,13 +537,6 @@ local function processData(szType, content, add_mode, add_from)
|
|||
elseif ss_aead_type_default == "sing-box" and has_singbox and not result.plugin then
|
||||
result.type = 'sing-box'
|
||||
result.protocol = 'shadowsocks'
|
||||
elseif ss_aead_type_default == "v2ray" and has_v2ray and not result.plugin then
|
||||
result.type = 'V2ray'
|
||||
result.protocol = 'shadowsocks'
|
||||
result.transport = 'tcp'
|
||||
if method:lower() == "chacha20-ietf-poly1305" then
|
||||
result.method = "chacha20-poly1305"
|
||||
end
|
||||
elseif ss_aead_type_default == "xray" and has_xray and not result.plugin then
|
||||
result.type = 'Xray'
|
||||
result.protocol = 'shadowsocks'
|
||||
|
@ -564,7 +555,6 @@ local function processData(szType, content, add_mode, add_from)
|
|||
content = content:sub(0, idx_sp - 1)
|
||||
end
|
||||
result.remarks = UrlDecode(alias)
|
||||
result.type = 'V2ray'
|
||||
if has_xray then
|
||||
result.type = 'Xray'
|
||||
end
|
||||
|
@ -632,7 +622,6 @@ local function processData(szType, content, add_mode, add_from)
|
|||
result.group = content.airport
|
||||
result.remarks = content.remarks
|
||||
elseif szType == "vless" then
|
||||
result.type = 'V2ray'
|
||||
if has_xray then
|
||||
result.type = 'Xray'
|
||||
end
|
||||
|
|
|
@ -21,13 +21,13 @@ define Download/geoip
|
|||
HASH:=536d7aa9f54af747153d4f982adaa3181025dd72faaba8f532b3f514b467eff8
|
||||
endef
|
||||
|
||||
GEOSITE_VER:=20230902035830
|
||||
GEOSITE_VER:=20230905081311
|
||||
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
|
||||
define Download/geosite
|
||||
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
|
||||
URL_FILE:=dlc.dat
|
||||
FILE:=$(GEOSITE_FILE)
|
||||
HASH:=756445bdd57793cc5bd5bb04784383c28b11a52107dc076f7146e32a05d0c7ee
|
||||
HASH:=d393deda756a446ec5247730ef09fed80ba9fb8d9204d1263c45a3604435fe57
|
||||
endef
|
||||
|
||||
define Package/v2ray-geodata/template
|
||||
|
|
|
@ -56,7 +56,7 @@ define Download/v2raya-web
|
|||
URL:=https://codeload.github.com/v2rayA/v2raya-web/tar.gz/v$(PKG_VERSION)?
|
||||
URL_FILE:=$(WEB_FILE)
|
||||
FILE:=$(WEB_FILE)
|
||||
HASH:=skip
|
||||
HASH:=fe02b55198067dca1cf3edb92adef55062f88022c8ba174cb312478b27bdcc9e
|
||||
endef
|
||||
|
||||
GO_PKG_TARGET_VARS:=$(filter-out CGO_ENABLED=%,$(GO_PKG_TARGET_VARS)) CGO_ENABLED=0
|
||||
|
|
Loading…
Reference in New Issue