-- Licensed to the public under the GNU General Public License v3.
module("luci.controller.shadowsocksr", package.seeall)
+require "nixio"
+require "nixio.fs"
+local uci = require("luci.model.uci").cursor()
+
+local function sh_uci_commit(config)
+ luci.sys.call(string.format("uci -q commit %s", config))
+end
+
+local function is_old_uci()
+ return luci.sys.call("grep -E 'require[ \t]*\"uci\"' /usr/lib/lua/luci/model/uci.lua >/dev/null 2>&1") == 0
+end
+
+local function uci_save(cursor, config, commit, apply)
+ if is_old_uci() then
+ cursor:save(config)
+ if commit then
+ cursor:commit(config)
+ if apply then
+ luci.sys.call("/etc/init.d/" .. config .. " reload > /dev/null 2>&1 &")
+ end
+ end
+ else
+ commit = true
+ if commit then
+ if apply then
+ cursor:commit(config)
+ else
+ sh_uci_commit(config)
+ end
+ end
+ end
+end
+
+local function url(...)
+ local url = string.format("admin/services/%s", "shadowsocksr")
+ local args = { ... }
+ for i, v in ipairs(args) do
+ if v and v ~= "" then
+ url = url .. "/" .. v
+ end
+ end
+ return require "luci.dispatcher".build_url(url)
+end
function index()
if not nixio.fs.access("/etc/config/shadowsocksr") then
@@ -28,10 +71,14 @@ function index()
entry({"admin", "services", "shadowsocksr", "reset"}, call("act_reset"))
entry({"admin", "services", "shadowsocksr", "restart"}, call("act_restart"))
entry({"admin", "services", "shadowsocksr", "delete"}, call("act_delete"))
+ --[[ API ]]
+ entry({"admin", "services", "shadowsocksr", "add_node"}, call("act_add_node")).leaf = true
+ entry({"admin", "services", "shadowsocksr", "remove_node"}, call("act_remove"))
+ entry({"admin", "services", "shadowsocksr", "save_node_order"}, call("act_save_order")).leaf = true
+ entry({"admin", "services", "shadowsocksr", "get_now_use_node"}, call("act_get_now_use_node")).leaf = true
entry({'admin', 'services', "shadowsocksr", 'ip'}, call('check_ip')) -- 获取ip情况
- --[[Backup]]
+ --[[Backup]]
entry({"admin", "services", "shadowsocksr", "backup"}, call("create_backup")).leaf = true
-
end
function check_site(host, port)
@@ -103,78 +150,132 @@ function act_status()
end
function act_ping()
- local e = {}
- local domain = luci.http.formvalue("domain")
- local port = tonumber(luci.http.formvalue("port") or 0)
- local transport = luci.http.formvalue("transport")
- local wsPath = luci.http.formvalue("wsPath") or ""
- local tls = luci.http.formvalue("tls")
- e.index = luci.http.formvalue("index")
+ local e = {}
+ local domain = luci.http.formvalue("domain")
+ local port = tonumber(luci.http.formvalue("port") or 0)
+ local transport = (luci.http.formvalue("transport") or ""):lower()
+ local wsPath = luci.http.formvalue("wsPath") or ""
+ local tls = luci.http.formvalue("tls")
+ local host = luci.http.formvalue("host")
+ local type = (luci.http.formvalue("type") or ""):lower()
+ local proto = (luci.http.formvalue("proto") or ""):lower()
+ e.index = luci.http.formvalue("index")
- local use_nft = luci.sys.call("command -v nft >/dev/null") == 0
- local iret = false
+ local is_ip = domain and domain:match("^%d+%.%d+%.%d+%.%d+$")
- if use_nft then
- iret = luci.sys.call("nft add element inet ss_spec ss_spec_wan_ac { " .. domain .. " } 2>/dev/null") == 0
- else
- iret = luci.sys.call("ipset add ss_spec_wan_ac " .. domain .. " 2>/dev/null") == 0
- end
+ -- 临时放行防火墙逻辑
+ local use_nft = luci.sys.call("command -v nft >/dev/null") == 0
+ local iret = false
+ if domain then
+ if use_nft then
+ iret = luci.sys.call("nft add element inet ss_spec ss_spec_wan_ac { " .. domain .. " } 2>/dev/null") == 0
+ else
+ iret = luci.sys.call("ipset add ss_spec_wan_ac " .. domain .. " 2>/dev/null") == 0
+ end
+ end
+ -- Hysteria2 节点检测
+ if proto:find("hysteria2") or type:find("hysteria2") then
+ local node_id = e.index
+ -- 调用Shell测试脚本
+ local cmd = string.format(
+ "/usr/share/shadowsocksr/hy2_test.sh url_test_hy2 %s",
+ node_id
+ )
+ local res = luci.sys.exec(cmd) or ""
+ -- 解析结果
+ local http_code, time_pre = string.match(res, "(%d+):([%d%.]+)")
+ if http_code == "200" or http_code == "204" then
+ e.socket = true
+ e.ping = math.floor(tonumber(time_pre or 0) * 1000)
+ else
+ e.socket = false
+ e.ping = 0
+ end
+ elseif transport == "ws" then
+ -- WebSocket 探测
+ local result = ""
+ local success = false
+ -- WebSocket 探测 (适用于域名,或带 SNI 的 IP)
+ if not is_ip or (host and host ~= "") then
+ local resolve_arg = ""
+ local final_domain = domain
+ if is_ip and host and host ~= "" then
+ -- IP 模式下使用 --resolve 强制指定 SNI,解决 TLS 握手失败
+ resolve_arg = string.format("--resolve '%s:%d:%s' ", host, port, domain)
+ final_domain = host
+ end
+ local prefix = (tls == '1') and "https://" or "http://"
+ local address = prefix .. final_domain .. ':' .. port .. wsPath
+ local cmd = string.format(
+ "curl --http1.1 -m 2 -ksN -o /dev/null %s" ..
+ "-w 'time_connect=%%{time_connect}\\nhttp_code=%%{http_code}' " ..
+ "-H 'Connection: Upgrade' -H 'Upgrade: websocket' " ..
+ "-H 'Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==' " ..
+ "-H 'Sec-WebSocket-Version: 13' '%s'",
+ resolve_arg, address
+ )
+ result = luci.sys.exec(cmd) or ""
+ success = (string.match(result, "http_code=(%d+)") == "101")
+ end
+ -- 如果深度探测失败,或是不支持深测的纯 IP
+ if not success then
+ local socket = nixio.socket("inet", "stream")
+ if socket then
+ socket:setopt("socket", "rcvtimeo", 3)
+ socket:setopt("socket", "sndtimeo", 3)
+ success = socket:connect(domain, port)
+ socket:close()
+ end
+ --luci.sys.exec(string.format("echo 'Node %s (ws) failed deep test, using TCP fallback' >> /tmp/ping.log", domain))
+ end
+ e.socket = success
+ -- 解析延迟 (优先用 curl 数据,失败则回退到 tcping)
+ local ping_time = tonumber(string.match(result, "time_connect=(%d+.%d%d%d)"))
+ if ping_time and ping_time > 0 then
+ e.ping = math.floor(ping_time * 1000)
+ else
+ local tcping_cmd = string.format("tcping -q -c 1 -t 1 -p %d %s 2>/dev/null | grep -o 'time=[0-9]*' | cut -d= -f2", port, domain)
+ e.ping = tonumber(luci.sys.exec(tcping_cmd)) or 0
+ end
+ else
+ -- 3. 非 WebSocket 节点的探测逻辑 (TCP / ICMP / UDP)
+ local socket = nixio.socket("inet", "stream")
+ if socket then
+ socket:setopt("socket", "rcvtimeo", 3)
+ socket:setopt("socket", "sndtimeo", 3)
+ e.socket = socket:connect(domain, port)
+ socket:close()
+ end
- if transport == "ws" then
- local prefix = tls == '1' and "https://" or "http://"
- local address = prefix .. domain .. ':' .. port .. wsPath
- local result = luci.sys.exec(
- "curl --http1.1 -m 2 -ksN -o /dev/null " ..
- "-w 'time_connect=%{time_connect}\nhttp_code=%{http_code}' " ..
- "-H 'Connection: Upgrade' -H 'Upgrade: websocket' " ..
- "-H 'Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==' " ..
- "-H 'Sec-WebSocket-Version: 13' " .. address
- )
- e.socket = string.match(result,"http_code=(%d+)") == "101"
- local ping_time = tonumber(string.match(result, "time_connect=(%d+.%d%d%d)"))
- e.ping = ping_time and ping_time * 1000 or nil
- else
- -- TCP ping
- local socket = nixio.socket("inet", "stream")
- socket:setopt("socket", "rcvtimeo", 3)
- socket:setopt("socket", "sndtimeo", 3)
- e.socket = socket:connect(domain, port)
- socket:close()
+ -- 延迟:tcping -> ping -> nping(udp)
+ local tcping_cmd = string.format("tcping -q -c 1 -t 1 -p %d %s 2>/dev/null | grep -o 'time=[0-9]*' | cut -d= -f2", port, domain)
+ e.ping = tonumber(luci.sys.exec(tcping_cmd))
+ if not e.ping then
+ local icmp_cmd = string.format("ping -c 1 -W 1 %s 2>/dev/null | grep -o 'time=[0-9.]*' | cut -d= -f2", domain)
+ e.ping = tonumber(luci.sys.exec(icmp_cmd))
+ end
- e.ping = tonumber(luci.sys.exec(string.format(
- "tcping -q -c 1 -i 1 -t 2 -p %d %s 2>/dev/null | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}'",
- port, domain
- )))
+ if not e.ping then
+ local udp_cmd = string.format("nping --udp -c 1 -p %d %s 2>/dev/null | grep -o 'Avg rtt: [0-9.]*ms' | awk '{print $3}' | sed 's/ms//' | head -1", port, domain)
+ local udp_res = luci.sys.exec(udp_cmd)
+ if udp_res and udp_res ~= "" then
+ local ping_num = tonumber(udp_res)
+ if ping_num then e.ping = math.floor(ping_num) end
+ end
+ end
+ end
- if not e.ping then
- e.ping = tonumber(luci.sys.exec(string.format(
- "ping -c 1 -W 1 %s 2>/dev/null | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}'",
- domain
- )))
- end
+ -- 4. 清理防火墙规则
+ if iret then
+ if use_nft then
+ luci.sys.call("nft delete element inet ss_spec ss_spec_wan_ac { " .. domain .. " } 2>/dev/null")
+ else
+ luci.sys.call("ipset del ss_spec_wan_ac " .. domain .. " 2>/dev/null")
+ end
+ end
- if not e.ping then
- local ping_result = tonumber(luci.sys.exec(string.format(
- "nping --udp -c 1 -p %d %s 2>/dev/null | grep -o 'Avg rtt: [0-9.]*ms' | awk '{print $3}' | sed 's/ms//' | head -1",
- port, domain
- )))
- local ping_num = tonumber(ping_result)
- if ping_num then
- e.ping = math.floor(ping_num)
- end
- end
- end
-
- if iret then
- if use_nft then
- luci.sys.call("nft delete element inet ss_spec ss_spec_wan_ac { " .. domain .. " } 2>/dev/null")
- else
- luci.sys.call("ipset del ss_spec_wan_ac " .. domain .. " 2>/dev/null")
- end
- end
-
- luci.http.prepare_content("application/json")
- luci.http.write_json(e)
+ luci.http.prepare_content("application/json")
+ luci.http.write_json(e)
end
function check_status()
@@ -246,15 +347,109 @@ function act_reset()
end
function act_restart()
- luci.sys.call("/etc/init.d/shadowsocksr restart &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr"))
end
function act_delete()
- luci.sys.call("/etc/init.d/shadowsocksr restart &")
+ uci:delete_all("shadowsocksr", "servers", function(s)
+ if s.hashkey or s.isSubscribe then
+ return true
+ else
+ return false
+ end
+ end)
+ uci:commit("shadowsocksr")
+ for file in nixio.fs.glob("/tmp/sub_md5_*") do
+ nixio.fs.remove(file)
+ end
+ luci.sys.call("/etc/init.d/shadowsocksr restart >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
end
+function act_add_node()
+ local redirect = luci.http.formvalue("redirect")
+ local used_sid = {}
+ local next_sid = 1
+
+ uci:foreach("shadowsocksr", "servers", function(s)
+ local num = s[".name"]:match("^cfg(%x%x)")
+ if num then
+ local n = tonumber(num, 16)
+ used_sid[n] = true
+ end
+ end)
+
+ local function get_next_sid()
+ while used_sid[next_sid] do
+ next_sid = next_sid + 1
+ end
+ used_sid[next_sid] = true
+ return next_sid
+ end
+
+ local sid = uci:section("shadowsocksr", "servers", nil)
+ local suffix = sid:sub(-4)
+ uci:delete("shadowsocksr", sid)
+
+ local id = get_next_sid()
+ local cfgid = string.format("cfg%02x%s", id, suffix)
+ uci:section("shadowsocksr", "servers", cfgid)
+ uci_save(uci, "shadowsocksr")
+
+ if redirect == "1" then
+ luci.http.redirect(url("servers", cfgid))
+ else
+ luci.http.write_json({ result = cfgid })
+ end
+end
+
+function act_remove()
+ local id = luci.http.formvalue("id")
+ if id then
+ uci:delete("shadowsocksr", id)
+ uci:commit("shadowsocksr")
+ end
+ luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
+end
+
+function act_save_order()
+ local ids = luci.http.formvalue("ids") or ""
+ local new_order = {}
+ for id in ids:gmatch("([^,]+)") do
+ new_order[#new_order + 1] = id
+ end
+
+ for idx, name in ipairs(new_order) do
+ luci.sys.call(string.format("uci -q reorder %s.%s=%d", "shadowsocksr", name, idx - 1))
+ end
+
+ sh_uci_commit("shadowsocksr")
+ luci.http.write_json({ status = "ok" })
+end
+
+function act_get_now_use_node()
+ local result = {}
+ local tcp_node = uci:get_first("shadowsocksr", "global", "global_server")
+ if tcp_node then
+ result["TCP"] = tcp_node
+ end
+ local udp_node = uci:get_first("shadowsocksr", "global", "udp_relay_server")
+ if udp_node then
+ result["UDP"] = udp_node
+ end
+ local netflix_node = uci:get_first("shadowsocksr", "global", "netflix_server")
+ if netflix_node then
+ result["netflix"] = netflix_node
+ end
+ local socks5_node = uci:get_first("shadowsocksr", "socks5_proxy", "server")
+ if socks5_node then
+ result["socks5"] = socks5_node
+ end
+
+ luci.http.prepare_content("application/json")
+ luci.http.write_json(result)
+end
+
function get_log()
luci.http.write(luci.sys.exec("[ -f '/var/log/ssrplus.log' ] && cat /var/log/ssrplus.log"))
end
diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua
index 59467698..4c3c716d 100644
--- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua
+++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua
@@ -1,4 +1,5 @@
local m, s, o
+local cbi = require "luci.cbi"
local uci = require "luci.model.uci".cursor()
-- 获取 LAN IP 地址
@@ -275,33 +276,33 @@ o.rmempty = false
o = s:option(ListValue, "server", translate("Server"))
o:value("same", translate("Same as Global Server"))
for _, key in pairs(key_table) do
- o:value(key, server_table[key])
+ o:value(key, server_table[key])
end
o.default = "same"
o.rmempty = false
-- Dynamic value handling based on enabled/disabled state
o.cfgvalue = function(self, section)
- local enabled = m:get(section, "enabled")
- if enabled == "0" then
- return m:get(section, "old_server")
- end
- return Value.cfgvalue(self, section)-- Default to `same` when enabled
+ local enabled = m:get(section, "enabled")
+ if enabled == "0" then
+ return m:get(section, "old_server")
+ end
+ return Value.cfgvalue(self, section)-- Default to `same` when enabled
end
o.write = function(self, section, value)
- local enabled = m:get(section, "enabled")
- if enabled == "0" then
- local old_server = Value.cfgvalue(self, section)
- if old_server ~= "nil" then
- m:set(section, "old_server", old_server)
- end
- m:set(section, "server", "nil")
- else
- m:del(section, "old_server")
- -- Write the value normally when enabled
- Value.write(self, section, value)
- end
+ local enabled = m:get(section, "enabled")
+ if enabled == "0" then
+ local old_server = Value.cfgvalue(self, section)
+ if old_server ~= "nil" then
+ m:set(section, "old_server", old_server)
+ end
+ m:set(section, "server", "nil")
+ else
+ m:del(section, "old_server")
+ -- Write the value normally when enabled
+ Value.write(self, section, value)
+ end
end
-- Socks Auth
@@ -312,10 +313,10 @@ o:value("noauth", "NOAUTH")
o:value("password", "PASSWORD")
o.rmempty = true
for key, server_type in pairs(type_table) do
- if server_type == "v2ray" then
- -- 如果服务器类型是 v2ray,则设置依赖项显示
- o:depends("server", key)
- end
+ if server_type == "v2ray" then
+ -- 如果服务器类型是 v2ray,则设置依赖项显示
+ o:depends("server", key)
+ end
end
o:depends({server = "same", disable = true})
@@ -335,10 +336,10 @@ o = s:option(Flag, "socks5_mixed", translate("Enabled Mixed"), translate("Mixed
o.default = "1"
o.rmempty = false
for key, server_type in pairs(type_table) do
- if server_type == "v2ray" then
- -- 如果服务器类型是 v2ray,则设置依赖项显示
- o:depends("server", key)
- end
+ if server_type == "v2ray" then
+ -- 如果服务器类型是 v2ray,则设置依赖项显示
+ o:depends("server", key)
+ end
end
o:depends({server = "same", disable = true})
end
@@ -367,17 +368,15 @@ if is_finded("xray") then
o:depends("fragment", true)
o = s:option(Value, "fragment_length", translate("Fragment Length"), translate("Fragmented packet length (byte)"))
+ o.datatype = "or(uinteger,portrange)"
o.default = "100-200"
o:depends("fragment", true)
o = s:option(Value, "fragment_interval", translate("Fragment Interval"), translate("Fragmentation interval (ms)"))
+ o.datatype = "or(uinteger,portrange)"
o.default = "10-20"
o:depends("fragment", true)
- o = s:option(Value, "fragment_maxsplit", translate("Max Split"), translate("Limit the maximum number of splits."))
- o.default = "100-200"
- o:depends("fragment", true)
-
o = s:option(Flag, "noise", translate("Noise"), translate("UDP noise, Under some circumstances it can bypass some UDP based protocol restrictions."))
o.default = 0
@@ -427,13 +426,8 @@ if is_finded("xray") then
o = s:option(Value, "delay", translate("Delay (ms)"))
o.datatype = "or(uinteger,portrange)"
o.rmempty = false
-
- o = s:option(Value, "applyto", translate("IP Type"))
- o.default = "IP"
- o:value("IP", "ALL")
- o:value("IPV4", "IPv4")
- o:value("IPV6", "IPv6")
- o.rmempty = false
+
+ s:append(cbi.Template("shadowsocksr/optimize_cbi_ui"))
end
return m
diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua
index 9e1a7a11..d1b575cd 100644
--- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua
+++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua
@@ -12,6 +12,8 @@ local m, s, o
local sid = arg[1]
local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid")
+local b64decode = nixio.bin.b64decode
+local b64encode = nixio.bin.b64encode
local xray_version = nil
local xray_version_val = 0
@@ -24,11 +26,59 @@ local function is_installed(e)
return luci.model.ipkg.installed(e)
end
+local function is_js_luci()
+ return luci.sys.call('[ -f "/www/luci-static/resources/uci.js" ]') == 0
+end
+
+-- trim
+local function trim(text)
+ if not text or text == "" then
+ return ""
+ end
+ return (text:gsub("^%s*(.-)%s*$", "%1"))
+end
+
+-- base64
+local function base64Decode(text)
+ local raw = text
+ if not text or text == "" then
+ return ''
+ end
+ text = text:gsub("%z", "")
+ text = text:gsub("_", "/")
+ text = text:gsub("-", "+")
+ local mod4 = #text % 4
+ text = text .. string.sub('====', mod4 + 1)
+ local result = b64decode(text)
+ if result then
+ return result:gsub("%z", "")
+ else
+ return raw
+ end
+end
+
+local function base64Encode(text)
+ if not text or text == "" then
+ return ''
+ end
+ local result = b64encode(text)
+ if result then
+ result = result:gsub("%z", "")
+ result = result:gsub("/", "_")
+ result = result:gsub("+", "-")
+ result = result:gsub("=", "")
+ return result
+ else
+ return text
+ end
+end
+
-- 获取 Xray 版本号
if is_finded("xray") then
local version = luci.sys.exec("xray version 2>&1")
if version and version ~= "" then
xray_version = version:match("Xray%s+([%d%.]+)")
+ -- xray_version = version:match("([0-9]+%.[0-9]+%.[0-9]+)")
end
end
@@ -44,6 +94,17 @@ if xray_version and xray_version ~= "" then
xray_version_val = major * 10000 + minor * 100 + patch
end
+local function url(...)
+ local url = string.format("admin/services/%s", "shadowsocksr")
+ local args = { ... }
+ for i, v in ipairs(args) do
+ if v and v ~= "" then
+ url = url .. "/" .. v
+ end
+ end
+ return require "luci.dispatcher".build_url(url)
+end
+
-- 默认的保存并应用行为
local function apply_redirect(m)
local tmp_uci_file = "/etc/config/" .. "shadowsocksr" .. "_redirect"
@@ -64,7 +125,7 @@ local function apply_redirect(m)
m.on_after_save = function(self)
local redirect = self.redirect
if redirect and redirect ~= "" then
- uci:set("shadowsocksr" .. "_redirect", "@redirect[0]", "url", redirect)
+ m.uci:set("shadowsocksr" .. "_redirect", "@redirect[0]", "url", redirect)
end
end
else
@@ -72,18 +133,24 @@ local function apply_redirect(m)
end
end
+local function set_apply_on_parse(map)
+ if not map then return end
+ if is_js_luci() then
+ apply_redirect(map)
+ local old = map.on_after_save
+ map.on_after_save = function(self)
+ if old then old(self) end
+ map:set("@global[0]", "timestamp", os.time())
+ end
+ end
+end
+
local has_xray = is_finded("xray")
local has_hysteria2 = is_finded("hysteria")
--- 读取当前存储的 xray_hy2_type
-local xray_hy2_type = uci:get_first("shadowsocksr", "server_subscribe", "xray_hy2_type")
-
local has_ss_rust = is_finded("sslocal") or is_finded("ssserver")
local has_ss_libev = is_finded("ss-redir") or is_finded("ss-local")
--- 读取当前存储的 ss_type
-local ss_type = uci:get_first("shadowsocksr", "server_subscribe", "ss_type")
-
local server_table = {}
local encrypt_methods = {
-- ssr
@@ -188,13 +255,13 @@ local tls_flows = {
}
m = Map("shadowsocksr", translate("Edit ShadowSocksR Server"))
-m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers")
-if m.uci:get("shadowsocksr", sid) ~= "servers" then
+m.redirect = url("servers")
+if not sid or m.uci:get("shadowsocksr", sid) ~= "servers" then
luci.http.redirect(m.redirect)
return
end
-- 保存&应用成功后跳转到节点列表
-apply_redirect(m)
+set_apply_on_parse(m)
-- [[ Servers Setting ]]--
s = m:section(NamedSection, sid, "servers")
@@ -207,40 +274,27 @@ o.template = "shadowsocksr/ssrurl"
o.value = sid
-- 新增一个选择框,用于选择 Xray 或 Hysteria2 核心
-o = s:option(ListValue, "xray_hy2_type", string.format("%s", translatef("%s Node Use Type", "Hysteria2")))
+o = s:option(ListValue, "_xray_hy2_type", string.format("%s", translatef("%s Node Use Type", "Hysteria2")))
o.description = translate("The configured type also applies to the core specified when manually importing nodes.")
-- 设置默认 Xray 或 Hysteria2 核心
-- 动态添加选项
if has_xray then
- o:value("xray", translate("Xray"))
+ o:value("v2ray", translate("Xray (Hysteria2)"))
end
if has_hysteria2 then
o:value("hysteria2", translate("Hysteria2"))
end
--- 设置默认值
-if xray_hy2_type == "xray" then
- o.default = "xray"
-elseif xray_hy2_type == "hysteria2" then
- o.default = "hysteria2"
+-- 读取全局 xray_hy2_type
+o.cfgvalue = function(self, section)
+ return self.map.uci:get("shadowsocksr", "@server_subscribe[0]", "xray_hy2_type") or "hysteria2"
end
+o.rmempty = false
o.write = function(self, section, value)
- -- 更新 Hysteria 节点的 xray_hy2_type
- uci:foreach("shadowsocksr", "servers", function(s)
- local node_type = uci:get("shadowsocksr", s[".name"], "type") -- 获取节点类型
- if node_type == "hysteria2" then -- 仅修改 Hysteria 节点
- local old_value = uci:get("shadowsocksr", s[".name"], "xray_hy2_type")
- if old_value ~= value then
- uci:set("shadowsocksr", s[".name"], "xray_hy2_type", value)
- end
- end
- end)
-- 更新 server_subscribe 的 xray_hy2_type
- local old_value = uci:get("shadowsocksr", "server_subscribe", "xray_hy2_type")
+ local old_value = self.map.uci:get("shadowsocksr", "@server_subscribe[0]", "xray_hy2_type")
if old_value ~= value then
- uci:set("shadowsocksr", "@server_subscribe[0]", "xray_hy2_type", value)
+ self.map.uci:set("shadowsocksr", "@server_subscribe[0]", "xray_hy2_type", value)
end
- -- 更新当前 section 的 xray_hy2_type
- ListValue.write(self, section, value)
end
o = s:option(ListValue, "type", translate("Server Node Type"))
@@ -289,7 +343,7 @@ o:depends("type", "tun")
o.description = translate("Redirect traffic to this network interface")
-- 新增一个选择框,用于选择 Shadowsocks 版本
-o = s:option(ListValue, "has_ss_type", string.format("%s", translatef("%s Node Use Version", "ShadowSocks")))
+o = s:option(ListValue, "_has_ss_type", string.format("%s", translatef("%s Node Use Version", "ShadowSocks")))
o.description = translate("Selection ShadowSocks Node Use Version.")
-- 设置默认 Shadowsocks 版本
-- 动态添加选项
@@ -299,31 +353,18 @@ end
if has_ss_libev then
o:value("ss-libev", translate("ShadowSocks-libev Version"))
end
--- 设置默认值
-if ss_type == "ss-rust" then
- o.default = "ss-rust"
-elseif ss_type == "ss-libev" then
- o.default = "ss-libev"
+-- 读取全局 ss_type
+o.cfgvalue = function(self, section)
+ return self.map.uci:get("shadowsocksr", "@server_subscribe[0]", "ss_type") or "ss-rust"
end
o:depends("type", "ss")
+o.rmempty = false
o.write = function(self, section, value)
- -- 更新 Shadowsocks 节点的 has_ss_type
- uci:foreach("shadowsocksr", "servers", function(s)
- local node_type = uci:get("shadowsocksr", s[".name"], "type") -- 获取节点类型
- if node_type == "ss" then -- 仅修改 Shadowsocks 节点
- local old_value = uci:get("shadowsocksr", s[".name"], "has_ss_type")
- if old_value ~= value then
- uci:set("shadowsocksr", s[".name"], "has_ss_type", value)
- end
- end
- end)
-- 更新 server_subscribe 的 ss_type
- local old_value = uci:get("shadowsocksr", "server_subscribe", "ss_type")
+ local old_value = self.map.uci:get("shadowsocksr", "@server_subscribe[0]", "ss_type")
if old_value ~= value then
- uci:set("shadowsocksr", "@server_subscribe[0]", "ss_type", value)
+ self.map.uci:set("shadowsocksr", "@server_subscribe[0]", "ss_type", value)
end
- -- 更新当前 section 的 has_ss_type
- ListValue.write(self, section, value)
end
o = s:option(ListValue, "v2ray_protocol", translate("V2Ray/XRay protocol"))
@@ -851,6 +892,11 @@ o = s:option(Value, "ws_path", translate("WebSocket Path"))
o:depends("transport", "ws")
o.rmempty = true
+-- WS间隔
+o = s:option(Value, "ws_heartbeatPeriod", translate("HeartbeatPeriod(second)"))
+o.datatype = "integer"
+o:depends("transport", "ws")
+
if is_finded("v2ray") then
-- WS前置数据
o = s:option(Value, "ws_ed", translate("Max Early Data"))
@@ -910,39 +956,47 @@ o:depends("transport", "xhttp")
o = s:option(TextValue, "xhttp_extra", " ")
o.description = translate(
- "" .. translate("Configure XHTTP Extra Settings (JSON format), see:") .. "" ..
- " " ..
- "" .. translate("Click to the page") .. "")
+ "" .. translate("Configure XHTTP Extra Settings (JSON format), see:") .. "" ..
+ " " ..
+ "" .. translate("Click to the page") .. "")
o:depends("enable_xhttp_extra", true)
-o.rmempty = true
+--o.rmempty = true
o.rows = 10
o.wrap = "off"
-o.custom_write = function(self, section, value)
- m:set(section, "xhttp_extra", value)
- local success, data = pcall(luci.jsonc.parse, value)
- if success and data then
- local address = (data.extra and data.extra.downloadSettings and data.extra.downloadSettings.address)
- or (data.downloadSettings and data.downloadSettings.address)
- if address and address ~= "" then
- m:set(section, "download_address", address)
- else
- m:del(section, "download_address")
- end
- else
+o.cfgvalue = function(self, section, value)
+ local raw = m:get(section, "xhttp_extra")
+ if raw then
+ return base64Decode(raw)
+ end
+end
+o.write = function(self, section, value)
+ m:set(section, "xhttp_extra", base64Encode(value) or "")
+ local success, data = pcall(luci.jsonc.parse, value)
+ if success and data then
+ local address = (data.extra and data.extra.downloadSettings and data.extra.downloadSettings.address)
+ or (data.downloadSettings and data.downloadSettings.address)
+ if address and address ~= "" then
+ address = address:gsub("^%[", ""):gsub("%]$", "")
+ m:set(section, "download_address", address)
+ else
+ m:del(section, "download_address")
+ end
+ else
m:del(section, "download_address")
- end
+ end
end
o.validate = function(self, value)
- value = value:gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n")
- if value:sub(-1) == "\n" then
- value = value:sub(1, -2)
- end
- local success, data = pcall(luci.jsonc.parse, value)
- if not success or not data then
- return nil, translate("Invalid JSON format")
- end
-
- return value
+ value = trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n")
+ local ok, data = pcall(luci.jsonc.parse, value)
+ if ok and data then
+ return value
+ else
+ return nil, "XHTTP Extra " .. translate("Must be JSON text!")
+ end
+end
+o.remove = function(self, section, value)
+ m:del(section, "xhttp_extra")
+ m:del(section, "download_address")
end
-- [[ H2部分 ]]--
@@ -1097,7 +1151,12 @@ o.rmempty = true
-- [[ WireGuard 部分 ]]--
o = s:option(Flag, "kernelmode", translate("Enabled Kernel virtual NIC TUN(optional)"))
-o.description = translate("Virtual NIC TUN of Linux kernel can be used only when system supports and have root permission. If used, IPv6 routing table 1023 is occupied.")
+o.description = translate(
+ "" ..
+ "- " .. translate("Linux kernel TUN virtual NIC requires system support and root privileges.") .. "
" ..
+ "- " .. translate("When enabled, it occupies IPv6 routing table 1023.") .. "
" ..
+ "
"
+)
o:depends({type = "v2ray", v2ray_protocol = "wireguard"})
o.default = "0"
o.rmempty = true
@@ -1108,7 +1167,7 @@ o:depends({type = "v2ray", v2ray_protocol = "wireguard"})
o.rmempty = true
o = s:option(DynamicList, "reserved", translate("Reserved bytes(optional)"))
-o.description = translate("Wireguard reserved bytes.")
+o.description = translate("Decimal numbers separated by \",\" or Base64-encoded strings.")
o:depends({type = "v2ray", v2ray_protocol = "wireguard"})
o.rmempty = true
@@ -1133,6 +1192,48 @@ o:depends({type = "v2ray", v2ray_protocol = "wireguard"})
o.default = "0.0.0.0/0"
o.rmempty = true
+-- [[ User-Agent部分 ]]--
+o = s:option(Value, "user_agent", translate("User-Agent"))
+o:depends("tcp_guise", "http")
+o:depends("transport", "ws")
+o:depends("transport", "httpupgrade")
+o:depends("transport", "xhttp")
+o:depends("transport", "grpc")
+
+--[[ FinalMask部分 ]]--
+o = s:option(Flag, "enable_finalmask", translate("FinalMask"))
+o.rmempty = true
+o.default = "0"
+o:depends({type = "v2ray", v2ray_protocol = "vless"})
+o:depends({type = "v2ray", v2ray_protocol = "vmess"})
+o:depends({type = "v2ray", v2ray_protocol = "trojan"})
+o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
+o:depends({type = "v2ray", v2ray_protocol = "wireguard"})
+o:depends({type = "v2ray", v2ray_protocol = "hysteria2"})
+
+o = s:option(TextValue, "finalmask", " ")
+o.description = translate("An FinalMaskObject in JSON format, used for sharing.")
+o:depends("enable_finalmask", true)
+o.rows = 10
+o.wrap = "off"
+o.custom_cfgvalue = function(self, section, value)
+ local raw = m:get(section, "finalmask")
+ if raw then
+ return base64Decode(raw)
+ end
+end
+o.custom_write = function(self, section, value)
+ m:set(section, "finalmask", base64Encode(value) or "")
+end
+o.validate = function(self, value)
+ value = trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n")
+ if luci.jsonc.parse(value) then
+ return value
+ else
+ return nil, "FinalMask " .. translate("Must be JSON text!")
+ end
+end
+
-- [[ TLS ]]--
o = s:option(Flag, "tls", translate("TLS"))
o.rmempty = true
@@ -1297,6 +1398,7 @@ o:depends("type", "trojan")
o:depends("type", "tuic")
o.description = translate("If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates.")
-- Xray 支持时间判断
+-- if os.time() < os.time({year=2026,month=6,day=1}) then
if os.date("%Y.%m.%d") < "2026.06.01" then
-- Xray 支持到 26.06.01
o:depends("tls", true)
diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua
index 33ffc447..65d1a7f1 100644
--- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua
+++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua
@@ -15,24 +15,79 @@ local function is_finded(e)
return luci.sys.exec(string.format('type -t -p "%s" 2>/dev/null', e)) ~= ""
end
+local function is_js_luci()
+ return luci.sys.call('[ -f "/www/luci-static/resources/uci.js" ]') == 0
+end
+
+local function url(...)
+ local url = string.format("admin/services/%s", "shadowsocksr")
+ local args = { ... }
+ for i, v in ipairs(args) do
+ if v and v ~= "" then
+ url = url .. "/" .. v
+ end
+ end
+ return require "luci.dispatcher".build_url(url)
+end
+
+-- 默认的保存并应用行为
+local function apply_redirect(m)
+ local tmp_uci_file = "/etc/config/" .. "shadowsocksr" .. "_redirect"
+ if m.redirect and m.redirect ~= "" then
+ if nixio.fs.access(tmp_uci_file) then
+ local redirect
+ for line in io.lines(tmp_uci_file) do
+ redirect = line:match("option%s+url%s+['\"]([^'\"]+)['\"]")
+ if redirect and redirect ~= "" then break end
+ end
+ if redirect and redirect ~= "" then
+ luci.sys.call("/bin/rm -f " .. tmp_uci_file)
+ luci.http.redirect(redirect)
+ end
+ else
+ nixio.fs.writefile(tmp_uci_file, "config redirect\n")
+ end
+ m.on_after_save = function(self)
+ local redirect = self.redirect
+ if redirect and redirect ~= "" then
+ m.uci:set("shadowsocksr" .. "_redirect", "@redirect[0]", "url", redirect)
+ end
+ end
+ else
+ luci.sys.call("/bin/rm -f " .. tmp_uci_file)
+ end
+end
+
+local function set_apply_on_parse(map)
+ if not map then return end
+ if is_js_luci() then
+ apply_redirect(map)
+ local old = map.on_after_save
+ map.on_after_save = function(self)
+ if old then old(self) end
+ map:set("@global[0]", "timestamp", os.time())
+ end
+ end
+end
+
local has_xray = is_finded("xray")
local has_hysteria2 = is_finded("hysteria")
local hy2_type_list = {}
-if has_xray then
- table.insert(hy2_type_list, { id = "xray", name = translate("Xray") })
-end
if has_hysteria2 then
table.insert(hy2_type_list, { id = "hysteria2", name = translate("Hysteria2") })
end
+if has_xray then
+ table.insert(hy2_type_list, { id = "v2ray", name = translate("Xray (Hysteria2)") })
+end
-- 如果用户没有手动设置,则自动选择
if not xray_hy2_type or xray_hy2_type == "" then
if has_hysteria2 then
xray_hy2_type = "hysteria2"
elseif has_xray then
- xray_hy2_type = "xray"
+ xray_hy2_type = "v2ray"
end
end
@@ -47,6 +102,9 @@ end
if has_ss_libev then
table.insert(ss_type_list, { id = "ss-libev", name = translate("ShadowSocks-libev Version") })
end
+if has_xray then
+ table.insert(ss_type_list, { id = "v2ray", name = translate("Xray (ShadowSocks)") })
+end
-- 如果用户没有手动设置,则自动选择
if not ss_type or ss_type == "" then
@@ -54,6 +112,8 @@ if not ss_type or ss_type == "" then
ss_type = "ss-rust"
elseif has_ss_libev then
ss_type = "ss-libev"
+ elseif has_xray then
+ ss_type = "v2ray"
end
end
@@ -108,20 +168,6 @@ if #hy2_type_list > 0 then
o:value(v.id, v.name) -- 存储 "Xray" / "Hysteria2",但 UI 显示完整名称
end
o.default = xray_hy2_type -- 设置默认值
- o.write = function(self, section, value)
- -- 更新 Hysteria 节点的 xray_hy2_type
- uci:foreach("shadowsocksr", "servers", function(s)
- local node_type = uci:get("shadowsocksr", s[".name"], "type") -- 获取节点类型
- if node_type == "hysteria2" then -- 仅修改 Hysteria 节点
- local old_value = uci:get("shadowsocksr", s[".name"], "xray_hy2_type")
- if old_value ~= value then
- uci:set("shadowsocksr", s[".name"], "xray_hy2_type", value)
- end
- end
- end)
- -- 更新当前 section 的 xray_hy2_type
- ListValue.write(self, section, value)
- end
end
-- 确保 ss_type_list 不为空
@@ -132,20 +178,6 @@ if #ss_type_list > 0 then
o:value(v.id, v.name) -- 存储 "ss-libev" / "ss-rust",但 UI 显示完整名称
end
o.default = ss_type -- 设置默认值
- o.write = function(self, section, value)
- -- 更新 Shadowsocks 节点的 has_ss_type
- uci:foreach("shadowsocksr", "servers", function(s)
- local node_type = uci:get("shadowsocksr", s[".name"], "type") -- 获取节点类型
- if node_type == "ss" then -- 仅修改 Shadowsocks 节点
- local old_value = uci:get("shadowsocksr", s[".name"], "has_ss_type")
- if old_value ~= value then
- uci:set("shadowsocksr", s[".name"], "has_ss_type", value)
- end
- end
- end)
- -- 更新当前 section 的 ss_type
- ListValue.write(self, section, value)
- end
end
o = s:option(DynamicList, "subscribe_url", translate("Subscribe URL"))
@@ -190,22 +222,19 @@ o = s:option(Button, "delete", translate("Delete All Subscribe Servers"))
o.inputstyle = "reset"
o.description = string.format(translate("Server Count") .. ": %d", server_count)
o.write = function()
- uci:delete_all("shadowsocksr", "servers", function(s)
- if s.hashkey or s.isSubscribe then
- return true
- else
- return false
- end
- end)
- uci:save("shadowsocksr")
- uci:commit("shadowsocksr")
- for file in nixio.fs.glob("/tmp/sub_md5_*") do
- nixio.fs.remove(file)
- end
- luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "delete"))
- return
+ luci.http.redirect(url("delete"))
end
+o = s:option(Value, "url_test_url", translate("URL Test Address"))
+o:value("https://cp.cloudflare.com/", "Cloudflare")
+o:value("https://www.gstatic.com/generate_204", "Gstatic")
+o:value("https://www.google.com/generate_204", "Google")
+o:value("https://www.youtube.com/generate_204", "YouTube")
+o:value("https://connect.rom.miui.com/generate_204", "MIUI (CN)")
+o:value("https://connectivitycheck.platform.hicloud.com/generate_204", "HiCloud (CN)")
+o.default = o.keylist[3]
+
+
o = s:option(Value, "user_agent", translate("User-Agent"))
o.default = "v2rayN/9.99"
o:value("curl", "Curl")
@@ -218,16 +247,23 @@ s = m:section(TypedSection, "servers")
s.anonymous = true
s.addremove = true
s.template = "cbi/tblsection"
-s:append(cbi.Template("shadowsocksr" .. "/optimize_cbi_ui"))
+set_apply_on_parse(m)
s.sortable = true
-s.extedit = luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers", "%s")
-function s.create(...)
- local sid = TypedSection.create(...)
- if sid then
- luci.http.redirect(s.extedit % sid)
- return
- end
+--[[
+s.extedit = url("servers", "%s")
+function s.create(self, ...)
+ local sid = TypedSection.create(self, ...)
+ if sid then
+ local newsid = "cfg" .. sid:sub(-6)
+ -- 删除匿名
+ self.map.uci:delete(self.config, sid)
+ -- 重命名 section
+ self.map.uci:section(self.config, self.sectiontype, newsid)
+ luci.http.redirect(self.extedit % newsid)
+ return
+ end
end
+]]--
o = s:option(DummyValue, "type", translate("Type"))
function o.cfgvalue(self, section)
@@ -248,10 +284,14 @@ o = s:option(DummyValue, "server_port", translate("Socket Connected"))
o.template = "shadowsocksr/socket"
o.width = "10%"
o.render = function(self, section, scope)
- self.transport = s:cfgvalue(section).transport
+ local cfg = s:cfgvalue(section) or {}
+ self.transport = cfg.transport
+ self.type = cfg.type
+ self.v2ray_protocol = cfg.v2ray_protocol
if self.transport == 'ws' then
- self.ws_path = s:cfgvalue(section).ws_path
- self.tls = s:cfgvalue(section).tls
+ self.ws_path = cfg.ws_path
+ self.tls = cfg.tls
+ self.tls_host = cfg.tls_host
end
DummyValue.render(self, section, scope)
end
@@ -276,7 +316,8 @@ node.write = function(self, section)
uci:set("shadowsocksr", '@global[0]', 'global_server', section)
uci:save("shadowsocksr")
uci:commit("shadowsocksr")
- luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "restart"))
+ luci.sys.call("/etc/init.d/shadowsocksr restart >/dev/null 2>&1 &")
+ luci.http.redirect(url("restart"))
end
o = s:option(Flag, "switch_enable", translate("Auto Switch"))
@@ -285,6 +326,6 @@ function o.cfgvalue(...)
return Value.cfgvalue(...) or 1
end
-m:append(Template("shadowsocksr/server_list"))
+m:append(cbi.Template("shadowsocksr/server_list"))
return m
diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm
index d40da9c6..21f21326 100644
--- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm
+++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm
@@ -5,53 +5,281 @@
<%
require "luci.sys"
function is_js_luci()
- return luci.sys.call('[ -f "/www/luci-static/resources/uci.js" ]') == 0
+ return luci.sys.call('[ -f "/www/luci-static/resources/uci.js" ]') == 0
end
-%>
+
+
+
+
+
<% if is_js_luci() then -%>
<%- else %>
@@ -59,250 +287,444 @@ end
+
+
+
+
+<%:Saving the new order...%>
+
+
+
+
diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm
index 7b7b691f..74c6b1bf 100644
--- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm
+++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/socket.htm
@@ -3,4 +3,7 @@
+
+
+
<%+cbi/valuefooter%>
diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm
index dd534aaa..0f3d6e36 100644
--- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm
+++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm
@@ -116,15 +116,21 @@ function import_ssr_url(btn, urlname, sid) {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = (ssu[0] === "hy2") ? "hysteria2" : ssu[0];
document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event);
- if (params.get("protocol")) {
+ if (params.get("protocol") && params.get("protocol").trim() !== "") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.flag_transport')[0].checked = true; // 设置 flag_transport 为 true
document.getElementsByName('cbid.shadowsocksr.' + sid + '.flag_transport')[0].dispatchEvent(event); // 触发事件
document.getElementsByName('cbid.shadowsocksr.' + sid + '.transport_protocol')[0].value = params.get("protocol") || "udp";
}
- if (params.get("pinSHA256")) {
+ if (params.get("pinSHA256") && params.get("pinSHA256").trim() !== "") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.pinsha256')[0].value = params.get("pinSHA256") || "";
}
+ if (params.get("fm") && params.get("fm").trim() !== "") {
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_finalmask')[0].checked = true; // 设置 enable_finalmask 为 true
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_finalmask')[0].dispatchEvent(event); // 触发事件
+
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.finalmask')[0].value = params.get("fm") || "";
+ }
document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = url.hash ? decodeURIComponent(url.hash.slice(1)) : "";
} else {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "v2ray"
@@ -163,17 +169,17 @@ function import_ssr_url(btn, urlname, sid) {
|| (xray_hy2_type !== "hysteria2" && (params.get("pcs") || params.get("vcn")))) {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; // 设置 tls 为 true
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); // 触发事件
- if (params.get("sni")) {
+ if (params.get("sni") && params.get("protocol").trim() !== "") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = params.get("sni") || "";
}
- if (params.get("alpn")) {
+ if (params.get("alpn") && params.get("alpn").trim() !== "") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_alpn')[0].value = params.get("alpn") || "";
}
if (xray_hy2_type !== "hysteria2") {
- if (params.get("pcs")) {
+ if (params.get("pcs") && params.get("pcs").trim() !== "") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertSha')[0].value = params.get("pcs") || "";
}
- if (params.get("vcn")) {
+ if (params.get("vcn") && params.get("vcn").trim() !== "") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_CertByName')[0].value = params.get("vcn") || "";
}
}
@@ -212,7 +218,7 @@ function import_ssr_url(btn, urlname, sid) {
var params = Object.fromEntries(new URLSearchParams(query));
- if ( ! params.type) {
+ if ( ss_type !== "v2ray") {
// 普通 SS 导入逻辑
// 判断是否 SIP002 格式(即含 @)
if (url0.indexOf("@") !== -1) {
@@ -307,12 +313,12 @@ function import_ssr_url(btn, urlname, sid) {
}
// === 填充配置项 ===
- var has_ss_type = (ss_type === "ss-rust") ? "ss-rust" : "ss-libev";
+ //var has_ss_type = (ss_type === "ss-rust") ? "ss-rust" : "ss-libev";
document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = ssu[0];
document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event);
- document.getElementsByName('cbid.shadowsocksr.' + sid + '.has_ss_type')[0].value = has_ss_type;
- document.getElementsByName('cbid.shadowsocksr.' + sid + '.has_ss_type')[0].dispatchEvent(event);
+ //document.getElementsByName('cbid.shadowsocksr.' + sid + '.has_ss_type')[0].value = has_ss_type;
+ //document.getElementsByName('cbid.shadowsocksr.' + sid + '.has_ss_type')[0].dispatchEvent(event);
document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = server;
document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = port;
document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = password || "";
@@ -331,6 +337,11 @@ function import_ssr_url(btn, urlname, sid) {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_plugin')[0].checked = false;
}
+ //if (params.udp === "1") {
+ // document.getElementsByName('cbid.shadowsocksr.' + sid + '.uot')[0].checked = true; // 设置 uot 为 true
+ // document.getElementsByName('cbid.shadowsocksr.' + sid + '.uot')[0].dispatchEvent(event); // 触发事件
+ //}
+
if (params.tfo === "1") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.fast_open')[0].checked = true; // 设置 fast_open 为 true
document.getElementsByName('cbid.shadowsocksr.' + sid + '.fast_open')[0].dispatchEvent(event); // 触发事件
@@ -394,6 +405,20 @@ function import_ssr_url(btn, urlname, sid) {
);
dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.transport', event);
setElementValue('cbid.shadowsocksr.' + sid + '.encrypt_method_ss', method || params.encryption || "none");
+ if (params.udp === "1") {
+ setElementValue('cbid.shadowsocksr.' + sid + '.uot', true); // 设置 uot 为 true
+ dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.uot', event); // 触发事件
+ }
+ if (params.fm && params.fm.trim() !== "") {
+ setElementValue('cbid.shadowsocksr.' + sid + '.enable_finalmask', true); // 设置 enable_finalmask 为 true
+ setElementValue('cbid.shadowsocksr.' + sid + '.enable_finalmask', event); // 触发事件
+
+ setElementValue('cbid.shadowsocksr.' + sid + '.finalmask', params.fm || "");
+ }
+ if (params.tfo === "1") {
+ setElementValue('cbid.shadowsocksr.' + sid + '.fast_open', true); // 设置 fast_open 为 true
+ dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.fast_open', event); // 触发事件
+ }
if ([ "tls", "xtls", "reality" ].includes(params.security)) {
setElementValue('cbid.shadowsocksr.' + sid + '.' + params.security, true);
dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.' + params.security, event);
@@ -578,7 +603,12 @@ function import_ssr_url(btn, urlname, sid) {
if (params.get("ech") && params.get("ech").trim() !== "") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].checked = true; // 设置 enable_ech 为 true
document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].dispatchEvent(event); // 触发事件
- document.getElementsByName('cbid.shadowsocksr.' + sid + '.ech_config')[0].value = params.get("ech");
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.ech_config')[0].value = params.get("ech") || "";
+ }
+ if (params.get("fm") && params.get("fm").trim() !== "") {
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_finalmask')[0].checked = true; // 设置 enable_finalmask 为 true
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_finalmask')[0].dispatchEvent(event); // 触发事件
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.finalmask')[0].value = params.get("fm") || "";
}
document.getElementsByName('cbid.shadowsocksr.' + sid + '.transport')[0].value =
params.get("type") == "http" ? "h2" :
@@ -725,7 +755,15 @@ function import_ssr_url(btn, urlname, sid) {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.kcp_domain')[0].value = ssm.host || "";
document.getElementsByName('cbid.shadowsocksr.' + sid + '.seed')[0].value = ssm.path || "";
}
- if (ssm.tls == "tls") {
+ if (ssm.fm !== "" && ssm.fm !== undefined) {
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_finalmask')[0].checked = true; // 设置 enable_finalmask 为 true
+ document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_finalmask')[0].dispatchEvent(event); // 触发事件
+ var fmElem = document.getElementsByName('cbid.shadowsocksr.' + sid + '.finalmask')[0];
+ if (fmElem) {
+ fmElem.value = decodeURI(ssm.fm);
+ }
+ }
+ if (ssm.tls == "tls" || ssm.tls == "1") {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true;
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event);
if (ssm.fp !== "" && ssm.fp !== undefined) {
@@ -808,6 +846,11 @@ function import_ssr_url(btn, urlname, sid) {
setElementValue('cbid.shadowsocksr.' + sid + '.vless_encryption', params.get("encryption") || "none");
setElementValue('cbid.shadowsocksr.' + sid + '.tls_flow', params.get("flow") || "none");
dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.tls_flow', event);
+ if (params.get("fm") && params.get("fm").trim() !== "") {
+ setElementValue('cbid.shadowsocksr.' + sid + '.enable_finalmask', true); // 设置 enable_finalmask 为 true
+ dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.enable_finalmask', event); // 触发事件
+ setElementValue('cbid.shadowsocksr.' + sid + '.finalmask', params.get("fm") || "");
+ }
if ([ "tls", "xtls", "reality" ].includes(params.get("security"))) {
setElementValue('cbid.shadowsocksr.' + sid + '.' + params.get("security"), true);
dispatchEventIfExists('cbid.shadowsocksr.' + sid + '.' + params.get("security"), event);
diff --git a/luci-app-ssr-plus/po/templates/ssr-plus.pot b/luci-app-ssr-plus/po/templates/ssr-plus.pot
index 0de2e7dd..6092038f 100644
--- a/luci-app-ssr-plus/po/templates/ssr-plus.pot
+++ b/luci-app-ssr-plus/po/templates/ssr-plus.pot
@@ -1,20 +1,20 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:360
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:361
msgid ""
"\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 "
"data writes by the client. \"tlshello\" is for TLS client hello packet "
"fragmentation."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:210
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:105
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:277
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:165
msgid "%s Node Use Type"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:292
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:129
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:346
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:175
msgid "%s Node Use Version"
msgstr ""
@@ -30,7 +30,7 @@ msgstr ""
msgid "128 Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1364
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1466
msgid "16"
msgstr ""
@@ -46,7 +46,7 @@ msgstr ""
msgid "32 Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1196
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1297
msgid "360"
msgstr ""
@@ -66,7 +66,7 @@ msgstr ""
msgid "64 Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1351
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1453
msgid "8"
msgstr ""
@@ -74,13 +74,13 @@ msgstr ""
msgid "8 Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:386
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:385
msgid ""
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:913
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1211
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1238
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:959
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1312
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1339
msgid ""
msgstr ""
@@ -90,28 +90,33 @@ msgid ""
"etc."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:159
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:185
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:219
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1344
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1357
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1370
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:160
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:220
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1155
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1446
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1459
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1472
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:188
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:214
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:249
msgid "- "
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:15
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:58
msgid "Access Control"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:178
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:206
msgid "AdGuard DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:16
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:728
+msgid "Add"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:59
msgid "Advanced Settings"
msgstr ""
@@ -123,11 +128,11 @@ msgstr ""
msgid "AliYun Public DNS (223.5.5.5)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:237
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:273
msgid "Alias"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:280
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:334
msgid "Alias(optional)"
msgstr ""
@@ -143,16 +148,20 @@ msgstr ""
msgid "Allow listed only"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:171
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:203
msgid "Allow subscribe Insecure nodes By default"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:764
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:805
msgid "AlterId"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:141
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:172
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1215
+msgid "An FinalMaskObject in JSON format, used for sharing."
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:142
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:173
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:149
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:170
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:201
@@ -160,12 +169,12 @@ msgstr ""
msgid "Anti-pollution DNS Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:124
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:205
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:125
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:206
msgid "Anti-pollution DNS Server For Shunt Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:242
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:243
msgid "Apple Domains DNS"
msgstr ""
@@ -173,24 +182,28 @@ msgstr ""
msgid "Apple Domains Data"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:237
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:238
msgid "Apple Domains Update url"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:233
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:234
msgid "Apple domains optimization"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:265
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:271
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:305
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:311
msgid "Apply"
msgstr ""
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:379
+msgid "Are you sure to delete this node?"
+msgstr ""
+
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/backup_restore.htm:133
msgid "Are you sure you want to restore the client to default settings?"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:282
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:323
msgid "Auto Switch"
msgstr ""
@@ -198,21 +211,21 @@ msgstr ""
msgid "Auto Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:70
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:130
msgid "Auto Update"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:72
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:132
msgid "Auto Update Server subscription, GFW list and CHN route"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:698
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1410
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1425
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:739
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1512
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1527
msgid "BBR"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1426
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1528
msgid "BRUTAL"
msgstr ""
@@ -232,12 +245,12 @@ msgstr ""
msgid "Baidu Public DNS (180.76.76.76)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:240
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:256
msgid "Base64 sstr failed."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1028
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1038
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1082
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1092
msgid "BitTorrent (uTP)"
msgstr ""
@@ -245,7 +258,7 @@ msgstr ""
msgid "Black Domain List"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:424
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:465
msgid "Bloom Filter"
msgstr ""
@@ -261,22 +274,22 @@ msgstr ""
msgid "CNNIC SDNS (1.2.4.8)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:699
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1411
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1429
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:740
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1513
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1531
msgid "CUBIC"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1045
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1099
msgid "Camouflage Domain"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:826
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1034
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:867
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1088
msgid "Camouflage Type"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1320
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1422
msgid "Certificate fingerprint"
msgstr ""
@@ -294,11 +307,11 @@ msgstr ""
msgid "Check Server Port"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:76
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:77
msgid "Check Try Count"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:71
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:72
msgid "Check timout(second)"
msgstr ""
@@ -315,19 +328,19 @@ msgstr ""
msgid "ChinaDNS-NG query protocol"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:225
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:226
msgid "ChinaDNS-NG shunt query protocol"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:88
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:89
msgid "Chnroute Update url"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:89
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:90
msgid "Clang.CN"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:90
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:91
msgid "Clang.CN.CIDR"
msgstr ""
@@ -335,31 +348,31 @@ msgstr ""
msgid "Clear logs"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:163
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:164
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:192
msgid "Click here to view or manage the DNS list file"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:389
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:915
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1213
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1240
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:388
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:961
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1314
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1341
msgid "Click to the page"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:147
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:148
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:176
msgid "Cloudflare DNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:135
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:216
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:136
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:217
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:160
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:246
msgid "Cloudflare DNS (1.1.1.1)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:178
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:179
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:207
msgid "Cloudflare DNSCrypt SDNS"
msgstr ""
@@ -368,15 +381,15 @@ msgstr ""
msgid "Collecting data..."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:913
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:959
msgid "Configure XHTTP Extra Settings (JSON format), see:"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1094
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1148
msgid "Congestion"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:696
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:737
msgid "Congestion control algorithm"
msgstr ""
@@ -392,7 +405,7 @@ msgstr ""
msgid "Connection Timeout"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1224
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1325
msgid ""
"Controls the policy used when performing DNS queries for ECH configuration."
msgstr ""
@@ -405,27 +418,27 @@ msgstr ""
msgid "Create Backup File"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1457
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1559
msgid "Create upload file error."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1477
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1579
msgid "Current Certificate Path"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:450
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:491
msgid "Custom"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:181
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:182
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:210
msgid ""
"Custom DNS Server (support: IP:Port or tls://IP:Port or https://IP/dns-query "
"and other format)."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:138
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:220
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:139
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:221
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:166
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:250
msgid "Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)"
@@ -435,14 +448,14 @@ msgstr ""
msgid "Custom DNS Server format as IP:PORT (default: disabled)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:149
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:150
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:178
msgid ""
"Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT "
"(tcp://8.8.8.8 or tls://dns.google:853)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:454
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:495
msgid "Custom Plugin Path"
msgstr ""
@@ -450,7 +463,7 @@ msgstr ""
msgid "Custom Ports"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:102
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:103
msgid "Customize Netflix IP Url"
msgstr ""
@@ -458,7 +471,7 @@ msgstr ""
msgid "DL Backup"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1042
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1096
msgid "DNS"
msgstr ""
@@ -466,7 +479,7 @@ msgstr ""
msgid "DNS Anti-pollution"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:105
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:106
msgid "DNS Query Mode For Shunt Mode"
msgstr ""
@@ -474,55 +487,63 @@ msgstr ""
msgid "DNSPod Public DNS (119.29.29.29)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1030
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1040
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1084
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1094
msgid "DTLS 1.2"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1261
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1273
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1287
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1170
+msgid "Decimal numbers separated by \",\" or Base64-encoded strings."
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1362
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1374
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1388
msgid "Default"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1371
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1473
msgid "Default reject rejects traffic."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:594
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:635
msgid "Default value 0 indicatesno heartbeat."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1345
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1447
msgid ""
"Default: disable. When entering a negative number, such as -1, The Mux "
"module will not be used to carry TCP traffic."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1358
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1460
msgid ""
"Default:16. When entering a negative number, such as -1, The Mux module will "
"not be used to carry UDP traffic, Use original UDP transmission method of "
"proxy protocol."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:183
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:184
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:212
msgid "Defines the upstreams logic mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:187
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:215
msgid ""
"Defines the upstreams logic mode, possible values: load_balance, parallel, "
"fastest_addr (default: load_balance)."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:427
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:426
msgid "Delay (ms)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:189
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:717
+msgid "Delete"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:221
msgid "Delete All Subscribe Servers"
msgstr ""
@@ -541,7 +562,7 @@ msgstr ""
msgid "Disable ChinaDNS-NG"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:151
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:152
msgid "Disable IPv6 In MosDNS Query Mode (Shunt Mode)"
msgstr ""
@@ -549,20 +570,20 @@ msgstr ""
msgid "Disable IPv6 in MOSDNS query mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:196
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:197
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:226
msgid "Disable IPv6 query mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:551
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:592
msgid "Disable QUIC path MTU discovery"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:740
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:781
msgid "Disable SNI"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:621
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:662
msgid "Disable TCP No_delay"
msgstr ""
@@ -578,12 +599,12 @@ msgstr ""
msgid "Do you want to restore the client to default settings?"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:229
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:230
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:259
msgid "DoT upstream (Need use wolfssl version)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:414
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:413
msgid "Domain Strategy"
msgstr ""
@@ -591,86 +612,94 @@ msgstr ""
msgid "Domestic DNS Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1070
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1124
msgid "Downlink Capacity(Default:Mbps)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:751
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:718
+msgid "Drag to reorder"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:792
msgid "Dual-stack Listening Socket"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1209
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1310
msgid "ECH Config"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1223
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1324
msgid "ECH Query Policy"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:863
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:909
msgid "Early Data Header Name"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:190
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:716
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:257
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:69
msgid "Edit ShadowSocksR Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:270
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:403
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:271
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:402
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:82
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:101
msgid "Enable"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:745
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:786
msgid "Enable 0-RTT QUIC handshake"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:370
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:411
msgid "Enable Authentication"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:62
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1493
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:63
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1595
msgid "Enable Auto Switch"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1204
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1305
msgid "Enable ECH(optional)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:527
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:568
msgid "Enable Lazy Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1231
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1332
msgid "Enable ML-DSA-65(optional)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1389
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1491
msgid ""
"Enable Multipath TCP, need to be enabled in both server and client "
"configuration."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1325
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1427
msgid "Enable Mux.Cool"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:94
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:95
msgid "Enable Netflix Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:521
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:562
msgid "Enable Obfuscation"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:430
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:471
msgid "Enable Plugin"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:490
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:531
msgid "Enable Port Hopping"
msgstr ""
@@ -678,48 +707,48 @@ msgstr ""
msgid "Enable Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:503
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:544
msgid "Enable Transport Protocol Settings"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:607
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:648
msgid "Enable V2 protocol."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:606
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:647
msgid "Enable V3 protocol."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:248
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:249
msgid "Enable adblock"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:419
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:460
msgid "Enable the SUoT protocol, requires server support."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:906
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:952
msgid "Enable this option to configure XHTTP Extra (JSON format)."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1099
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1153
msgid "Enabled Kernel virtual NIC TUN(optional)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:334
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:335
msgid "Enabled Mixed"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:616
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1483
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:657
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1585
msgid "Enabling TCP Fast Open Requires Server Support."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:398
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:405
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:648
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:659
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:790
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:439
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:446
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:689
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:700
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:831
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:118
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:125
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:122
@@ -730,35 +759,35 @@ msgstr ""
msgid "Enter Custom Ports"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:75
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:135
msgid "Every Day"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:80
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:140
msgid "Every Friday"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:76
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:136
msgid "Every Monday"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:81
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:141
msgid "Every Saturday"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:82
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:142
msgid "Every Sunday"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:79
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:139
msgid "Every Thursday"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:77
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:137
msgid "Every Tuesday"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:78
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:138
msgid "Every Wednesday"
msgstr ""
@@ -770,33 +799,37 @@ msgstr ""
msgid "External Proxy Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1427
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1529
msgid "FORCE BRUTAL"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:156
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:188
msgid "Filter Words splited by /"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1188
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1204
+msgid "FinalMask"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1289
msgid "Finger Print"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1175
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1276
msgid "Flow"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:233
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:234
msgid ""
"For Apple domains equipped with Chinese mainland CDN, always responsive to "
"Chinese CDN IP addresses"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:387
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:386
msgid "For specific usage, see:"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:497
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:538
msgid ""
"Format as 10000:20000 or 10000-20000 Multiple groups are separated by commas "
"(,)."
@@ -806,27 +839,27 @@ msgstr ""
msgid "Forward Netflix Proxy through Main Proxy"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:357
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:358
msgid "Fragment"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:373
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:375
msgid "Fragment Interval"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:369
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
msgid "Fragment Length"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:360
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:361
msgid "Fragment Packets"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:373
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:375
msgid "Fragmentation interval (ms)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:369
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
msgid "Fragmented packet length (byte)"
msgstr ""
@@ -850,11 +883,11 @@ msgstr ""
msgid "Game Mode UDP Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:716
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:757
msgid "Garbage collection interval(second)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:722
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:763
msgid "Garbage collection lifetime(second)"
msgstr ""
@@ -866,7 +899,7 @@ msgstr ""
msgid "Global Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:266
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:267
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:152
msgid "Global SOCKS5 Proxy Server"
msgstr ""
@@ -879,25 +912,25 @@ msgstr ""
msgid "Google Connectivity"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:173
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:174
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:202
msgid "Google DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:142
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:143
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:171
msgid "Google Public DNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:125
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:206
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:126
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:207
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:150
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:236
msgid "Google Public DNS (8.8.4.4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:126
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:207
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:127
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:151
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:237
msgid "Google Public DNS (8.8.8.8)"
@@ -907,67 +940,71 @@ msgstr ""
msgid "Grant UCI access for luci-app-ssr-plus"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:969
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1023
msgid "Gun"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:988
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1042
msgid "H2 Read Idle Timeout"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:983
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1037
msgid "H2/gRPC Health Check"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:341
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:829
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:382
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:870
msgid "HTTP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:833
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:874
msgid "HTTP Host"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:838
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:879
msgid "HTTP Path"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:951
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1005
msgid "HTTP/2 Host"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:956
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1010
msgid "HTTP/2 Path"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1023
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1077
msgid "Header"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1000
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1054
msgid "Health Check Timeout"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:704
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:745
msgid "Heartbeat interval(second)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:872
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:896
+msgid "HeartbeatPeriod(second)"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:918
msgid "Httpupgrade Host"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:877
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:923
msgid "Httpupgrade Path"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:218
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:263
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:338
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:27
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:285
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:317
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:379
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:79
msgid "Hysteria2"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:545
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:586
msgid "Hysterir QUIC parameters"
msgstr ""
@@ -975,55 +1012,51 @@ msgstr ""
msgid "IP Route Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1285
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1386
msgid "IP Stack Preference"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:431
-msgid "IP Type"
-msgstr ""
-
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:242
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:243
msgid "If empty, Not change Apple domains parsing DNS (Default is empty)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1211
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1312
msgid ""
"If it is not empty, it indicates that the Client has enabled Encrypted "
"Client, see:"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:752
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:793
msgid "If this option is not set, the socket behavior is platform dependent."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1298
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1399
msgid ""
"If true, allowss insecure connection at TLS client, e.g., TLS server uses "
"unverifiable certificates."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1441
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1543
msgid "If you have a self-signed certificate,please check the box"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:954
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:1040
msgid "Import"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:182
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:327
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:475
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:508
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:539
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:633
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:727
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:869
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:945
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:198
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:353
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:516
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:553
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:587
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:692
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:799
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:951
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:1031
msgid "Import configuration information successfully."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:976
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1030
msgid "Initial Windows Size"
msgstr ""
@@ -1035,11 +1068,7 @@ msgstr ""
msgid "Interface control"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:942
-msgid "Invalid JSON format"
-msgstr ""
-
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:948
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:1034
msgid "Invalid format."
msgstr ""
@@ -1047,19 +1076,19 @@ msgstr ""
msgid "KcpTun"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1503
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1605
msgid "KcpTun Enable"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1520
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1622
msgid "KcpTun Param"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1515
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1617
msgid "KcpTun Password"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1509
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1611
msgid "KcpTun Port"
msgstr ""
@@ -1087,73 +1116,74 @@ msgstr ""
msgid "LAN IP AC"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:129
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:210
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:130
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:211
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:154
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:240
msgid "Level 3 Public DNS (209.244.0.3)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:130
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:211
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:131
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:155
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:241
msgid "Level 3 Public DNS (209.244.0.4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:131
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:132
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:213
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:156
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:242
msgid "Level 3 Public DNS (4.2.2.1)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:132
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:213
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:133
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:214
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:157
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:243
msgid "Level 3 Public DNS (4.2.2.2)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:133
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:214
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:215
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:158
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:244
msgid "Level 3 Public DNS (4.2.2.3)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:215
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:135
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:216
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:159
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:245
msgid "Level 3 Public DNS (4.2.2.4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:145
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:173
msgid "Level 3 Public DNS-1 (209.244.0.3-4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:145
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:146
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:174
msgid "Level 3 Public DNS-2 (4.2.2.1-2)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:146
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:147
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:175
msgid "Level 3 Public DNS-3 (4.2.2.3-4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:377
-msgid "Limit the maximum number of splits."
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1156
+msgid ""
+"Linux kernel TUN virtual NIC requires system support and root privileges."
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua:22
msgid "Listen only on the given interface or, if unspecified, on all"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:347
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1497
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:348
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1599
msgid "Local Port"
msgstr ""
@@ -1161,31 +1191,31 @@ msgstr ""
msgid "Local Servers"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1105
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1164
msgid "Local addresses"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:23
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:66
msgid "Log"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:84
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:85
msgid "Loukky/gfwlist-by-loukky"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:83
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:84
msgid "Loyalsoldier/v2ray-rules-dat"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1236
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1337
msgid "ML-DSA-65 Public key"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1389
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1491
msgid "MPTCP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1049
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1103
msgid "MTU"
msgstr ""
@@ -1193,47 +1223,45 @@ msgstr ""
msgid "Main Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:856
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:902
msgid "Max Early Data"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:377
-msgid "Max Split"
-msgstr ""
-
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:757
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:798
msgid "Maximum packet size the socks5 server can receive from external"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1359
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1461
msgid ""
"Min value is 1, Max value is 1024. When omitted or set to 0, Will same path "
"as TCP traffic."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1346
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1448
msgid ""
"Min value is 1, Max value is 128. When omitted or set to 0, it equals 8."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:334
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:335
msgid "Mixed as an alias of socks, default:Enabled."
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/optimize_cbi_ui.htm:10
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:714
msgid "Move down"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/optimize_cbi_ui.htm:7
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:713
msgid "Move up"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:221
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:222
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:251
msgid "Muitiple DNS server can saperate with ','"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:970
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1024
msgid "Multi"
msgstr ""
@@ -1241,11 +1269,16 @@ msgstr ""
msgid "Multi Threads Option"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1325
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:994
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1233
+msgid "Must be JSON text!"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1427
msgid "Mux"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:252
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:253
msgid "NEO DEV HOST"
msgstr ""
@@ -1253,7 +1286,7 @@ msgstr ""
msgid "NOT RUNNING"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:260
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:314
msgid "NaiveProxy"
msgstr ""
@@ -1269,7 +1302,7 @@ msgstr ""
msgid "Netflix IP Data"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:99
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:100
msgid "Netflix IP Only"
msgstr ""
@@ -1277,19 +1310,19 @@ msgstr ""
msgid "Netflix Node"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:100
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:101
msgid "Netflix and AWS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:275
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:329
msgid "Network Tunnel"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:282
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:336
msgid "Network interface to use"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:700
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:741
msgid "New Reno"
msgstr ""
@@ -1303,21 +1336,21 @@ msgstr ""
msgid "No new data!"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1473
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1575
msgid "No specify upload file."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:381
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:380
msgid "Noise"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:437
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:828
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1014
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1026
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1036
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:234
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:239
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:478
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:869
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1068
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1080
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1090
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:270
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:275
msgid "None"
msgstr ""
@@ -1340,35 +1373,35 @@ msgid ""
"compatibility issues."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1400
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1502
msgid "Number of early established connections to reduce latency."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:436
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:472
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:477
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:513
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:139
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:133
msgid "Obfs"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:479
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:520
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:146
msgid "Obfs param (optional)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1090
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1144
msgid "Obfuscate password (optional)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:538
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:579
msgid "Obfuscation Password"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:532
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:573
msgid "Obfuscation Type"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1309
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1411
msgid "Once set, connects only when the server’s chain fingerprint matches."
msgstr ""
@@ -1376,28 +1409,28 @@ msgstr ""
msgid "Only Common Ports"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:323
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:324
msgid "Only when Socks5 Auth Mode is password valid, Mandatory."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:328
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:329
msgid "Only when Socks5 Auth Mode is password valid, Not mandatory."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:143
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:172
msgid "OpenDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:209
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:129
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:210
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:153
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:239
msgid "OpenDNS (208.67.220.220)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:127
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:209
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:152
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:238
msgid "OpenDNS (208.67.222.222)"
@@ -1415,11 +1448,11 @@ msgstr ""
msgid "Oversea Mode DNS-2 (114.114.115.115)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:423
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:422
msgid "Packet"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:384
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:425
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:114
msgid "Password"
msgstr ""
@@ -1428,7 +1461,7 @@ msgstr ""
msgid "Paste sharing link here"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1120
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1179
msgid "Peer public key"
msgstr ""
@@ -1437,15 +1470,15 @@ msgstr ""
msgid "Perform reset"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1006
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1060
msgid "Permit Without Stream"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:259
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:299
msgid "Ping Latency"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1480
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1582
msgid "Please confirm the current certificate path"
msgstr ""
@@ -1453,23 +1486,23 @@ msgstr ""
msgid "Please fill in reset"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:458
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:499
msgid "Plugin Opts"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:514
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:555
msgid "Port Hopping Interval(Unit:Second)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:496
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:537
msgid "Port hopping range"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1400
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1502
msgid "Pre-connections"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1124
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1183
msgid "Pre-shared key"
msgstr ""
@@ -1477,17 +1510,17 @@ msgstr ""
msgid "Prefer firewall tools"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1115
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1174
msgid "Private key"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:462
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:503
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:132
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:128
msgid "Protocol"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:469
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:510
msgid "Protocol param (optional)"
msgstr ""
@@ -1495,44 +1528,44 @@ msgstr ""
msgid "Proxy Ports"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1162
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1263
msgid "Public key"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1019
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1073
msgid "QUIC Key"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1012
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1066
msgid "QUIC Security"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:572
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:613
msgid "QUIC initConnReceiveWindow"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:558
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:599
msgid "QUIC initStreamReceiveWindow"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:579
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:620
msgid "QUIC maxConnReceiveWindow"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:586
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:627
msgid "QUIC maxIdleTimeout(Unit:second)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:565
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:606
msgid "QUIC maxStreamReceiveWindow"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:176
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:205
msgid "Quad9 DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1157
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1258
msgid "REALITY"
msgstr ""
@@ -1544,7 +1577,7 @@ msgstr ""
msgid "RUNNING"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1078
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1132
msgid "Read Buffer Size"
msgstr ""
@@ -1552,7 +1585,7 @@ msgstr ""
msgid "Really reset all changes?"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:269
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:309
msgid "Reapply"
msgstr ""
@@ -1564,7 +1597,7 @@ msgstr ""
msgid "Records"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:289
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:343
msgid "Redirect traffic to this network interface"
msgstr ""
@@ -1587,20 +1620,20 @@ msgstr ""
msgid "Refresh..."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:87
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:147
msgid "Regular update (Hour)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:95
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:155
msgid "Regular update (Min)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1412
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1428
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1514
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1530
msgid "Reno"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1110
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1169
msgid "Reserved bytes(optional)"
msgstr ""
@@ -1609,7 +1642,7 @@ msgstr ""
msgid "Reset complete"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:258
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:259
msgid "Reset to defaults"
msgstr ""
@@ -1647,62 +1680,78 @@ msgstr ""
msgid "Running Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:262
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:278
msgid "SS URL base64 sstr format not recognized."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:13
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:56
msgid "SSR Client"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:17
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:60
msgid "SSR Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:276
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:277
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:71
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:79
msgid "Same as Global Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:160
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:729
+msgid "Save Order"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:192
msgid "Save Words splited by /"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:157
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:472
+msgid "Save failed!"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:470
+msgid "Saved current page order successfully."
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:726
+msgid "Saving the new order..."
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:158
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:186
msgid "Select DNS parse Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:293
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:130
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:347
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:176
msgid "Selection ShadowSocks Node Use Version."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1433
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1535
msgid "Self-signed Certificate"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:275
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:276
msgid "Server"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:344
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:385
msgid "Server Address"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:191
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:223
msgid "Server Count"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:246
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:300
msgid "Server Node Type"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:357
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:398
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:96
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:112
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:242
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:278
msgid "Server Port"
msgstr ""
@@ -1715,53 +1764,53 @@ msgstr ""
msgid "Server Type"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:55
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:56
msgid "Server failsafe auto swith and custom update settings"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:14
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:57
msgid "Servers Nodes"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:64
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:124
msgid "Servers subscription and manage"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1151
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1252
msgid "Session Ticket"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:166
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:167
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:195
msgid "Set Single DNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:269
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:323
msgid "Shadow-TLS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:633
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:674
msgid "Shadow-TLS ChainPoxy type"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:254
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:333
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:308
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:374
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:89
msgid "ShadowSocks"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:300
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:48
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:354
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:103
msgid "ShadowSocks-libev Version"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:297
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:636
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:45
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:351
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:677
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:100
msgid "ShadowSocks-rust Version"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:10
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:53
msgid "ShadowSocksR Plus+"
msgstr ""
@@ -1769,49 +1818,49 @@ msgstr ""
msgid "ShadowSocksR Plus+ Settings"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:644
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:685
msgid "Shadowsocks password"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:251
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:305
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:92
msgid "ShadowsocksR"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1166
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1267
msgid "Short ID"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:247
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:283
msgid "Socket Connected"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:340
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:381
msgid "Socks"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:798
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:839
msgid "Socks Version"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:309
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:310
msgid "Socks protocol auth methods, default:noauth."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:272
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:326
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:87
msgid "Socks5"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:309
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:310
msgid "Socks5 Auth Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:328
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:329
msgid "Socks5 Password"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:323
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:324
msgid "Socks5 User"
msgstr ""
@@ -1819,132 +1868,146 @@ msgstr ""
msgid "Specifically for edit dnsproxy DNS parse files."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:18
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:61
msgid "Status"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:176
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:208
msgid "Subscribe Default Auto-Switch"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:154
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:186
msgid "Subscribe Filter Words"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:158
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:190
msgid "Subscribe Save Words"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:151
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:183
msgid "Subscribe URL"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:178
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:210
msgid "Subscribe new add server default Auto-Switch on"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:173
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:205
msgid "Subscribe nodes allows insecure connection as TLS client (insecure)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:256
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:257
msgid "Support AdGuardHome and DNSMASQ format list"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:66
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:67
msgid "Switch check cycly(second)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:616
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1483
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:657
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1585
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:149
msgid "TCP Fast Open"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:357
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:358
msgid ""
"TCP fragments, which can deceive the censorship system in some cases, such "
"as bypassing SNI blacklists."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:227
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:257
msgid "TCP upstream"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1137
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1238
msgid "TLS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:611
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:652
msgid "TLS 1.3 Strict mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1259
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1360
msgid "TLS ALPN"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1314
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1416
msgid "TLS Certificate Name (CertName)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1309
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1411
msgid "TLS Chain Fingerprint (SHA256)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1251
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1352
msgid "TLS Host"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1314
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:527
+msgid "TLS handshake test, latency for reference only"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1416
msgid "TLS is used to verify the leaf certificate name."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1056
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1110
msgid "TTI"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:266
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:320
msgid "TUIC"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1271
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1372
msgid "TUIC ALPN"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:676
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:717
msgid "TUIC Server IP Address"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:683
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:724
msgid "TUIC User Password"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:669
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:710
msgid "TUIC User UUID"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:734
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:775
msgid "TUIC receive window"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:728
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:769
msgid "TUIC send window"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:174
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:203
msgid "TWNIC-101 DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1238
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:527
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:592
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:616
+msgid "Test"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:569
+msgid "Testing..."
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1339
msgid ""
"The client has not configured mldsa65Verify, but it will not perform the "
"\"additional verification\" step and can still connect normally, see:"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:211
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:106
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:278
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:166
msgid ""
"The configured type also applies to the core specified when manually "
"importing nodes."
@@ -1954,38 +2017,36 @@ msgstr ""
msgid "The content entered is incorrect!"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:593
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:634
msgid "The keep-alive period.(Unit:second)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:181
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:213
msgid "Through proxy update"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:183
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:215
msgid "Through proxy update list, Not Recommended"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:710
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:751
msgid "Timeout for establishing a connection to server(second)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:161
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:162
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:190
msgid "Tips: Dnsproxy DNS Parse List Path:"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:289
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:290
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:715
msgid "To Bottom"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:279
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:280
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:712
msgid "To Top"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:386
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:385
msgid "To send noise packets, select \"Noise\" in Xray Settings."
msgstr ""
@@ -1993,48 +2054,48 @@ msgstr ""
msgid "Total Records:"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:807
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:848
msgid "Transport"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:508
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:549
msgid "Transport Protocol"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:257
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:332
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:311
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:373
msgid "Trojan"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:407
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:232
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:406
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:268
msgid "Type"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:510
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:551
msgid "UDP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:381
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:380
msgid ""
"UDP noise, Under some circumstances it can bypass some UDP based protocol "
"restrictions."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:418
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:459
msgid "UDP over TCP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:689
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:730
msgid "UDP relay mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:229
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:258
msgid "UDP upstream"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:226
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:227
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:256
msgid "UDP/TCP upstream"
msgstr ""
@@ -2043,6 +2104,10 @@ msgstr ""
msgid "UL Restore"
msgstr ""
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:228
+msgid "URL Test Address"
+msgstr ""
+
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:82
msgid "Unable to copy SSR to clipboard."
msgstr ""
@@ -2052,38 +2117,38 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:185
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:217
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm:16
msgid "Update All Subscribe Servers"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:162
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:194
msgid "Update Subscribe List"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:74
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:134
msgid "Update cycle (Day/Week)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:164
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:196
msgid "Update subscribe url list first"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1062
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1116
msgid "Uplink Capacity(Default:Mbps)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1443
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1545
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm:3
msgid "Upload"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:119
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:120
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:144
msgid "Use ChinaDNS-NG query and cache"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:167
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:168
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:196
msgid "Use DNS List File"
msgstr ""
@@ -2096,12 +2161,12 @@ msgstr ""
msgid "Use DNS from WAN and 114DNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:107
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:108
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:132
msgid "Use DNS2SOCKS query and cache"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:110
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:111
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:135
msgid "Use DNS2SOCKS-RUST query and cache"
msgstr ""
@@ -2110,7 +2175,7 @@ msgstr ""
msgid "Use DNS2TCP query"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:116
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:117
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:141
msgid "Use DNSPROXY query and cache"
msgstr ""
@@ -2123,11 +2188,11 @@ msgstr ""
msgid "Use MOSDNS query (Not Support Oversea Mode)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:113
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:114
msgid "Use MosDNS query"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1046
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1100
msgid ""
"Use it together with the DNS disguised type. You can fill in any domain."
msgstr ""
@@ -2136,69 +2201,64 @@ msgstr ""
msgid "User cancelled."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:209
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1196
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:238
msgid "User-Agent"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:217
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:898
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:233
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:980
msgid "Userinfo format error."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:377
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:418
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:110
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:117
msgid "Username"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:484
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:525
msgid "Users Authentication"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:278
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:332
msgid "Using incorrect encryption mothod may causes service fail to start"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:248
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:302
msgid "V2Ray/XRay"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:329
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:370
msgid "V2Ray/XRay protocol"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:330
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:371
msgid "VLESS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:779
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:820
msgid "VLESS Encryption"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:331
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:372
msgid "VMess"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1027
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1037
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1081
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1091
msgid "VideoCall (SRTP)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1100
-msgid ""
-"Virtual NIC TUN of Linux kernel can be used only when system supports and "
-"have root permission. If used, IPv6 routing table 1023 is occupied."
-msgstr ""
-
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:639
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:680
msgid "Vmess Protocol"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:654
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:695
msgid "Vmess UUID"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:771
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:812
msgid "Vmess/VLESS ID (UUID)"
msgstr ""
@@ -2214,284 +2274,292 @@ msgstr ""
msgid "WAN White List IP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:844
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:885
msgid "WebSocket Host"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:850
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:891
msgid "WebSocket Path"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1029
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1039
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1083
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1093
msgid "WechatVideo"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:95
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:96
msgid "When disabled shunt mode, will same time stopped shunt service."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:197
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:198
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:227
msgid "When disabled, all AAAA requests are not resolved."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1157
+msgid "When enabled, it occupies IPv6 routing table 1023."
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:187
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:216
msgid "When two or more DNS servers are deployed, enable this function."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:160
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:161
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:189
msgid ""
"When use DNS list file, please ensure list file exists and is formatted "
"correctly."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:335
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1031
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1041
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:376
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1085
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1095
msgid "WireGuard"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1130
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1189
msgid "Wireguard allows only traffic from specific source IP."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1111
-msgid "Wireguard reserved bytes."
-msgstr ""
-
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1084
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1138
msgid "Write Buffer Size"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:905
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:951
msgid "XHTTP Extra"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:893
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:939
msgid "XHTTP Host"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:884
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:930
msgid "XHTTP Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:899
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:945
msgid "XHTTP Path"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:215
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:24
-msgid "Xray"
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:282
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:82
+msgid "Xray (Hysteria2)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:354
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:106
+msgid "Xray (ShadowSocks)"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:355
msgid "Xray Fragment Settings"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:384
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:383
msgid "Xray Noise Packets"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:251
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:252
msgid "adblock_url"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1015
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1069
msgid "aes-128-gcm"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1378
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1480
msgid "allow"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1372
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1474
msgid "allow: Allows use Mux connection."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1293
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1394
msgid "allowInsecure"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1129
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1188
msgid "allowedIPs(optional)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1194
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1295
msgid "android"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:253
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:254
msgid "anti-AD"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1016
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1070
msgid "chacha20-poly1305"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:91
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:92
msgid "china-operator-ip"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1190
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1291
msgid "chrome"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:179
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:180
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:208
msgid "cloudflare-dns.com DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1409
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1424
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1511
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1526
msgid "comment_tcpcongestion_disable"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1342
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1444
msgid "concurrency"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1406
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1421
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:666
+msgid "connect"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1508
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1523
msgid "custom_tcpcongestion"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1200
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1350
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1363
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1301
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1452
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1465
msgid "disable"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:176
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:204
msgid "dns.sb DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1195
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1296
msgid "edge"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:191
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:192
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:221
msgid "fastest_addr"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:238
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:239
msgid "felixonmars/dnsmasq-china-list"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1191
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1292
msgid "firefox"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:994
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1048
msgid "gRPC Idle Timeout"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:967
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1021
msgid "gRPC Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:961
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1015
msgid "gRPC Service Name"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:81
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:82
msgid "gfwlist Update url"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:85
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:86
msgid "gfwlist/gfwlist"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1193
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1294
msgid "ios"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:189
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:219
msgid "load_balance"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:692
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:733
msgid "lossless UDP relay using QUIC streams"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:691
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:732
msgid "native UDP characteristics"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:98
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:99
msgid "nfip_url"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:409
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1179
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:450
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1280
msgid "none"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:439
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:480
msgid "obfs-local"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:191
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:220
msgid "parallel"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1197
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1298
msgid "qq"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1198
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1299
msgid "random"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1199
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1300
msgid "randomized"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1377
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1479
msgid "reject"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1192
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1293
msgid "safari"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:626
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:667
msgid "shadow-TLS SNI"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:448
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:489
msgid "shadow-tls"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:604
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:645
msgid "shadowTLS protocol Version"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1379
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1481
msgid "skip"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1373
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1475
msgid ""
"skip: Not use Mux module to carry UDP 443 traffic, Use original UDP "
"transmission method of proxy protocol."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1170
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1271
msgid "spiderX"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:82
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:83
msgid "v2fly/domain-list-community"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:442
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:483
msgid "v2ray-plugin"
msgstr ""
@@ -2503,14 +2571,14 @@ msgstr ""
msgid "warning! Please do not reuse the port!"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:445
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:486
msgid "xray-plugin"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1355
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1457
msgid "xudpConcurrency"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1368
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1470
msgid "xudpProxyUDP443"
msgstr ""
diff --git a/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po b/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
index a38e7a5c..081c4030 100644
--- a/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
+++ b/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
@@ -1,7 +1,7 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:360
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:361
msgid ""
"\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 "
"data writes by the client. \"tlshello\" is for TLS client hello packet "
@@ -10,13 +10,13 @@ msgstr ""
"\"1-3\" 是 TCP 的流切片,应用于客户端第 1 至第 3 次写数据。\"tlshello\" 是 "
"TLS 握手包切片。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:210
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:105
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:277
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:165
msgid "%s Node Use Type"
msgstr "%s 节点使用类型"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:292
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:129
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:346
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:175
msgid "%s Node Use Version"
msgstr "%s 节点使用版本"
@@ -32,7 +32,7 @@ msgstr "单线程"
msgid "128 Threads"
msgstr "128 线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1364
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1466
msgid "16"
msgstr ""
@@ -48,7 +48,7 @@ msgstr "2 线程"
msgid "32 Threads"
msgstr "32 线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1196
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1297
msgid "360"
msgstr ""
@@ -68,7 +68,7 @@ msgstr "4 线程"
msgid "64 Threads"
msgstr "64 线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1351
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1453
msgid "8"
msgstr ""
@@ -76,13 +76,13 @@ msgstr ""
msgid "8 Threads"
msgstr "8 线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:386
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:385
msgid ""
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:913
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1211
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1238
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:959
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1312
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1339
msgid ""
msgstr ""
@@ -94,28 +94,33 @@ msgstr ""
"
支持 SS/SSR/V2RAY/XRAY/TROJAN/TUIC/HYSTERIA2/NAIVEPROXY/SOCKS5/TUN 等协"
"议。
"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:159
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:185
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:219
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1344
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1357
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1370
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:160
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:220
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1155
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1446
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1459
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1472
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:188
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:214
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:249
msgid "- "
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:15
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:58
msgid "Access Control"
msgstr "访问控制"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:178
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:206
msgid "AdGuard DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:16
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:728
+msgid "Add"
+msgstr "添加"
+
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:59
msgid "Advanced Settings"
msgstr "高级设置"
@@ -127,11 +132,11 @@ msgstr "【广告屏蔽】数据库"
msgid "AliYun Public DNS (223.5.5.5)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:237
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:273
msgid "Alias"
msgstr "别名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:280
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:334
msgid "Alias(optional)"
msgstr "别名(可选)"
@@ -147,16 +152,20 @@ msgstr "除列表外主机皆允许"
msgid "Allow listed only"
msgstr "仅允许列表内主机"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:171
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:203
msgid "Allow subscribe Insecure nodes By default"
msgstr "订阅节点允许不验证 TLS 证书"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:764
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:805
msgid "AlterId"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:141
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:172
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1215
+msgid "An FinalMaskObject in JSON format, used for sharing."
+msgstr "JSON 格式的 FinalMaskObject,用来实现分享。"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:142
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:173
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:149
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:170
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:201
@@ -164,12 +173,12 @@ msgstr ""
msgid "Anti-pollution DNS Server"
msgstr "访问国外域名 DNS 服务器"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:124
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:205
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:125
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:206
msgid "Anti-pollution DNS Server For Shunt Mode"
msgstr "分流模式下的访问国外域名 DNS 服务器"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:242
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:243
msgid "Apple Domains DNS"
msgstr "Apple 域名 DNS"
@@ -177,24 +186,28 @@ msgstr "Apple 域名 DNS"
msgid "Apple Domains Data"
msgstr "【Apple 域名】数据库"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:237
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:238
msgid "Apple Domains Update url"
msgstr "Apple 域名更新 URL"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:233
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:234
msgid "Apple domains optimization"
msgstr "Apple 域名解析优化"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:265
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:271
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:305
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:311
msgid "Apply"
msgstr "应用"
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:379
+msgid "Are you sure to delete this node?"
+msgstr "是否真的要删除该节点?"
+
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/backup_restore.htm:133
msgid "Are you sure you want to restore the client to default settings?"
msgstr "是否真的要恢复客户端默认配置?"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:282
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:323
msgid "Auto Switch"
msgstr "自动切换"
@@ -202,21 +215,21 @@ msgstr "自动切换"
msgid "Auto Threads"
msgstr "自动(CPU 线程数)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:70
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:130
msgid "Auto Update"
msgstr "自动更新"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:72
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:132
msgid "Auto Update Server subscription, GFW list and CHN route"
msgstr "自动更新服务器订阅、GFW 列表和中国大陆 IP 段"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:698
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1410
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1425
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:739
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1512
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1527
msgid "BBR"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1426
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1528
msgid "BRUTAL"
msgstr ""
@@ -236,12 +249,12 @@ msgstr "【百度】连通性检查"
msgid "Baidu Public DNS (180.76.76.76)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:240
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:256
msgid "Base64 sstr failed."
msgstr "Base64 解码失败。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1028
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1038
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1082
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1092
msgid "BitTorrent (uTP)"
msgstr "BT 下载(uTP)"
@@ -249,7 +262,7 @@ msgstr "BT 下载(uTP)"
msgid "Black Domain List"
msgstr "强制走代理的域名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:424
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:465
msgid "Bloom Filter"
msgstr "布隆过滤器"
@@ -265,22 +278,22 @@ msgstr "关闭窗口"
msgid "CNNIC SDNS (1.2.4.8)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:699
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1411
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1429
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:740
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1513
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1531
msgid "CUBIC"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1045
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1099
msgid "Camouflage Domain"
msgstr "伪装域名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:826
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1034
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:867
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1088
msgid "Camouflage Type"
msgstr "伪装类型"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1320
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1422
msgid "Certificate fingerprint"
msgstr "证书指纹"
@@ -298,11 +311,11 @@ msgstr "检查服务器"
msgid "Check Server Port"
msgstr "【服务器端口】检查"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:76
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:77
msgid "Check Try Count"
msgstr "切换检查重试次数"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:71
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:72
msgid "Check timout(second)"
msgstr "切换检查超时时间(秒)"
@@ -319,19 +332,19 @@ msgstr "【中国大陆 IP 段】数据库"
msgid "ChinaDNS-NG query protocol"
msgstr "ChinaDNS-NG 查询协议"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:225
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:226
msgid "ChinaDNS-NG shunt query protocol"
msgstr "ChinaDNS-NG 分流查询协议"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:88
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:89
msgid "Chnroute Update url"
msgstr "中国大陆 IP 段更新 URL"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:89
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:90
msgid "Clang.CN"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:90
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:91
msgid "Clang.CN.CIDR"
msgstr ""
@@ -339,31 +352,31 @@ msgstr ""
msgid "Clear logs"
msgstr "清空日志"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:163
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:164
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:192
msgid "Click here to view or manage the DNS list file"
msgstr "点击此处查看或管理 DNS 列表文件"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:389
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:915
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1213
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1240
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:388
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:961
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1314
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1341
msgid "Click to the page"
msgstr "点击前往"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:147
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:148
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:176
msgid "Cloudflare DNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:135
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:216
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:136
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:217
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:160
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:246
msgid "Cloudflare DNS (1.1.1.1)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:178
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:179
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:207
msgid "Cloudflare DNSCrypt SDNS"
msgstr ""
@@ -372,15 +385,15 @@ msgstr ""
msgid "Collecting data..."
msgstr "正在收集数据中..."
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:913
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:959
msgid "Configure XHTTP Extra Settings (JSON format), see:"
msgstr "配置 XHTTP 额外设置(JSON 格式),具体请参见:"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1094
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1148
msgid "Congestion"
msgstr "拥塞控制"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:696
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:737
msgid "Congestion control algorithm"
msgstr "拥塞控制算法"
@@ -396,7 +409,7 @@ msgstr "连接正常"
msgid "Connection Timeout"
msgstr "连接超时"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1224
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1325
msgid ""
"Controls the policy used when performing DNS queries for ECH configuration."
msgstr "控制使用 DNS 查询 ECH 配置时的策略。"
@@ -409,19 +422,19 @@ msgstr "成功复制 SSR 网址到剪贴板。"
msgid "Create Backup File"
msgstr "创建备份文件"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1457
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1559
msgid "Create upload file error."
msgstr "创建上传文件错误。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1477
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1579
msgid "Current Certificate Path"
msgstr "当前证书路径"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:450
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:491
msgid "Custom"
msgstr "自定义"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:181
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:182
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:210
msgid ""
"Custom DNS Server (support: IP:Port or tls://IP:Port or https://IP/dns-query "
@@ -430,8 +443,8 @@ msgstr ""
"自定义 DNS 服务器(支持格式:IP:端口、tls://IP:端口、https://IP/dns-query 及"
"其他格式)。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:138
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:220
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:139
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:221
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:166
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:250
msgid "Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)"
@@ -441,7 +454,7 @@ msgstr "格式为 IP:Port(默认:8.8.4.4:53)"
msgid "Custom DNS Server format as IP:PORT (default: disabled)"
msgstr "格式为 IP:PORT(默认:禁用)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:149
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:150
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:178
msgid ""
"Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT "
@@ -449,7 +462,7 @@ msgid ""
msgstr ""
"格式为tcp://IP:Port或tls://域名:Port (tcp://8.8.8.8或tls://dns.google:853)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:454
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:495
msgid "Custom Plugin Path"
msgstr "自定义插件路径"
@@ -457,7 +470,7 @@ msgstr "自定义插件路径"
msgid "Custom Ports"
msgstr "自定义端口"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:102
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:103
msgid "Customize Netflix IP Url"
msgstr ""
"自定义 Netflix IP 段更新 URL(默认项目地址:https://github.com/QiuSimons/"
@@ -467,7 +480,7 @@ msgstr ""
msgid "DL Backup"
msgstr "下载备份"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1042
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1096
msgid "DNS"
msgstr ""
@@ -475,7 +488,7 @@ msgstr ""
msgid "DNS Anti-pollution"
msgstr "DNS 防污染服务"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:105
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:106
msgid "DNS Query Mode For Shunt Mode"
msgstr "分流模式下的 DNS 查询模式"
@@ -483,32 +496,36 @@ msgstr "分流模式下的 DNS 查询模式"
msgid "DNSPod Public DNS (119.29.29.29)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1030
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1040
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1084
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1094
msgid "DTLS 1.2"
msgstr "DTLS 1.2 数据包"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1261
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1273
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1287
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1170
+msgid "Decimal numbers separated by \",\" or Base64-encoded strings."
+msgstr "用“,”隔开的十进制数字或 Base64 编码字符串。"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1362
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1374
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1388
msgid "Default"
msgstr "默认"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1371
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1473
msgid "Default reject rejects traffic."
msgstr "默认 reject 拒绝流量。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:594
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:635
msgid "Default value 0 indicatesno heartbeat."
msgstr "默认为 0 表示无心跳。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1345
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1447
msgid ""
"Default: disable. When entering a negative number, such as -1, The Mux "
"module will not be used to carry TCP traffic."
msgstr "默认:禁用。填负数时,如 -1,不使用 Mux 模块承载 TCP 流量。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1358
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1460
msgid ""
"Default:16. When entering a negative number, such as -1, The Mux module will "
"not be used to carry UDP traffic, Use original UDP transmission method of "
@@ -517,12 +534,12 @@ msgstr ""
"默认值:16。填负数时,如 -1,不使用 Mux 模块承载 UDP 流量。将使用代理协议原本"
"的 UDP 传输方式。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:183
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:184
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:212
msgid "Defines the upstreams logic mode"
msgstr "定义上游逻辑模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:187
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:215
msgid ""
"Defines the upstreams logic mode, possible values: load_balance, parallel, "
@@ -531,11 +548,15 @@ msgstr ""
"定义上游逻辑模式,可选择值:负载均衡、并行查询、最快响应(默认值:负载均"
"衡)。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:427
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:426
msgid "Delay (ms)"
msgstr "延迟(ms)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:189
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:717
+msgid "Delete"
+msgstr "删除"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:221
msgid "Delete All Subscribe Servers"
msgstr "删除所有订阅服务器节点"
@@ -554,7 +575,7 @@ msgstr "停用"
msgid "Disable ChinaDNS-NG"
msgstr "直通模式(禁用 ChinaDNS-NG)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:151
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:152
msgid "Disable IPv6 In MosDNS Query Mode (Shunt Mode)"
msgstr "禁止 MosDNS 返回 IPv6 记录 (分流模式)"
@@ -562,20 +583,20 @@ msgstr "禁止 MosDNS 返回 IPv6 记录 (分流模式)"
msgid "Disable IPv6 in MOSDNS query mode"
msgstr "禁止 MOSDNS 返回 IPv6 记录"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:196
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:197
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:226
msgid "Disable IPv6 query mode"
msgstr "禁止返回 IPv6 记录"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:551
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:592
msgid "Disable QUIC path MTU discovery"
msgstr "禁用 QUIC 启用 MTU 探测"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:740
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:781
msgid "Disable SNI"
msgstr "关闭 SNI 服务器名称指示"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:621
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:662
msgid "Disable TCP No_delay"
msgstr "禁用 TCP 无延迟"
@@ -591,12 +612,12 @@ msgstr "执行重置"
msgid "Do you want to restore the client to default settings?"
msgstr "是否要恢复客户端默认配置?"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:229
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:230
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:259
msgid "DoT upstream (Need use wolfssl version)"
msgstr "DoT 上游(需使用 wolfssl 版本)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:414
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:413
msgid "Domain Strategy"
msgstr "域名解析策略"
@@ -604,86 +625,94 @@ msgstr "域名解析策略"
msgid "Domestic DNS Server"
msgstr "国内 DNS 服务器"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1070
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1124
msgid "Downlink Capacity(Default:Mbps)"
msgstr "下行链路容量(默认:Mbps)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:751
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:718
+msgid "Drag to reorder"
+msgstr "拖动以重排"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:792
msgid "Dual-stack Listening Socket"
msgstr "双栈 Socket 监听"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1209
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1310
msgid "ECH Config"
msgstr "ECH 配置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1223
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1324
msgid "ECH Query Policy"
msgstr "ECH 查询策略"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:863
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:909
msgid "Early Data Header Name"
msgstr "前置数据标头"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:190
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:716
+msgid "Edit"
+msgstr "编辑"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:257
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:69
msgid "Edit ShadowSocksR Server"
msgstr "编辑服务器配置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:270
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:403
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:271
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:402
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:82
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:101
msgid "Enable"
msgstr "启用"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:745
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:786
msgid "Enable 0-RTT QUIC handshake"
msgstr "客户端启用 0-RTT QUIC 连接握手"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:370
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:411
msgid "Enable Authentication"
msgstr "启用用户名/密码认证"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:62
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1493
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:63
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1595
msgid "Enable Auto Switch"
msgstr "启用自动切换"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1204
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1305
msgid "Enable ECH(optional)"
msgstr "启用 ECH (可选)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:527
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:568
msgid "Enable Lazy Mode"
msgstr "启用懒狗模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1231
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1332
msgid "Enable ML-DSA-65(optional)"
msgstr "启用 ML-DSA-65 (可选)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1389
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1491
msgid ""
"Enable Multipath TCP, need to be enabled in both server and client "
"configuration."
msgstr "启用 Multipath TCP,需在服务端和客户端配置中同时启用。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1325
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1427
msgid "Enable Mux.Cool"
msgstr "启用 Mux.Cool"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:94
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:95
msgid "Enable Netflix Mode"
msgstr "启用 Netflix 分流模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:521
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:562
msgid "Enable Obfuscation"
msgstr "启用混淆功能"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:430
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:471
msgid "Enable Plugin"
msgstr "启用插件"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:490
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:531
msgid "Enable Port Hopping"
msgstr "启用端口跳跃"
@@ -691,48 +720,48 @@ msgstr "启用端口跳跃"
msgid "Enable Server"
msgstr "启动服务端"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:503
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:544
msgid "Enable Transport Protocol Settings"
msgstr "启用传输协议设置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:607
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:648
msgid "Enable V2 protocol."
msgstr "开启 V2 协议。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:606
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:647
msgid "Enable V3 protocol."
msgstr "开启 V3 协议。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:248
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:249
msgid "Enable adblock"
msgstr "启用广告屏蔽"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:419
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:460
msgid "Enable the SUoT protocol, requires server support."
msgstr "启用 SUoT 协议,需要服务端支持。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:906
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:952
msgid "Enable this option to configure XHTTP Extra (JSON format)."
msgstr "启用此选项配置 XHTTP 附加项(JSON 格式)。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1099
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1153
msgid "Enabled Kernel virtual NIC TUN(optional)"
msgstr "启用内核的虚拟网卡 TUN(可选)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:334
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:335
msgid "Enabled Mixed"
msgstr "启用 Mixed"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:616
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1483
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:657
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1585
msgid "Enabling TCP Fast Open Requires Server Support."
msgstr "启用 TCP 快速打开需要服务端支持。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:398
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:405
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:648
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:659
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:790
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:439
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:446
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:689
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:700
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:831
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:118
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:125
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:122
@@ -743,35 +772,35 @@ msgstr "加密方式"
msgid "Enter Custom Ports"
msgstr "输入自定义端口"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:75
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:135
msgid "Every Day"
msgstr "每天"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:80
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:140
msgid "Every Friday"
msgstr "每周五"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:76
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:136
msgid "Every Monday"
msgstr "每周一"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:81
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:141
msgid "Every Saturday"
msgstr "每周六"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:82
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:142
msgid "Every Sunday"
msgstr "每周日"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:79
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:139
msgid "Every Thursday"
msgstr "每周四"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:77
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:137
msgid "Every Tuesday"
msgstr "每周二"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:78
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:138
msgid "Every Wednesday"
msgstr "每周三"
@@ -783,33 +812,37 @@ msgstr "应为:%s"
msgid "External Proxy Mode"
msgstr "分流服务器(前置)代理"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1427
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1529
msgid "FORCE BRUTAL"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:156
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:188
msgid "Filter Words splited by /"
msgstr "命中关键字的节点将被丢弃。多个关键字用 / 分隔"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1188
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1204
+msgid "FinalMask"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1289
msgid "Finger Print"
msgstr "指纹伪造"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1175
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1276
msgid "Flow"
msgstr "流控(Flow)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:233
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:234
msgid ""
"For Apple domains equipped with Chinese mainland CDN, always responsive to "
"Chinese CDN IP addresses"
msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:387
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:386
msgid "For specific usage, see:"
msgstr "具体使用方法,具体请参见:"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:497
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:538
msgid ""
"Format as 10000:20000 or 10000-20000 Multiple groups are separated by commas "
"(,)."
@@ -819,27 +852,27 @@ msgstr "格式为:10000:20000 或 10000-20000 多组时用逗号(,)隔开
msgid "Forward Netflix Proxy through Main Proxy"
msgstr "分流服务器流量通过主服务节点中转代理转发"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:357
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:358
msgid "Fragment"
msgstr "分片"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:373
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:375
msgid "Fragment Interval"
msgstr "分片间隔"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:369
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
msgid "Fragment Length"
msgstr "分片包长"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:360
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:361
msgid "Fragment Packets"
msgstr "分片方式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:373
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:375
msgid "Fragmentation interval (ms)"
msgstr "分片间隔(ms)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:369
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
msgid "Fragmented packet length (byte)"
msgstr "分片包长 (byte)"
@@ -863,11 +896,11 @@ msgstr "游戏模式 UDP 中继"
msgid "Game Mode UDP Server"
msgstr "游戏模式 UDP 中继服务器"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:716
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:757
msgid "Garbage collection interval(second)"
msgstr "UDP 数据包片残片清理间隔(单位:秒)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:722
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:763
msgid "Garbage collection lifetime(second)"
msgstr "UDP 数据包残片在服务器的保留时间(单位:秒)"
@@ -879,7 +912,7 @@ msgstr "TCP 透明代理"
msgid "Global Mode"
msgstr "全局模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:266
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:267
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:152
msgid "Global SOCKS5 Proxy Server"
msgstr "SOCKS5 代理服务端(全局)"
@@ -892,25 +925,25 @@ msgstr "全局设置"
msgid "Google Connectivity"
msgstr "【谷歌】连通性检查"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:173
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:174
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:202
msgid "Google DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:142
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:143
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:171
msgid "Google Public DNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:125
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:206
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:126
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:207
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:150
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:236
msgid "Google Public DNS (8.8.4.4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:126
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:207
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:127
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:151
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:237
msgid "Google Public DNS (8.8.8.8)"
@@ -920,67 +953,71 @@ msgstr ""
msgid "Grant UCI access for luci-app-ssr-plus"
msgstr "授予访问 luci-app-ssr-plus 配置的权限"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:969
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1023
msgid "Gun"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:988
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1042
msgid "H2 Read Idle Timeout"
msgstr "H2 读取空闲超时"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:983
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1037
msgid "H2/gRPC Health Check"
msgstr "H2/gRPC 健康检查"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:341
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:829
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:382
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:870
msgid "HTTP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:833
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:874
msgid "HTTP Host"
msgstr "HTTP 主机名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:838
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:879
msgid "HTTP Path"
msgstr "HTTP 路径"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:951
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1005
msgid "HTTP/2 Host"
msgstr "HTTP/2 主机名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:956
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1010
msgid "HTTP/2 Path"
msgstr "HTTP/2 路径"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1023
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1077
msgid "Header"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1000
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1054
msgid "Health Check Timeout"
msgstr "健康检查超时"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:704
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:745
msgid "Heartbeat interval(second)"
msgstr "保活心跳包发送间隔(单位:秒)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:872
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:896
+msgid "HeartbeatPeriod(second)"
+msgstr "心跳周期(单位:秒)"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:918
msgid "Httpupgrade Host"
msgstr "HTTPUpgrade 主机名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:877
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:923
msgid "Httpupgrade Path"
msgstr "HTTPUpgrade 路径"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:218
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:263
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:338
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:27
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:285
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:317
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:379
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:79
msgid "Hysteria2"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:545
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:586
msgid "Hysterir QUIC parameters"
msgstr "QUIC 参数"
@@ -988,56 +1025,52 @@ msgstr "QUIC 参数"
msgid "IP Route Mode"
msgstr "绕过中国大陆 IP 模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1285
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1386
msgid "IP Stack Preference"
msgstr "IP 栈优先级"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:431
-msgid "IP Type"
-msgstr "IP 类型"
-
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:242
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:243
msgid "If empty, Not change Apple domains parsing DNS (Default is empty)"
msgstr "如果为空,则不更改 Apple 域名解析 DNS(默认为空)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1211
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1312
msgid ""
"If it is not empty, it indicates that the Client has enabled Encrypted "
"Client, see:"
msgstr "如果不为空,表示客户端已启用加密客户端,具体请参见:"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:752
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:793
msgid "If this option is not set, the socket behavior is platform dependent."
msgstr "如果未设置此选项,则 Socket 行为依赖于平台。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1298
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1399
msgid ""
"If true, allowss insecure connection at TLS client, e.g., TLS server uses "
"unverifiable certificates."
msgstr ""
"是否允许不安全连接。当选择时,将不会检查远端主机所提供的 TLS 证书的有效性。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1441
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1543
msgid "If you have a self-signed certificate,please check the box"
msgstr "如果你使用自签证书,请选择"
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:954
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:1040
msgid "Import"
msgstr "导入配置信息"
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:182
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:327
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:475
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:508
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:539
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:633
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:727
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:869
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:945
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:198
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:353
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:516
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:553
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:587
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:692
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:799
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:951
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:1031
msgid "Import configuration information successfully."
msgstr "导入配置信息成功。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:976
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1030
msgid "Initial Windows Size"
msgstr "初始窗口大小"
@@ -1049,11 +1082,7 @@ msgstr "接口"
msgid "Interface control"
msgstr "接口控制"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:942
-msgid "Invalid JSON format"
-msgstr "无效的 JSON 格式"
-
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:948
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:1034
msgid "Invalid format."
msgstr "无效的格式。"
@@ -1061,19 +1090,19 @@ msgstr "无效的格式。"
msgid "KcpTun"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1503
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1605
msgid "KcpTun Enable"
msgstr "KcpTun 启用"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1520
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1622
msgid "KcpTun Param"
msgstr "KcpTun 参数"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1515
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1617
msgid "KcpTun Password"
msgstr "KcpTun 密码"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1509
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1611
msgid "KcpTun Port"
msgstr "KcpTun 端口"
@@ -1101,73 +1130,74 @@ msgstr "内网主机列表"
msgid "LAN IP AC"
msgstr "LAN IP 访问控制"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:129
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:210
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:130
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:211
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:154
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:240
msgid "Level 3 Public DNS (209.244.0.3)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:130
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:211
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:131
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:155
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:241
msgid "Level 3 Public DNS (209.244.0.4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:131
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:132
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:213
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:156
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:242
msgid "Level 3 Public DNS (4.2.2.1)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:132
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:213
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:133
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:214
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:157
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:243
msgid "Level 3 Public DNS (4.2.2.2)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:133
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:214
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:215
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:158
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:244
msgid "Level 3 Public DNS (4.2.2.3)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:215
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:135
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:216
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:159
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:245
msgid "Level 3 Public DNS (4.2.2.4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:145
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:173
msgid "Level 3 Public DNS-1 (209.244.0.3-4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:145
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:146
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:174
msgid "Level 3 Public DNS-2 (4.2.2.1-2)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:146
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:147
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:175
msgid "Level 3 Public DNS-3 (4.2.2.3-4)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:377
-msgid "Limit the maximum number of splits."
-msgstr "限制分片的最大数量。"
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1156
+msgid ""
+"Linux kernel TUN virtual NIC requires system support and root privileges."
+msgstr "Linux 内核 TUN 虚拟网卡需要系统支持和 root 权限。"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua:22
msgid "Listen only on the given interface or, if unspecified, on all"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:347
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1497
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:348
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1599
msgid "Local Port"
msgstr "本地端口"
@@ -1175,31 +1205,31 @@ msgstr "本地端口"
msgid "Local Servers"
msgstr "本机服务端"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1105
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1164
msgid "Local addresses"
msgstr "本地地址"
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:23
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:66
msgid "Log"
msgstr "日志"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:84
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:85
msgid "Loukky/gfwlist-by-loukky"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:83
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:84
msgid "Loyalsoldier/v2ray-rules-dat"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1236
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1337
msgid "ML-DSA-65 Public key"
msgstr "ML-DSA-65 公钥"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1389
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1491
msgid "MPTCP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1049
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1103
msgid "MTU"
msgstr "最大传输单元"
@@ -1207,19 +1237,15 @@ msgstr "最大传输单元"
msgid "Main Server"
msgstr "主服务器"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:856
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:902
msgid "Max Early Data"
msgstr "最大前置数据"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:377
-msgid "Max Split"
-msgstr "最大分片数"
-
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:757
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:798
msgid "Maximum packet size the socks5 server can receive from external"
msgstr "socks5 服务器可以从外部接收的最大数据包大小(单位:字节)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1359
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1461
msgid ""
"Min value is 1, Max value is 1024. When omitted or set to 0, Will same path "
"as TCP traffic."
@@ -1227,29 +1253,31 @@ msgstr ""
"最小值 1,最大值 1024。 省略或者填 0 时,将与 TCP 流量走同一条路,也就是传统"
"的行为。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1346
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1448
msgid ""
"Min value is 1, Max value is 128. When omitted or set to 0, it equals 8."
msgstr "最小值 1,最大值 128。省略或者填 0 时都等于 8。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:334
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:335
msgid "Mixed as an alias of socks, default:Enabled."
msgstr "Mixed 作为 SOCKS 的别名,默认:启用。"
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/optimize_cbi_ui.htm:10
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:714
msgid "Move down"
msgstr "下移"
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/optimize_cbi_ui.htm:7
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:713
msgid "Move up"
msgstr "上移"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:221
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:222
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:251
msgid "Muitiple DNS server can saperate with ','"
msgstr "多个上游 DNS 服务器请用 ',' 分隔(注意用英文逗号)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:970
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1024
msgid "Multi"
msgstr ""
@@ -1257,11 +1285,16 @@ msgstr ""
msgid "Multi Threads Option"
msgstr "多线程并发转发"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1325
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:994
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1233
+msgid "Must be JSON text!"
+msgstr "必须是 JSON 文本内容!"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1427
msgid "Mux"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:252
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:253
msgid "NEO DEV HOST"
msgstr ""
@@ -1269,7 +1302,7 @@ msgstr ""
msgid "NOT RUNNING"
msgstr "未运行"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:260
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:314
msgid "NaiveProxy"
msgstr ""
@@ -1285,7 +1318,7 @@ msgstr "Netflix 分流域名列表"
msgid "Netflix IP Data"
msgstr "【Netflix IP 段】数据库"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:99
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:100
msgid "Netflix IP Only"
msgstr ""
@@ -1293,19 +1326,19 @@ msgstr ""
msgid "Netflix Node"
msgstr "Netflix 分流服务器"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:100
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:101
msgid "Netflix and AWS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:275
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:329
msgid "Network Tunnel"
msgstr "网络隧道"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:282
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:336
msgid "Network interface to use"
msgstr "使用的网络接口"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:700
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:741
msgid "New Reno"
msgstr ""
@@ -1319,21 +1352,21 @@ msgstr "未检查"
msgid "No new data!"
msgstr "你已经是最新数据,无需更新!"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1473
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1575
msgid "No specify upload file."
msgstr "没有上传证书。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:381
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:380
msgid "Noise"
msgstr "噪声"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:437
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:828
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1014
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1026
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1036
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:234
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:239
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:478
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:869
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1068
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1080
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1090
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:270
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:275
msgid "None"
msgstr ""
@@ -1356,35 +1389,35 @@ msgid ""
"compatibility issues."
msgstr "注意:不同版本间的配置恢复可能会导致兼容性问题。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1400
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1502
msgid "Number of early established connections to reduce latency."
msgstr "预连接的数量,用于降低延迟。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:436
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:472
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:477
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:513
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:139
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:133
msgid "Obfs"
msgstr "混淆插件"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:479
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:520
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:146
msgid "Obfs param (optional)"
msgstr "混淆参数(可选)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1090
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1144
msgid "Obfuscate password (optional)"
msgstr "混淆密码(可选)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:538
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:579
msgid "Obfuscation Password"
msgstr "混淆密码"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:532
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:573
msgid "Obfuscation Type"
msgstr "混淆类型"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1309
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1411
msgid "Once set, connects only when the server’s chain fingerprint matches."
msgstr "设置后,仅在服务器证书链指纹匹配时连接。"
@@ -1392,28 +1425,28 @@ msgstr "设置后,仅在服务器证书链指纹匹配时连接。"
msgid "Only Common Ports"
msgstr "仅常用端口(不走 P2P 流量到代理)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:323
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:324
msgid "Only when Socks5 Auth Mode is password valid, Mandatory."
msgstr "仅当 Socks5 认证方式为 Password 时有效,必填。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:328
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:329
msgid "Only when Socks5 Auth Mode is password valid, Not mandatory."
msgstr "仅当 Socks5 认证方式为 Password 时有效,非必填。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:143
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:172
msgid "OpenDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:209
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:129
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:210
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:153
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:239
msgid "OpenDNS (208.67.220.220)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:127
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:209
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:152
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:238
msgid "OpenDNS (208.67.222.222)"
@@ -1431,11 +1464,11 @@ msgstr ""
msgid "Oversea Mode DNS-2 (114.114.115.115)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:423
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:422
msgid "Packet"
msgstr "数据包"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:384
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:425
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:114
msgid "Password"
msgstr "密码"
@@ -1444,7 +1477,7 @@ msgstr "密码"
msgid "Paste sharing link here"
msgstr "在此处粘贴分享链接"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1120
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1179
msgid "Peer public key"
msgstr "节点公钥"
@@ -1453,15 +1486,15 @@ msgstr "节点公钥"
msgid "Perform reset"
msgstr "执行重置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1006
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1060
msgid "Permit Without Stream"
msgstr "允许无数据流"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:259
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:299
msgid "Ping Latency"
msgstr "Ping 延迟"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1480
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1582
msgid "Please confirm the current certificate path"
msgstr "请选择确认所传证书,证书不正确将无法运行"
@@ -1469,23 +1502,23 @@ msgstr "请选择确认所传证书,证书不正确将无法运行"
msgid "Please fill in reset"
msgstr "请填写 reset"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:458
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:499
msgid "Plugin Opts"
msgstr "插件参数"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:514
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:555
msgid "Port Hopping Interval(Unit:Second)"
msgstr "端口跳跃间隔(单位:秒)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:496
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:537
msgid "Port hopping range"
msgstr "端口跳跃范围"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1400
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1502
msgid "Pre-connections"
msgstr "预连接"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1124
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1183
msgid "Pre-shared key"
msgstr "预共享密钥"
@@ -1493,17 +1526,17 @@ msgstr "预共享密钥"
msgid "Prefer firewall tools"
msgstr "首选防火墙工具"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1115
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1174
msgid "Private key"
msgstr "私钥"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:462
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:503
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:132
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:128
msgid "Protocol"
msgstr "传输协议"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:469
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:510
msgid "Protocol param (optional)"
msgstr "传输协议参数(可选)"
@@ -1511,44 +1544,44 @@ msgstr "传输协议参数(可选)"
msgid "Proxy Ports"
msgstr "需要代理的端口"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1162
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1263
msgid "Public key"
msgstr "公钥"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1019
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1073
msgid "QUIC Key"
msgstr "QUIC 密钥"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1012
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1066
msgid "QUIC Security"
msgstr "QUIC 加密方式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:572
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:613
msgid "QUIC initConnReceiveWindow"
msgstr "QUIC 初始的连接接收窗口大小"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:558
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:599
msgid "QUIC initStreamReceiveWindow"
msgstr "QUIC 初始流接收窗口大小。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:579
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:620
msgid "QUIC maxConnReceiveWindow"
msgstr "QUIC 最大的连接接收窗口大小"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:586
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:627
msgid "QUIC maxIdleTimeout(Unit:second)"
msgstr "QUIC 最长空闲超时时间(单位:秒)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:565
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:606
msgid "QUIC maxStreamReceiveWindow"
msgstr "QUIC 最大的流接收窗口大小"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:176
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:205
msgid "Quad9 DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1157
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1258
msgid "REALITY"
msgstr ""
@@ -1560,7 +1593,7 @@ msgstr "恢复备份"
msgid "RUNNING"
msgstr "运行中"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1078
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1132
msgid "Read Buffer Size"
msgstr "读取缓冲区大小"
@@ -1568,7 +1601,7 @@ msgstr "读取缓冲区大小"
msgid "Really reset all changes?"
msgstr "真的重置所有更改吗?"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:269
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:309
msgid "Reapply"
msgstr "重新应用"
@@ -1580,7 +1613,7 @@ msgstr "重新应用"
msgid "Records"
msgstr "条记录"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:289
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:343
msgid "Redirect traffic to this network interface"
msgstr "分流到这个网络接口"
@@ -1603,20 +1636,20 @@ msgstr "更新成功!"
msgid "Refresh..."
msgstr "正在更新,请稍候..."
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:87
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:147
msgid "Regular update (Hour)"
msgstr "定时更新(小时)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:95
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:155
msgid "Regular update (Min)"
msgstr "定时更新(分钟)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1412
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1428
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1514
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1530
msgid "Reno"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1110
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1169
msgid "Reserved bytes(optional)"
msgstr "保留字节(可选)"
@@ -1625,7 +1658,7 @@ msgstr "保留字节(可选)"
msgid "Reset complete"
msgstr "重置完成"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:258
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:259
msgid "Reset to defaults"
msgstr "恢复出厂设置"
@@ -1663,63 +1696,79 @@ msgstr "运行中"
msgid "Running Mode"
msgstr "运行模式"
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:262
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:278
msgid "SS URL base64 sstr format not recognized."
msgstr "无法识别 SS URL 的 Base64 格式。"
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:13
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:56
msgid "SSR Client"
msgstr "客户端"
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:17
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:60
msgid "SSR Server"
msgstr "服务端"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:276
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:277
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:71
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:79
msgid "Same as Global Server"
msgstr "与全局服务器相同"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:160
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:729
+msgid "Save Order"
+msgstr "保存当前顺序"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:192
msgid "Save Words splited by /"
msgstr ""
"命中关键字的节点将被保留。多个关键字用 / 分隔。此项为空则不启用保留匹配"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:157
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:472
+msgid "Save failed!"
+msgstr "保存失败!"
+
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:470
+msgid "Saved current page order successfully."
+msgstr "保存当前页面顺序成功。"
+
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:726
+msgid "Saving the new order..."
+msgstr "正在保存新的顺序…"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:158
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:186
msgid "Select DNS parse Mode"
msgstr "选择 DNS 解析方式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:293
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:130
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:347
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:176
msgid "Selection ShadowSocks Node Use Version."
msgstr "选择 ShadowSocks 节点使用版本。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1433
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1535
msgid "Self-signed Certificate"
msgstr "自签证书"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:275
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:276
msgid "Server"
msgstr "服务器"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:344
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:385
msgid "Server Address"
msgstr "服务器地址"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:191
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:223
msgid "Server Count"
msgstr "服务器节点数量"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:246
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:300
msgid "Server Node Type"
msgstr "服务器节点类型"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:357
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:398
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:96
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:112
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:242
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:278
msgid "Server Port"
msgstr "端口"
@@ -1732,53 +1781,53 @@ msgstr "服务端配置"
msgid "Server Type"
msgstr "服务端类型"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:55
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:56
msgid "Server failsafe auto swith and custom update settings"
msgstr "服务器节点故障自动切换/广告屏蔽/中国大陆 IP 段数据库更新设置"
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:14
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:57
msgid "Servers Nodes"
msgstr "服务器节点"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:64
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:124
msgid "Servers subscription and manage"
msgstr "服务器节点订阅与管理"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1151
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1252
msgid "Session Ticket"
msgstr "会话凭据"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:166
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:167
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:195
msgid "Set Single DNS"
msgstr "设置单个 DNS"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:269
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:323
msgid "Shadow-TLS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:633
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:674
msgid "Shadow-TLS ChainPoxy type"
msgstr "代理链类型"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:254
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:333
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:308
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:374
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:89
msgid "ShadowSocks"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:300
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:48
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:354
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:103
msgid "ShadowSocks-libev Version"
msgstr "ShadowSocks-libev 版本"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:297
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:636
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:45
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:351
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:677
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:100
msgid "ShadowSocks-rust Version"
msgstr "ShadowSocks-rust 版本"
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:10
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:53
msgid "ShadowSocksR Plus+"
msgstr ""
@@ -1786,49 +1835,49 @@ msgstr ""
msgid "ShadowSocksR Plus+ Settings"
msgstr "ShadowSocksR Plus+ 设置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:644
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:685
msgid "Shadowsocks password"
msgstr "shadowsocks密码"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:251
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:305
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:92
msgid "ShadowsocksR"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1166
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1267
msgid "Short ID"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:247
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:283
msgid "Socket Connected"
msgstr "连接测试"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:340
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:381
msgid "Socks"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:798
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:839
msgid "Socks Version"
msgstr "Socks 版本"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:309
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:310
msgid "Socks protocol auth methods, default:noauth."
msgstr "Socks 协议的认证方式,默认值:noauth。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:272
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:326
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:87
msgid "Socks5"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:309
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:310
msgid "Socks5 Auth Mode"
msgstr "Socks5 认证方式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:328
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:329
msgid "Socks5 Password"
msgstr "Socks5 密码"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:323
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:324
msgid "Socks5 User"
msgstr "Socks5 用户名"
@@ -1836,125 +1885,139 @@ msgstr "Socks5 用户名"
msgid "Specifically for edit dnsproxy DNS parse files."
msgstr "专门用于编辑 DNSPROXY 的 DNS 解析文件。"
-#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:18
+#: applications/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua:61
msgid "Status"
msgstr "状态"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:176
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:208
msgid "Subscribe Default Auto-Switch"
msgstr "订阅新节点自动切换设置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:154
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:186
msgid "Subscribe Filter Words"
msgstr "订阅节点关键字过滤"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:158
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:190
msgid "Subscribe Save Words"
msgstr "订阅节点关键字保留检查"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:151
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:183
msgid "Subscribe URL"
msgstr "SS/SSR/V2/TROJAN/HY2/TUIC 订阅 URL"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:178
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:210
msgid "Subscribe new add server default Auto-Switch on"
msgstr "订阅加入的新节点默认开启自动切换"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:173
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:205
msgid "Subscribe nodes allows insecure connection as TLS client (insecure)"
msgstr "订阅节点强制开启 不验证TLS客户端证书 (insecure)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:256
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:257
msgid "Support AdGuardHome and DNSMASQ format list"
msgstr "同时支持 AdGuard Home 和 DNSMASQ 格式的过滤列表"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:66
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:67
msgid "Switch check cycly(second)"
msgstr "自动切换检查周期(秒)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:616
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1483
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:657
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1585
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:149
msgid "TCP Fast Open"
msgstr "TCP 快速打开"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:357
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:358
msgid ""
"TCP fragments, which can deceive the censorship system in some cases, such "
"as bypassing SNI blacklists."
msgstr "TCP 分片,在某些情况下可以欺骗审查系统,比如绕过 SNI 黑名单。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:227
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:257
msgid "TCP upstream"
msgstr "TCP 上游"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1137
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1238
msgid "TLS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:611
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:652
msgid "TLS 1.3 Strict mode"
msgstr "TLS 1.3 限定模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1259
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1360
msgid "TLS ALPN"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1314
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1416
msgid "TLS Certificate Name (CertName)"
msgstr "TLS 证书名称(CertName)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1309
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1411
msgid "TLS Chain Fingerprint (SHA256)"
msgstr "TLS 证书链指纹(SHA256)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1251
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1352
msgid "TLS Host"
msgstr "TLS 主机名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1314
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:527
+msgid "TLS handshake test, latency for reference only"
+msgstr "TLS握手测试,延时仅供参考"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1416
msgid "TLS is used to verify the leaf certificate name."
msgstr "TLS 用于验证 leaf 证书的 name。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1056
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1110
msgid "TTI"
msgstr "传输时间间隔"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:266
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:320
msgid "TUIC"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1271
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1372
msgid "TUIC ALPN"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:676
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:717
msgid "TUIC Server IP Address"
msgstr "TUIC 服务器 IP 地址"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:683
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:724
msgid "TUIC User Password"
msgstr "TUIC 用户密钥"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:669
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:710
msgid "TUIC User UUID"
msgstr "TUIC 用户 uuid"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:734
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:775
msgid "TUIC receive window"
msgstr "接收窗口(无需确认即可接收的最大字节数:默认8Mb)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:728
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:769
msgid "TUIC send window"
msgstr "发送窗口(无需确认即可发送的最大字节数:默认8Mb*2)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:174
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:203
msgid "TWNIC-101 DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1238
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:527
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:592
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:616
+msgid "Test"
+msgstr "测试"
+
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:569
+msgid "Testing..."
+msgstr "检测中…"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1339
msgid ""
"The client has not configured mldsa65Verify, but it will not perform the "
"\"additional verification\" step and can still connect normally, see:"
@@ -1962,8 +2025,8 @@ msgstr ""
"客户端若未配置 mldsa65Verify,但它不会执行 \"附加验证\" 步骤,仍可以正常连"
"接,具体请参见:"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:211
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:106
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:278
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:166
msgid ""
"The configured type also applies to the core specified when manually "
"importing nodes."
@@ -1973,38 +2036,36 @@ msgstr "配置的类型同样适用于手动导入节点时所指定的核心程
msgid "The content entered is incorrect!"
msgstr "输入的内容不正确!"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:593
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:634
msgid "The keep-alive period.(Unit:second)"
msgstr "心跳包发送间隔(单位:秒)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:181
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:213
msgid "Through proxy update"
msgstr "通过代理更新"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:183
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:215
msgid "Through proxy update list, Not Recommended"
msgstr "通过路由器自身代理更新订阅"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:710
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:751
msgid "Timeout for establishing a connection to server(second)"
msgstr "连接超时时间(单位:秒)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:161
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:162
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:190
msgid "Tips: Dnsproxy DNS Parse List Path:"
msgstr "提示:Dnsproxy 的 DNS 解析列表路径:"
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:289
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:290
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:715
msgid "To Bottom"
msgstr "置底"
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:279
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:280
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:712
msgid "To Top"
msgstr "置顶"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:386
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:385
msgid "To send noise packets, select \"Noise\" in Xray Settings."
msgstr "在 Xray 设置中勾选 “噪声” 以发送噪声包。"
@@ -2012,48 +2073,48 @@ msgstr "在 Xray 设置中勾选 “噪声” 以发送噪声包。"
msgid "Total Records:"
msgstr "新的总记录数:"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:807
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:848
msgid "Transport"
msgstr "传输协议"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:508
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:549
msgid "Transport Protocol"
msgstr "传输协议"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:257
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:332
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:311
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:373
msgid "Trojan"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:407
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:232
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:406
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:268
msgid "Type"
msgstr "类型"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:510
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:551
msgid "UDP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:381
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:380
msgid ""
"UDP noise, Under some circumstances it can bypass some UDP based protocol "
"restrictions."
msgstr "UDP 噪声,在某些情况下可以绕过一些针对 UDP 协议的限制。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:418
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:459
msgid "UDP over TCP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:689
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:730
msgid "UDP relay mode"
msgstr "UDP 中继模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:229
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:258
msgid "UDP upstream"
msgstr "UDP 上游"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:226
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:227
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:256
msgid "UDP/TCP upstream"
msgstr "UDP/TCP 上游"
@@ -2062,6 +2123,10 @@ msgstr "UDP/TCP 上游"
msgid "UL Restore"
msgstr "上传恢复"
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:228
+msgid "URL Test Address"
+msgstr "URL 测试地址"
+
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:82
msgid "Unable to copy SSR to clipboard."
msgstr "无法复制 SSR 网址到剪贴板。"
@@ -2071,38 +2136,38 @@ msgstr "无法复制 SSR 网址到剪贴板。"
msgid "Unknown"
msgstr "未知"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:185
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:217
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/subscribe.htm:16
msgid "Update All Subscribe Servers"
msgstr "更新所有订阅服务器节点"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:162
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:194
msgid "Update Subscribe List"
msgstr "更新订阅 URL 列表"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:74
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:134
msgid "Update cycle (Day/Week)"
msgstr "更新周期(天/周)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:164
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:196
msgid "Update subscribe url list first"
msgstr "修改订阅 URL 和节点关键字后,请先点击更新"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1062
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1116
msgid "Uplink Capacity(Default:Mbps)"
msgstr "上行链路容量(默认:Mbps)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1443
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1545
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm:3
msgid "Upload"
msgstr "上传"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:119
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:120
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:144
msgid "Use ChinaDNS-NG query and cache"
msgstr "使用 ChinaDNS-NG 查询并缓存"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:167
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:168
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:196
msgid "Use DNS List File"
msgstr "使用 DNS 列表文件"
@@ -2115,12 +2180,12 @@ msgstr "使用 WAN 下发的 DNS"
msgid "Use DNS from WAN and 114DNS"
msgstr "使用 WAN 下发的 DNS 和 114DNS"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:107
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:108
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:132
msgid "Use DNS2SOCKS query and cache"
msgstr "使用 DNS2SOCKS 查询并缓存"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:110
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:111
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:135
msgid "Use DNS2SOCKS-RUST query and cache"
msgstr "使用 DNS2SOCKS-RUST 查询并缓存"
@@ -2129,7 +2194,7 @@ msgstr "使用 DNS2SOCKS-RUST 查询并缓存"
msgid "Use DNS2TCP query"
msgstr "使用 DNS2TCP 查询"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:116
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:117
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:141
msgid "Use DNSPROXY query and cache"
msgstr "使用 DNSPROXY 查询并缓存"
@@ -2142,11 +2207,11 @@ msgstr "使用本机端口为 5335 的 DNS 服务"
msgid "Use MOSDNS query (Not Support Oversea Mode)"
msgstr "使用 MOSDNS 查询 (不支持海外用户回国模式)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:113
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:114
msgid "Use MosDNS query"
msgstr "使用 MosDNS 查询"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1046
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1100
msgid ""
"Use it together with the DNS disguised type. You can fill in any domain."
msgstr "配合伪装类型 DNS 使用,可随便填一个域名。"
@@ -2155,71 +2220,64 @@ msgstr "配合伪装类型 DNS 使用,可随便填一个域名。"
msgid "User cancelled."
msgstr "用户已取消。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:209
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1196
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:238
msgid "User-Agent"
msgstr "用户代理(User-Agent)"
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:217
-#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:898
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:233
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:980
msgid "Userinfo format error."
msgstr "用户信息格式错误。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:377
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:418
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:110
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:117
msgid "Username"
msgstr "用户名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:484
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:525
msgid "Users Authentication"
msgstr "用户验证"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:278
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:332
msgid "Using incorrect encryption mothod may causes service fail to start"
msgstr "输入不正确的参数组合可能会导致服务无法启动"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:248
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:302
msgid "V2Ray/XRay"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:329
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:370
msgid "V2Ray/XRay protocol"
msgstr "V2Ray/XRay 协议"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:330
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:371
msgid "VLESS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:779
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:820
msgid "VLESS Encryption"
msgstr "VLESS 加密"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:331
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:372
msgid "VMess"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1027
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1037
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1081
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1091
msgid "VideoCall (SRTP)"
msgstr "视频通话(SRTP)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1100
-msgid ""
-"Virtual NIC TUN of Linux kernel can be used only when system supports and "
-"have root permission. If used, IPv6 routing table 1023 is occupied."
-msgstr ""
-"需要系统支持且有 root 权限才能使用 Linux 内核的虚拟网卡 TUN,使用后会占用 "
-"IPv6 的 1023 号路由表。"
-
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:639
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:680
msgid "Vmess Protocol"
msgstr "VMESS 协议"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:654
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:695
msgid "Vmess UUID"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:771
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:812
msgid "Vmess/VLESS ID (UUID)"
msgstr ""
@@ -2235,285 +2293,293 @@ msgstr "WAN IP 访问控制"
msgid "WAN White List IP"
msgstr "不走代理的 WAN IP"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:844
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:885
msgid "WebSocket Host"
msgstr "WebSocket 主机名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:850
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:891
msgid "WebSocket Path"
msgstr "WebSocket 路径"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1029
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1039
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1083
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1093
msgid "WechatVideo"
msgstr "微信视频通话"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:95
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:96
msgid "When disabled shunt mode, will same time stopped shunt service."
msgstr "当停用分流模式时,将同时停止分流服务。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:197
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:198
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:227
msgid "When disabled, all AAAA requests are not resolved."
msgstr "当禁用时,不解析所有 AAAA 请求。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1157
+msgid "When enabled, it occupies IPv6 routing table 1023."
+msgstr "启用后,将占用 IPv6 路由表 1023。"
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:187
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:216
msgid "When two or more DNS servers are deployed, enable this function."
msgstr "当部署两台或两台以上 DNS 服务器时,需要启用该功能。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:160
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:161
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:189
msgid ""
"When use DNS list file, please ensure list file exists and is formatted "
"correctly."
msgstr "当使用 DNS 列表文件时,请确保列表文件存在并且格式正确。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:335
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1031
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1041
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:376
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1085
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1095
msgid "WireGuard"
msgstr "WireGuard 数据包"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1130
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1189
msgid "Wireguard allows only traffic from specific source IP."
msgstr "Wireguard 仅允许特定源 IP 的流量。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1111
-msgid "Wireguard reserved bytes."
-msgstr "Wireguard 保留字节。"
-
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1084
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1138
msgid "Write Buffer Size"
msgstr "写入缓冲区大小"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:905
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:951
msgid "XHTTP Extra"
msgstr "XHTTP 附加项"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:893
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:939
msgid "XHTTP Host"
msgstr "XHTTP 主机名"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:884
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:930
msgid "XHTTP Mode"
msgstr "XHTTP 模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:899
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:945
msgid "XHTTP Path"
msgstr "XHTTP 路径"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:215
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:24
-msgid "Xray"
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:282
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:82
+msgid "Xray (Hysteria2)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:354
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:106
+msgid "Xray (ShadowSocks)"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:355
msgid "Xray Fragment Settings"
msgstr "Xray 分片设置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:384
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:383
msgid "Xray Noise Packets"
msgstr "Xray 噪声数据包"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:251
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:252
msgid "adblock_url"
msgstr "广告屏蔽更新 URL"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1015
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1069
msgid "aes-128-gcm"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1378
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1480
msgid "allow"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1372
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1474
msgid "allow: Allows use Mux connection."
msgstr "allow:允许走 Mux 连接。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1293
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1394
msgid "allowInsecure"
msgstr "允许不安全连接"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1129
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1188
msgid "allowedIPs(optional)"
msgstr "allowedIPs(可选)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1194
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1295
msgid "android"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:253
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:254
msgid "anti-AD"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1016
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1070
msgid "chacha20-poly1305"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:91
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:92
msgid "china-operator-ip"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1190
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1291
msgid "chrome"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:179
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:180
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:208
msgid "cloudflare-dns.com DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1409
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1424
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1511
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1526
msgid "comment_tcpcongestion_disable"
msgstr "系统默认值"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1342
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1444
msgid "concurrency"
msgstr "TCP 最大并发连接数"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1406
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1421
+#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/server_list.htm:666
+msgid "connect"
+msgstr ""
+
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1508
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1523
msgid "custom_tcpcongestion"
msgstr "连接服务器节点的 TCP 拥塞控制算法"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1200
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1350
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1363
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1301
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1452
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1465
msgid "disable"
msgstr "禁用"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:176
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:204
msgid "dns.sb DNSCrypt SDNS"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1195
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1296
msgid "edge"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:191
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:192
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:221
msgid "fastest_addr"
msgstr "最快响应"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:238
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:239
msgid "felixonmars/dnsmasq-china-list"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1191
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1292
msgid "firefox"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:994
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1048
msgid "gRPC Idle Timeout"
msgstr "gPRC 空闲超时"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:967
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1021
msgid "gRPC Mode"
msgstr "gRPC 模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:961
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1015
msgid "gRPC Service Name"
msgstr "gRPC 服务名称"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:81
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:82
msgid "gfwlist Update url"
msgstr "GFW 列表更新 URL"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:85
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:86
msgid "gfwlist/gfwlist"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1193
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1294
msgid "ios"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:189
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:219
msgid "load_balance"
msgstr "负载均衡"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:692
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:733
msgid "lossless UDP relay using QUIC streams"
msgstr "使用 QUIC 流的无损 UDP 中继"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:691
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:732
msgid "native UDP characteristics"
msgstr "原生 UDP 特性"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:98
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:99
msgid "nfip_url"
msgstr "Netflix IP 段更新 URL"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:409
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1179
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:450
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1280
msgid "none"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:439
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:480
msgid "obfs-local"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:191
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:220
msgid "parallel"
msgstr "并行查询"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1197
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1298
msgid "qq"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1198
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1299
msgid "random"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1199
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1300
msgid "randomized"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1377
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1479
msgid "reject"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1192
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1293
msgid "safari"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:626
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:667
msgid "shadow-TLS SNI"
msgstr "服务器名称指示"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:448
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:489
msgid "shadow-tls"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:604
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:645
msgid "shadowTLS protocol Version"
msgstr "ShadowTLS 协议版本"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1379
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1481
msgid "skip"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1373
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1475
msgid ""
"skip: Not use Mux module to carry UDP 443 traffic, Use original UDP "
"transmission method of proxy protocol."
msgstr ""
"skip:不使用 Mux 模块承载 UDP 443 流量,将使用代理协议原本的 UDP 传输方式。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1170
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1271
msgid "spiderX"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:82
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:83
msgid "v2fly/domain-list-community"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:442
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:483
msgid "v2ray-plugin"
msgstr ""
@@ -2525,18 +2591,40 @@ msgstr "有效的地址:端口"
msgid "warning! Please do not reuse the port!"
msgstr "警告!请不要重复使用端口!"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:445
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:486
msgid "xray-plugin"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1355
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1457
msgid "xudpConcurrency"
msgstr "UDP 最大并发连接数"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1368
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1470
msgid "xudpProxyUDP443"
msgstr "对被代理的 UDP/443 流量处理方式"
+#~ msgid "IP Type"
+#~ msgstr "IP 类型"
+
+#~ msgid "Invalid JSON format"
+#~ msgstr "无效的 JSON 格式"
+
+#~ msgid "Limit the maximum number of splits."
+#~ msgstr "限制分片的最大数量。"
+
+#~ msgid "Max Split"
+#~ msgstr "最大分片数"
+
+#~ msgid ""
+#~ "Virtual NIC TUN of Linux kernel can be used only when system supports and "
+#~ "have root permission. If used, IPv6 routing table 1023 is occupied."
+#~ msgstr ""
+#~ "需要系统支持且有 root 权限才能使用 Linux 内核的虚拟网卡 TUN,使用后会占用 "
+#~ "IPv6 的 1023 号路由表。"
+
+#~ msgid "Wireguard reserved bytes."
+#~ msgstr "Wireguard 保留字节。"
+
#~ msgid "Applying configuration changes… %ds"
#~ msgstr "正在等待配置被应用… %ds"
diff --git a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr
index 7984417f..90484ee7 100755
--- a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr
+++ b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr
@@ -1478,24 +1478,23 @@ start_xhttp_addr() {
local xhttp_addr_file="/etc/ssrplus/xhttp_address.txt"
local tmp_file="/tmp/.xhttp_addr.tmp"
- # 收集所有 xhttp_extra 地址,去掉空行并去重排序
+ # 收集所有节点的 download_address 值,去掉空行并去重排序
{
for sec in "$GLOBAL_SERVER" "$SHUNT_SERVER" "$UDP_RELAY_SERVER"; do
- local extra
- extra=$(uci_get_by_name "$sec" xhttp_extra)
- [ -n "$extra" ] && \
- echo "$extra" | sed -n 's/.*"address":[[:space:]]*"\([^"]*\)".*/\1/p'
+ local addr
+ addr=$(uci_get_by_name "$sec" download_address)
+ [ -n "$addr" ] && echo "$addr"
done
} | grep -v '^$' | sort -u > "$tmp_file"
- # 如果没有 xhttp_extra 地址,删除旧文件并退出
+ # 如果没有 download_address 地址,删除旧文件并退出
if [ ! -s "$tmp_file" ]; then
[ -f "$xhttp_addr_file" ] && rm -f "$xhttp_addr_file"
rm -f "$tmp_file"
return 0
fi
- # 比较 MD5 判断 xhttp_extra 地址是否有变化
+ # 比较 MD5 判断 download_address 地址是否有变化
local md5_new md5_old
md5_new=$(md5sum "$tmp_file" | awk '{print $1}')
if [ -f "$xhttp_addr_file" ]; then
@@ -1504,7 +1503,7 @@ start_xhttp_addr() {
md5_old=""
fi
- # MD5 不同更新 xhttp_extra 地址文件
+ # MD5 不同更新 download_address 地址文件
if [ "$md5_new" != "$md5_old" ]; then
mv -f "$tmp_file" "$xhttp_addr_file"
logger -t ssrplus-xhttp "xhttp_address.txt updated"
diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
index c76db768..a5bb7d9c 100755
--- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
+++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
@@ -22,6 +22,35 @@ local xray_version_val = 0
local node_id = server_section
local remarks = server.alias or ""
+local b64decode = nixio.bin.b64decode
+
+local function base64Decode(text)
+ local raw = text
+ if not text or text == "" then
+ return ''
+ end
+ text = text:gsub("%z", "")
+ text = text:gsub("_", "/")
+ text = text:gsub("-", "+")
+ local mod4 = #text % 4
+ text = text .. string.sub('====', mod4 + 1)
+ local result = b64decode(text)
+ if result then
+ return result:gsub("%z", "")
+ else
+ return raw
+ end
+end
+
+local function cleanEmptyTables(t)
+ if type(t) ~= "table" then return nil end
+ for k, v in pairs(t) do
+ if type(v) == "table" then
+ t[k] = cleanEmptyTables(v)
+ end
+ end
+ return next(t) and t or nil
+end
-- 确保正确判断程序是否存在
local function is_finded(e)
@@ -103,6 +132,25 @@ function socks_http()
}
end
function wireguard()
+ -- 处理 reserved 字段,支持逗号分隔的数字或 Base64 编码
+ local reserved = nil
+ if server.reserved then
+ local bytes = {}
+ if not server.reserved:match("[^%d,]+") then
+ -- 纯数字和逗号,解析为数字列表
+ server.reserved:gsub("%d+", function(b)
+ bytes[#bytes + 1] = tonumber(b)
+ end)
+ else
+ -- Base64 编码的二进制数据
+ local result = base64Decode(server.reserved)
+ for i = 1, #result do
+ bytes[i] = result:byte(i)
+ end
+ end
+ reserved = #bytes > 0 and bytes or nil
+ end
+
outbound_settings = {
secretKey = server.private_key,
address = server.local_addresses,
@@ -116,7 +164,7 @@ function wireguard()
}
},
noKernelTun = (server.kernelmode == "1") and true or false,
- reserved = server.reserved and { server.reserved } or nil,
+ reserved = reserved,
mtu = tonumber(server.mtu)
}
end
@@ -305,14 +353,22 @@ end
mldsa65Verify = (server.enable_mldsa65verify == '1') and server.reality_mldsa65verify or nil,
serverName = server.tls_host
} or nil,
- rawSettings = (server.transport == "raw" or server.transport == "tcp") and {
+ rawSettings = ((server.transport == "raw" or server.transport == "tcp") and (server.tcp_guise and server.tcp_guise ~= "none")) and {
-- tcp
header = {
type = server.tcp_guise,
request = (server.tcp_guise == "http") and {
- -- request
- path = {server.http_path} or {"/"},
- headers = {Host = {server.http_host} or {}}
+ path = server.http_path and (function()
+ local t, r = server.http_path, {}
+ for _, v in ipairs(t) do
+ r[#r + 1] = (v == "" and "/" or v)
+ end
+ return r
+ end)() or {"/"},
+ headers = (server.http_path or server.user_agent) and {
+ Host = server.http_path,
+ ["User-Agent"] = server.user_agent and {server.user_agent} or nil
+ } or nil
} or nil
}
} or nil,
@@ -330,34 +386,45 @@ end
-- ws
host = server.ws_host or server.tls_host or nil,
path = server.ws_path or "/",
+ headers = server.user_agent and {
+ ["User-Agent"] = server.user_agent
+ } or nil,
maxEarlyData = tonumber(server.ws_ed) or nil,
- earlyDataHeaderName = server.ws_ed_header or nil
+ earlyDataHeaderName = server.ws_ed_header or nil,
+ heartbeatPeriod = tonumber(server.ws_heartbeatPeriod) or nil
} or nil,
httpupgradeSettings = (server.transport == "httpupgrade") and {
-- httpupgrade
host = (server.httpupgrade_host or server.tls_host) or nil,
- path = server.httpupgrade_path or ""
+ path = server.httpupgrade_path or "",
+ headers = server.user_agent and {
+ ["User-Agent"] = server.user_agent
+ } or nil
} or nil,
xhttpSettings = (server.transport == "xhttp" or server.transport == "splithttp") and {
-- xhttp
mode = server.xhttp_mode or "auto",
host = (server.xhttp_host or server.tls_host) or nil,
path = server.xhttp_path or "/",
- extra = (server.enable_xhttp_extra == "1" and server.xhttp_extra) and (function()
- local success, parsed = pcall(json.parse, server.xhttp_extra)
- if not success or not parsed then return nil end
- -- 如果包含 "extra" 节,就使用它,否则直接使用 tbl
- local tbl = parsed.extra or parsed
- -- 枚举第1层字段,如果值为空表或 nil 就删除(简单容错)
- for k, v in pairs(tbl) do
- if type(v) == "table" and next(v) == nil then
- tbl[k] = nil
- elseif v == nil then
- tbl[k] = nil
+ extra = (function()
+ local extra = {}
+ -- 解析 xhttp_extra(Base64 编码的 JSON)
+ if (server.enable_xhttp_extra == "1" and server.xhttp_extra) then
+ local ok, parsed = pcall(json.parse, base64Decode(server.xhttp_extra))
+ if ok and type(parsed) == "table" then
+ extra = parsed.extra or parsed -- 取 "extra" 节,若无则整个 parsed
end
end
- return tbl
- end)() or nil
+ -- 处理 User-Agent
+ if server.user_agent and server.user_agent ~= "" then
+ extra.headers = extra.headers or {}
+ if not extra.headers["User-Agent"] and not extra.headers["user-agent"] then
+ extra.headers["User-Agent"] = server.user_agent
+ end
+ end
+ -- 递归清理空表(如空 headers 会被删除)
+ return cleanEmptyTables(extra)
+ end)()
} or nil,
httpSettings = (server.transport == "h2") and {
-- h2
@@ -374,12 +441,13 @@ end
} or nil,
grpcSettings = (server.transport == "grpc") and {
-- grpc
- serviceName = server.serviceName or "",
- multiMode = (server.grpc_mode == "multi") and true or false,
- idle_timeout = tonumber(server.idle_timeout) or nil,
- health_check_timeout = tonumber(server.health_check_timeout) or nil,
+ serviceName = (server.serviceName and server.serviceName ~= "") and server.serviceName or nil,
+ multiMode = (server.grpc_mode == "multi") and true or nil,
+ idle_timeout = server.idle_timeout and (tonumber(server.idle_timeout) < 10 and 10 or tonumber(server.idle_timeout)) or nil,
+ health_check_timeout = server.health_check_timeout and tonumber(server.health_check_timeout) or nil,
permit_without_stream = (server.permit_without_stream == "1") and true or nil,
- initial_windows_size = tonumber(server.initial_windows_size) or nil
+ initial_windows_size = server.initial_windows_size and tonumber(server.initial_windows_size) or nil,
+ user_agent = server.user_agent
} or nil,
hysteriaSettings = (server.v2ray_protocol == "hysteria2") and {
-- hysteria2
@@ -409,35 +477,43 @@ end
keepAlivePeriod = (server.flag_quicparam == "1" and server.keepaliveperiod) and tonumber(server.keepaliveperiod) or nil,
disablePathMTUDiscovery = (server.flag_quicparam == "1" and tostring(server.disablepathmtudiscovery) == "1") and true or nil
} or nil,
- finalmask = (server.transport == "kcp") and {
- udp = (function()
- local t = {}
+ finalmask = (function()
+ local finalmask
+ if server.transport == "kcp" then
local map = {none = "none", srtp = "header-srtp", utp = "header-utp", ["wechat-video"] = "header-wechat",
dtls = "header-dtls", wireguard = "header-wireguard", dns = "header-dns"}
+ local udp = {}
if server.kcp_guise and server.kcp_guise ~= "none" then
local g = { type = map[server.kcp_guise] }
if server.kcp_guise == "dns" and server.kcp_domain and server.kcp_domain ~= "" then
g.settings = { domain = server.kcp_domain }
end
- t[#t + 1] = g
+ udp[#udp+1] = g
end
local c = { type = (server.seed and server.seed ~= "") and "mkcp-aes128gcm" or "mkcp-original" }
if server.seed and server.seed ~= "" then
c.settings = { password = server.seed }
end
- t[#t + 1] = c
- return t
- end)()
- } or (server.flag_obfs == "1" and (server.v2ray_protocol == "hysteria2" and server.obfs_type and server.obfs_type ~= "")) and {
- udp = {
- {
- type = server.obfs_type,
- settings = server.salamander and {
- password = server.salamander
- } or nil
+ udp[#udp+1] = c
+ finalmask = { udp = udp }
+ elseif (server.flag_obfs == "1" and (server.v2ray_protocol == "hysteria2" and server.obfs_type and server.obfs_type ~= "")) then
+ finalmask = {
+ udp = {{
+ type = server.obfs_type,
+ settings = server.salamander and {
+ password = server.salamander
+ } or nil
+ }}
}
- }
- } or nil,
+ end
+ if server.finalmask and server.finalmask ~= "" then
+ local ok, fm = pcall(json.parse, base64Decode(server.finalmask))
+ if ok and type(fm) == "table" then
+ finalmask = fm
+ end
+ end
+ return cleanEmptyTables(finalmask)
+ end)(),
sockopt = {
mark = 250,
tcpFastOpen = (function()
@@ -474,17 +550,15 @@ if xray_fragment.fragment ~= "0" or (xray_fragment.noise ~= "0" and xray_noise.e
settings = {
domainStrategy = (xray_fragment.noise == "1" and xray_noise.enabled == "1") and xray_noise.domainStrategy,
fragment = (xray_fragment.fragment == "1") and {
- packets = (xray_fragment.fragment_packets ~= "") and xray_fragment.fragment_packets or nil,
- length = (xray_fragment.fragment_length ~= "") and xray_fragment.fragment_length or nil,
- interval = (xray_fragment.fragment_interval ~= "") and xray_fragment.fragment_interval or nil,
- maxSplit = (xray_fragment.fragment_maxsplit ~= "") and xray_fragment.fragment_maxsplit or nil
+ packets = (xray_fragment.fragment_packets and xray_fragment.fragment_packets ~= "") and xray_fragment.fragment_packets or nil,
+ length = (xray_fragment.fragment_length and xray_fragment.fragment_length ~= "") and xray_fragment.fragment_length or nil,
+ interval = (xray_fragment.fragment_interval and xray_fragment.fragment_interval ~= "") and xray_fragment.fragment_interval or nil
} or nil,
noises = (xray_fragment.noise == "1" and xray_noise.enabled == "1") and {
{
type = xray_noise.type,
packet = xray_noise.packet,
- delay = xray_noise.delay:find("-") and xray_noise.delay or tonumber(xray_noise.delay),
- applyTo = xray_noise.applyto
+ delay = xray_noise.delay:find("-") and xray_noise.delay or tonumber(xray_noise.delay)
}
} or nil
},
@@ -752,10 +826,10 @@ local tuic = {
certificates = server.certificate and { server.certpath } or nil,
udp_relay_mode = server.udp_relay_mode,
congestion_control = server.congestion_control,
- heartbeat = server.heartbeat and server.heartbeat .. "s" or nil,
- timeout = server.timeout and server.timeout .. "s" or nil,
- gc_interval = server.gc_interval and server.gc_interval .. "s" or nil,
- gc_lifetime = server.gc_lifetime and server.gc_lifetime .. "s" or nil,
+ heartbeat = server.heartbeat and tonumber(server.heartbeat) .. "s" or nil,
+ timeout = server.timeout and tonumber(server.timeout) .. "s" or nil,
+ gc_interval = server.gc_interval and tonumber(server.gc_interval) .. "s" or nil,
+ gc_lifetime = server.gc_lifetime and tonumber(server.gc_lifetime) .. "s" or nil,
alpn = (server.tuic_alpn and server.tuic_alpn ~= "") and (function()
local alpn = {}
string.gsub(server.tuic_alpn, '[^,]+', function(w)
diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/hy2_test.sh b/luci-app-ssr-plus/root/usr/share/shadowsocksr/hy2_test.sh
new file mode 100755
index 00000000..1bac264d
--- /dev/null
+++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/hy2_test.sh
@@ -0,0 +1,175 @@
+#!/bin/sh
+# /usr/share/shadowsocksr/test.sh
+
+CONFIG="shadowsocksr"
+LOCK_PATH=/tmp/lock
+TMP_PATH=/var/etc/ssrplus
+
+uci_get_by_name() {
+ local ret=$(uci -q get $CONFIG.$1.$2 2>/dev/null)
+ echo "${ret:=$3}"
+}
+
+uci_get_by_type() {
+ local ret=$(uci -q get $CONFIG.@$1[0].$2 2>/dev/null)
+ echo "${ret:=$3}"
+}
+
+check_port_exists() {
+ local port=$1
+ local protocol=$2
+ [ -n "$protocol" ] || protocol="tcp,udp"
+ local result=
+ if [ "$protocol" = "tcp" ]; then
+ result=$(netstat -tln | grep -c ":$port ")
+ elif [ "$protocol" = "udp" ]; then
+ result=$(netstat -uln | grep -c ":$port ")
+ elif [ "$protocol" = "tcp,udp" ]; then
+ result=$(netstat -tuln | grep -c ":$port ")
+ fi
+ echo "${result}"
+}
+
+set_cache_var() {
+ local key="${1}"
+ shift 1
+ local val="$@"
+ [ -n "${key}" ] && [ -n "${val}" ] && {
+ sed -i "/${key}=/d" $TMP_PATH/var >/dev/null 2>&1
+ echo "${key}=\"${val}\"" >> $TMP_PATH/var
+ eval ${key}=\"${val}\"
+ }
+}
+
+get_cache_var() {
+ local key="${1}"
+ [ -n "${key}" ] && [ -s "$TMP_PATH/var" ] && {
+ echo $(cat $TMP_PATH/var | grep "^${key}=" | awk -F '=' '{print $2}' | tail -n 1 | awk -F'"' '{print $2}')
+ }
+}
+
+#uci_get_by_port() {
+# local port=$1
+# while netstat -tuln 2>/dev/null | grep -q ":${port} "; do
+# port=$((port + 1))
+# done
+# echo $port
+
+uci_get_by_port() {
+ local default_start_port=2001
+ local min_port=1025
+ local max_port=49151
+ local port="$1"
+ local protocol=$(echo "$2" | tr 'A-Z' 'a-z')
+ local LOCK_FILE="${LOCK_PATH}/${CONFIG}_get_prot.lock"
+ while ! mkdir "$LOCK_FILE" 2>/dev/null; do
+ sleep 1
+ done
+ if [ "$port" = "auto" ]; then
+ local now last_time diff last_port
+ now=$(date +%s 2>/dev/null)
+ last_time=$(get_cache_var "last_get_new_port_time")
+ if [ -n "$now" ] && [ -n "$last_time" ]; then
+ diff=$(expr "$now" - "$last_time")
+ [ "$diff" -lt 0 ] && diff=$(expr 0 - "$diff")
+ else
+ diff=999
+ fi
+ if [ "$diff" -gt 10 ]; then
+ port=$default_start_port
+ else
+ last_port=$(get_cache_var "last_get_new_port_auto")
+ if [ -n "$last_port" ]; then
+ port=$(expr "$last_port" + 1)
+ else
+ port=$default_start_port
+ fi
+ fi
+ fi
+ [ "$port" -lt $min_port -o "$port" -gt $max_port ] && port=$default_start_port
+ local start_port="$port"
+ while :; do
+ if [ "$(check_port_exists "$port" "$protocol")" = 0 ]; then
+ break
+ fi
+ port=$(expr "$port" + 1)
+ if [ "$port" -gt $max_port ]; then
+ port=$min_port
+ fi
+ [ "$port" = "$start_port" ] && {
+ rmdir "$LOCK_FILE" 2>/dev/null
+ return 1
+ }
+ done
+ if [ "$1" = "auto" ]; then
+ set_cache_var "last_get_new_port_auto" "$port"
+ [ -n "$now" ] && set_cache_var "last_get_new_port_time" "$now"
+ fi
+ rmdir "$LOCK_FILE" 2>/dev/null
+ echo "$port"
+}
+
+url_test_hy2() {
+ local node_id=$1
+
+ # 读取配置
+ local server=$(uci_get_by_name ${node_id} server)
+ local port=$(uci_get_by_name ${node_id} server_port)
+ local auth=$(uci_get_by_name ${node_id} hy2_auth)
+ local tls=$(uci_get_by_name ${node_id} tls)
+ local insecure=$(uci_get_by_name ${node_id} insecure)
+ local tls_host=$(uci_get_by_name ${node_id} tls_host)
+
+ # 获取本地端口
+ # local tmp_port=$(uci_get_by_port 48900 tcp,udp)
+ local tmp_port=$(uci_get_by_port auto tcp,udp)
+
+ # 生成Hysteria2配置文件
+ local config_file="/tmp/hy2_test_${node_id}.yaml"
+ cat > "$config_file" <<-EOF
+ server: ${server}:${port}
+ auth: "${auth}"
+ tls:
+ insecure: true
+ EOF
+
+ # 如果 tls_host 非空,动态添加 sni 行
+ [ -n "$tls_host" ] && echo " sni: \"${tls_host}\"" >> "$config_file"
+
+ # 追加 socks5 监听配置
+ cat >> "$config_file" <<-EOF
+ socks5:
+ listen: 127.0.0.1:${tmp_port}
+ EOF
+
+ # echo "Debug: 配置文件已生成: $config_file" >&2
+
+ # 启动Hysteria2客户端
+ hysteria client --disable-update-check -c "$config_file" >/dev/null 2>&1 &
+ local pid=$!
+ echo $pid > "/tmp/hy2_test_${node_id}.pid"
+
+ # 等待端口启动
+ sleep 1
+
+ # 测试代理
+ # local result=$(curl --connect-timeout 3 --max-time 3 -s -o /dev/null -I -w "%{http_code}:%{time_pretransfer}" --socks5 127.0.0.1:${tmp_port} "${probeUrl}" 2>/dev/null)
+ local curlx="socks5h://127.0.0.1:${tmp_port}"
+ local probeUrl=$(uci_get_by_type server_subscribe url_test_url https://www.google.com/generate_204)
+ local result=$(curl --connect-timeout 3 --max-time 5 -o /dev/null -I -skL -w "%{http_code}:%{time_pretransfer}" -x ${curlx} "${probeUrl}" 2>/dev/null)
+
+ # 清理
+ # kill -9 $pid 2>/dev/null
+ local pid_file="/tmp/hy2_test_${node_id}.pid"
+ [ -s "$pid_file" ] && kill -9 "$(head -n 1 "$pid_file")" >/dev/null 2>&1
+ pgrep -af "hysteria.*${config_file}" | awk '! /test\.sh/{print $1}' | xargs kill -9 >/dev/null 2>&1
+ rm -f "$config_file" "$pid_file"
+
+ echo $result
+}
+
+case $1 in
+ url_test_hy2)
+ url_test_hy2 $2
+ ;;
+esac
\ No newline at end of file
diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/shadowsocksr.config b/luci-app-ssr-plus/root/usr/share/shadowsocksr/shadowsocksr.config
index 8fd94d85..177caac0 100644
--- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/shadowsocksr.config
+++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/shadowsocksr.config
@@ -28,6 +28,7 @@ config server_subscribe
option auto_update_day_time '2'
option auto_update_min_time '0'
option ss_type 'ss-rust'
+ option url_test_url 'https://www.google.com/generate_204'
option user_agent 'v2rayN/9.99'
option xray_hy2_type 'hysteria2'
option filter_words '过期/套餐/剩余/QQ群/官网/防失联/回国'
diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua
index 9ee5a78d..af1bc987 100755
--- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua
+++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua
@@ -16,6 +16,7 @@ local tinsert = table.insert
local ssub, slen, schar, sbyte, sformat, sgsub = string.sub, string.len, string.char, string.byte, string.format, string.gsub
local jsonParse, jsonStringify = luci.jsonc.parse, luci.jsonc.stringify
local b64decode = nixio.bin.b64decode
+local b64encode = nixio.bin.b64encode
local URL = require "url"
local cache = {}
local nodeResult = setmetatable({}, {__index = cache}) -- update result
@@ -34,20 +35,34 @@ local ss_type = ucic:get_first(name, 'server_subscribe', 'ss_type', 'ss-rust')
-- 根据 ss_type 选择对应的程序
local ss_program = "sslocal"
if ss_type == "ss-rust" then
- ss_program = "sslocal" -- Rust 版本使用 sslocal
+ ss_program = "sslocal"
elseif ss_type == "ss-libev" then
- ss_program = "ss-redir" -- Libev 版本使用 ss-redir
+ ss_program = "ss-redir"
+elseif ss_type == "v2ray" then
+ ss_program = "xray"
end
-- 从 UCI 配置读取 xray_hy2_type 设置
local xray_hy2_type = ucic:get_first(name, 'server_subscribe', 'xray_hy2_type', 'hysteria2')
local xray_hy2_program = "hysteria"
-if xray_hy2_type == "xray" then
+if xray_hy2_type == "v2ray" then
xray_hy2_program = "xray" -- Hysteria2 使用 Xray
elseif xray_hy2_type == "hysteria2" then
xray_hy2_program = "hysteria" -- Hysteria2 使用 Hysteria
end
-local v2_ss = luci.sys.exec('type -t -p ' .. ss_program .. ' 2>/dev/null') ~= "" and "ss" or "v2ray"
-local has_ss_type = luci.sys.exec('type -t -p ' .. ss_program .. ' 2>/dev/null') ~= "" and ss_type
+local v2_ss_exists = luci.sys.exec('type -t -p ' .. ss_program .. ' 2>/dev/null') ~= ""
+-- 初始化变量
+local v2_ss = nil
+local has_v2_ss_type = nil
+if v2_ss_exists then
+ if ss_type == "v2ray" then
+ -- 使用 Xray
+ v2_ss = "v2ray"
+ has_v2_ss_type = "shadowsocks"
+ else
+ -- 使用 SS (rust 或 libev)
+ v2_ss = "ss"
+ end
+end
local v2_tj = luci.sys.exec('type -t -p trojan') ~= "" and "trojan" or "v2ray"
-- 检查程序是否存在
local program_exists = luci.sys.exec('type -t -p ' .. xray_hy2_program .. ' 2>/dev/null') ~= ""
@@ -176,6 +191,21 @@ local function base64Decode(text)
return raw
end
end
+local function base64Encode(text)
+ if not text or text == "" then
+ return ''
+ end
+ local result = b64encode(text)
+ if result then
+ result = result:gsub("%z", "")
+ result = result:gsub("/", "_")
+ result = result:gsub("+", "-")
+ result = result:gsub("=", "")
+ return result
+ else
+ return text
+ end
+end
-- 检查数组(table)中是否存在某个字符值
-- https://www.04007.cn/article/135.html
local function checkTabValue(tab)
@@ -196,7 +226,7 @@ local function isCompleteJSON(str)
return success
end
-- 处理数据
-local function processData(szType, content)
+local function processData(szType, content, cfgid)
local result = {type = szType, local_port = 1234, kcp_param = '--nocomp'}
-- 检查JSON的格式如不完整丢弃
if not (szType == "sip008" or szType == "ssd") then
@@ -215,17 +245,24 @@ local function processData(szType, content)
-- log(k.."="..v)
-- end
- -- 如果 hy2 程序未安装则跳过订阅
- if not (hy2_type or has_xray_hy2_type) then
+ -- 如果 hy2 或 Xray 程序未安装则跳过订阅
+ if not hy2_type then
return nil
end
if xray_hy2_type == "hysteria2" then
- if params.protocol then
+ if params.protocol and params.protocol ~= "" then
result.flag_transport = "1"
- result.transport_protocol = params.protocol or "udp"
+ result.transport_protocol = params.protocol
+ else
+ result.flag_transport = "1"
+ result.transport_protocol = "udp"
end
- if params.pinSHA256 then
+ if params.fm and params.fm ~= "" then
+ result.enable_finalmask = "1"
+ result.finalmask = base64Encode(params.fm)
+ end
+ if params.pinSHA256 and params.pinSHA256 ~= "" then
result.pinsha256 = params.pinSHA256
end
else
@@ -233,7 +270,6 @@ local function processData(szType, content)
end
result.alias = url.fragment and UrlDecode(url.fragment) or nil
- result.xray_hy2_type = xray_hy2_type
result.type = hy2_type
result.server = url.host
result.server_port = url.port or 443
@@ -379,14 +415,14 @@ local function processData(szType, content)
-- 检查 extra 参数是否存在且非空
if info.extra and info.extra ~= "" then
result.enable_xhttp_extra = "1"
- result.xhttp_extra = info.extra
+ result.xhttp_extra = base64Encode(info.extra)
end
-- 尝试解析 JSON 数据
local success, Data = pcall(jsonParse, info.extra or "")
if success and type(Data) == "table" then
local address = (Data.extra and Data.extra.downloadSettings and Data.extra.downloadSettings.address)
or (Data.downloadSettings and Data.downloadSettings.address)
- result.download_address = (address and address ~= "") and address or nil
+ result.download_address = (address and address ~= "") and address:gsub("^%[", ""):gsub("%]$", "")
else
-- 如果解析失败,清空下载地址
result.download_address = nil
@@ -430,6 +466,11 @@ local function processData(szType, content)
if info.security then
result.security = info.security
end
+ if info.fm and info.fm ~= "" then
+ info.fm = UrlDecode(info.fm)
+ result.enable_finalmask = "1"
+ result.finalmask = base64Encode(info.fm)
+ end
if info.tls == "tls" or info.tls == "1" then
result.tls = "1"
result.fingerprint = info.fp
@@ -490,7 +531,12 @@ local function processData(szType, content)
end
end
- if not params.type or params.type == "" then
+ if params.tfo and params.tfo ~= "" then
+ -- 处理 fast open 参数
+ result.fast_open = params.tfo
+ end
+
+ if v2_ss ~= "v2ray" then
local is_old_format = find_index:find("@") and not find_index:find("://.*@")
local old_base64, host_port, userinfo, server, port, method, password
@@ -557,23 +603,17 @@ local function processData(szType, content)
end
-- 如果 SS 程序未安装则跳过订阅
- if not (v2_ss or has_ss_type) then
+ if not v2_ss then
return nil
end
-- 填充 result
result.type = v2_ss
- result.has_ss_type = has_ss_type
result.encrypt_method_ss = method
result.password = password
result.server = server
result.server_port = port
- if params.tfo then
- -- 处理 fast open 参数
- result.fast_open = params.tfo
- end
-
-- 插件处理
if params.plugin then
local plugin_info = UrlDecode(params.plugin)
@@ -638,9 +678,13 @@ local function processData(szType, content)
local url = URL.parse("http://" .. info)
local params = url.query
- v2_ss = "v2ray"
+ -- 如果 Xray 程序未安装则跳过订阅
+ if not v2_ss then
+ return nil
+ end
+
result.type = v2_ss
- result.v2ray_protocol = "shadowsocks"
+ result.v2ray_protocol = has_v2_ss_type
result.server = url.host
result.server_port = url.port
@@ -655,6 +699,11 @@ local function processData(szType, content)
result.encrypt_method_ss = params.encryption or "none"
end
+ if params.udp then
+ -- 处理 udp 参数
+ result.uot = params.udp
+ end
+
result.transport = params.type or "raw"
if result.transport == "tcp" then
result.transport = "raw"
@@ -690,6 +739,11 @@ local function processData(szType, content)
result.enable_ech = "1"
result.ech_config = params.ech
end
+ -- 检查 finalmaskg 参数是否存在且非空
+ if params.fm and params.fm ~= "" then
+ result.enable_finalmask = "1"
+ result.finalmaskg = base64Encode(params.fm)
+ end
-- 检查 pqv 参数是否存在且非空
if params.pqv and params.pqv ~= "" then
result.enable_mldsa65verify = "1"
@@ -714,14 +768,14 @@ local function processData(szType, content)
-- 检查 extra 参数是否存在且非空
if params.extra and params.extra ~= "" then
result.enable_xhttp_extra = "1"
- result.xhttp_extra = params.extra
+ result.xhttp_extra = base64Encode(params.extra)
end
-- 尝试解析 JSON 数据
local success, Data = pcall(jsonParse, params.extra or "")
if success and type(Data) == "table" then
local address = (Data.extra and Data.extra.downloadSettings and Data.extra.downloadSettings.address)
or (Data.downloadSettings and Data.downloadSettings.address)
- result.download_address = address and address ~= "" and address or nil
+ result.download_address = (address and address ~= "") and address:gsub("^%[", ""):gsub("%]$", "")
else
-- 如果解析失败,清空下载地址
result.download_address = nil
@@ -760,8 +814,12 @@ local function processData(szType, content)
end
elseif szType == "sip008" then
result.type = v2_ss
- result.v2ray_protocol = (v2_ss == "v2ray") and "shadowsocks" or nil
- result.has_ss_type = has_ss_type
+ if v2_ss ~= "v2ray" then
+ result.has_ss_type = has_ss_type
+ else
+ result.xray_has_ss_type = "v2ray"
+ result.v2ray_protocol = has_v2_ss_type
+ end
result.server = content.server
result.server_port = content.server_port
result.password = content.password
@@ -774,8 +832,12 @@ local function processData(szType, content)
end
elseif szType == "ssd" then
result.type = v2_ss
- result.v2ray_protocol = (v2_ss == "v2ray") and "shadowsocks" or nil
- result.has_ss_type = has_ss_type
+ if v2_ss ~= "v2ray" then
+ result.has_ss_type = has_ss_type
+ else
+ result.xray_has_ss_type = "v2ray"
+ result.v2ray_protocol = has_v2_ss_type
+ end
result.server = content.server
result.server_port = content.port
result.password = content.password
@@ -883,6 +945,11 @@ local function processData(szType, content)
result.enable_ech = "1"
result.ech_config = params.ech
end
+ -- 检查 finalmaskg 参数是否存在且非空
+ if params.fm and params.fm ~= "" then
+ result.enable_finalmask = "1"
+ result.finalmaskg = base64Encode(params.fm)
+ end
-- 处理传输协议
result.transport = params.type or "raw" -- 默认传输协议为 raw
if result.transport == "tcp" then
@@ -910,14 +977,14 @@ local function processData(szType, content)
-- 检查 extra 参数是否存在且非空
if params.extra and params.extra ~= "" then
result.enable_xhttp_extra = "1"
- result.xhttp_extra = params.extra
+ result.xhttp_extra = base64Encode(params.extra)
end
-- 尝试解析 JSON 数据
local success, Data = pcall(jsonParse, params.extra or "")
if success and type(Data) == "table" then
local address = (Data.extra and Data.extra.downloadSettings and Data.extra.downloadSettings.address)
or (Data.downloadSettings and Data.downloadSettings.address)
- result.download_address = address and address ~= "" and address or nil
+ result.download_address = (address and address ~= "") and address:gsub("^%[", ""):gsub("%]$", "")
else
-- 如果解析失败,清空下载地址
result.download_address = nil
@@ -1007,6 +1074,18 @@ local function processData(szType, content)
end
end
+ -- ECH 参数(TLS 才有)
+ if security == "tls" and params.ech and params.ech ~= "" then
+ result.enable_ech = "1"
+ result.ech_config = params.ech
+ end
+
+ -- 处理 finalmask 参数
+ if params.fm and params.fm ~= "" then
+ result.enable_finalmask = "1"
+ result.finalmask = base64Encode(params.fm)
+ end
+
-- 处理 pinsha256 参数
if params.pcs and params.pcs ~= "" then
result.tls_CertSha = params.pcs
@@ -1023,19 +1102,13 @@ local function processData(szType, content)
result.reality_shortid = params.sid
result.reality_spiderx = params.spx and UrlDecode(params.spx) or nil
- -- PQ 验证参数
+ -- PQV 验证参数
if params.pqv and params.pqv ~= "" then
result.enable_mldsa65verify = "1"
result.reality_mldsa65verify = params.pqv
end
end
- -- ECH 参数(TLS 才有)
- if security == "tls" and params.ech and params.ech ~= "" then
- result.enable_ech = "1"
- result.ech_config = params.ech
- end
-
-- 各种传输类型
if result.transport == "ws" then
result.ws_host = (result.tls ~= "1" and result.reality ~= "1") and (params.host and UrlDecode(params.host)) or nil
@@ -1055,13 +1128,13 @@ local function processData(szType, content)
end
if params.extra and params.extra ~= "" then
result.enable_xhttp_extra = "1"
- result.xhttp_extra = params.extra
+ result.xhttp_extra = base64Encode(params.extra)
end
local success, Data = pcall(jsonParse, params.extra or "")
if success and type(Data) == "table" then
local address = (Data.extra and Data.extra.downloadSettings and Data.extra.downloadSettings.address)
or (Data.downloadSettings and Data.downloadSettings.address)
- result.download_address = address and address ~= "" and address or nil
+ result.download_address = (address and address ~= "") and address:gsub("^%[", ""):gsub("%]$", "")
else
result.download_address = nil
end
@@ -1254,20 +1327,27 @@ local function write_new_md5(groupHash, md5)
end
-- curl
-local function curl(url)
- -- 清理 URL 中的隐藏字符
- url = url:gsub("%s+$", ""):gsub("^%s+", ""):gsub("%z", "")
-
- -- 构建curl命令(确保 user_agent 为空时不添加 -A 参数)
+local function curl(url, user_agent)
+ -- 清理 URL 中的隐藏字符和前后空白
+ url = url:gsub("%s+$", ""):gsub("^%s+", ""):gsub("%z", ""):gsub("[\r\n]", "")
+ -- 处理 user_agent 参数
+ local ua_opt = ""
+ if user_agent and user_agent ~= "" then
+ -- 转义双引号,防止破坏 -A 参数
+ local safe_ua = user_agent:gsub("[\r\n]", ""):gsub('[\\"`$]', '\\%0') -- 安全转义
+ ua_opt = '-A "' .. safe_ua .. '"'
+ end
+ -- 安全转义 URL:用单引号包裹,并转义内部的单引号
+ local safe_url = "'" .. url:gsub("'", "'\\''") .. "'"
local cmd = string.format(
- 'curl -sSL --connect-timeout 20 --max-time 30 --retry 3 %s --insecure --location "%s"',
- user_agent ~= "" and ('-A "' .. user_agent .. '"') or "", -- 添加 or "" 处理 nil 情况
- url:gsub('["$`\\]', '\\%0') -- 安全转义
+ 'curl -sSL --connect-timeout 20 --max-time 30 --retry 3 -H "Accept-Encoding: identity" %s --insecure --location %s',
+ ua_opt,
+ safe_url
)
-
+ -- 执行命令并获取输出
local stdout = luci.sys.exec(cmd)
- stdout = trim(stdout)
- local md5 = md5_string(stdout)
+ stdout = trim(stdout) -- 确保 trim 函数存在
+ local md5 = md5_string(stdout) -- 确保 md5_string 函数存在
return stdout, md5
end
@@ -1498,13 +1578,43 @@ local execute = function()
end
end
end)
- for k, v in ipairs(nodeResult) do
- for kk, vv in ipairs(v) do
+ -- 1583-1620 行为生成 sid
+ -- 记录已使用编号
+ local used_sid = {}
+ local next_sid = 1
+ -- 扫描已有 section
+ ucic:foreach(name, uciType, function(s)
+ local num = s[".name"]:match("^cfg(%x%x)") -- 提取两位十六进制序号
+ if num then
+ local n = tonumber(num, 16)
+ used_sid[n] = true
+ end
+ end)
+ -- 获取下一个可用编号(O(1))
+ local function get_next_sid()
+ while used_sid[next_sid] do
+ next_sid = next_sid + 1
+ end
+ used_sid[next_sid] = true
+ return next_sid
+ end
+ for _, v in ipairs(nodeResult) do
+ for _, vv in ipairs(v) do
if not vv._ignore then
- local section = ucic:add(name, uciType)
- ucic:tset(name, section, vv)
- ucic:set(name, section, "switch_enable", switch)
- add = add + 1
+ local sid = ucic:add(name, uciType)
+ if sid then
+ local suffix = sid:sub(-4)
+ ucic:delete(name, sid)
+ local id = get_next_sid()
+ local cfgid = string.format("cfg%02x%s", id, suffix)
+ local section = ucic:section(name, uciType, cfgid)
+ if section then
+ ucic:tset(name, section, vv)
+ ucic:set(name, section, "switch_enable", switch)
+ add = add + 1
+ end
+ end
+
end
end
end