diff --git a/fastnet/Makefile b/fastnet/Makefile
index 07ee9ce06..75d2ab1d9 100644
--- a/fastnet/Makefile
+++ b/fastnet/Makefile
@@ -9,8 +9,8 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_FASTNET:=$(ARCH)
PKG_NAME:=fastnet
-PKG_VERSION:=kaiplus-runtime-v1.0.9
-PKG_RELEASE:=3
+PKG_VERSION:=0.7.7
+PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/fastnet-runtime-v$(PKG_VERSION)/
diff --git a/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js b/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js
index 6a9af0794..94a79be53 100644
--- a/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js
+++ b/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js
@@ -1422,7 +1422,7 @@ return view.extend({
});
});
- return E('div', { class: 'cbi-map' },
+ return E('div', {},
E('fieldset', { class: 'cbi-section' }, [
E('p', { id: 'service_status' }, _('Collecting data ...'))
])
diff --git a/luci-app-frps/htdocs/luci-static/resources/view/frps.js b/luci-app-frps/htdocs/luci-static/resources/view/frps.js
index 100a8adb5..83b08aa14 100644
--- a/luci-app-frps/htdocs/luci-static/resources/view/frps.js
+++ b/luci-app-frps/htdocs/luci-static/resources/view/frps.js
@@ -982,7 +982,7 @@ return view.extend({
});
});
- return E('div', { class: 'cbi-map' },
+ return E('div', {},
E('fieldset', { class: 'cbi-section' }, [
E('p', { id: 'service_status' }, _('Collecting data ...'))
])
diff --git a/luci-app-fwlive/Makefile b/luci-app-fwlive/Makefile
index cd1aba68d..570a2569d 100644
--- a/luci-app-fwlive/Makefile
+++ b/luci-app-fwlive/Makefile
@@ -12,7 +12,7 @@ LUCI_DEPENDS:=+luci-base +logd +jsonfilter
LUCI_PKGARCH:=all
PKG_VERSION:=0.1.41
-PKG_RELEASE:=12
+PKG_RELEASE:=13
# Reproducible build: honor SOURCE_DATE_EPOCH from the build environment (set by docker-sdk.sh / CI).
ifdef SOURCE_DATE_EPOCH
diff --git a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/log.js b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/log.js
index 2c1394481..a72080d0c 100644
--- a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/log.js
+++ b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/log.js
@@ -360,6 +360,26 @@ return baseclass.extend({
].join('|');
},
+ extractAddrs: function (kv) {
+ return {
+ src: kv.SRC || '',
+ dst: kv.DST || '',
+ sport: kv.SPT || '',
+ dport: kv.DPT || ''
+ };
+ },
+
+ extractIfaces: function (kv) {
+ const ifaceIn = kv.IN || '';
+ const ifaceOut = kv.OUT || '';
+ return {
+ ifaceIn: ifaceIn,
+ ifaceOut: ifaceOut,
+ iface: ifaceIn || ifaceOut || '',
+ dir: ifaceIn && ifaceOut ? 'forward' : ifaceIn ? 'in' : ifaceOut ? 'out' : 'unknown'
+ };
+ },
+
normalizeEntry: function (entry) {
const kv = this.parseKeyValueLog(entry.msg || '');
const tsUnix = this.timestampUnix(entry);
@@ -371,14 +391,8 @@ return baseclass.extend({
this.detectAction(entry.msg || '')
);
const action = this.normalizeAction(actionRaw);
- const src = kv.SRC || '';
- const dst = kv.DST || '';
- const sport = kv.SPT || '';
- const dport = kv.DPT || '';
- const ifaceIn = kv.IN || '';
- const ifaceOut = kv.OUT || '';
- const iface = ifaceIn || ifaceOut || '';
- const dir = ifaceIn && ifaceOut ? 'forward' : ifaceIn ? 'in' : ifaceOut ? 'out' : 'unknown';
+ const addrs = this.extractAddrs(kv);
+ const ifs = this.extractIfaces(kv);
const flags = this.parseFlags(entry.msg || '', kv);
const length = this.parseLength(kv);
const ruleHint = this.parseRuleHint(entry.msg || '');
@@ -389,13 +403,13 @@ return baseclass.extend({
entry,
tsUnix,
action,
- src,
- dst,
- sport,
- dport,
+ addrs.src,
+ addrs.dst,
+ addrs.sport,
+ addrs.dport,
proto,
- ifaceIn,
- ifaceOut
+ ifs.ifaceIn,
+ ifs.ifaceOut
),
log_id: entry && entry.id != null ? Number(entry.id) : null,
timestamp: tsUnix,
@@ -404,15 +418,15 @@ return baseclass.extend({
rule_label: ruleLabel,
action: action,
action_raw: actionRaw,
- interface: iface,
- interface_in: ifaceIn,
- interface_out: ifaceOut,
- direction: dir,
+ interface: ifs.iface,
+ interface_in: ifs.ifaceIn,
+ interface_out: ifs.ifaceOut,
+ direction: ifs.dir,
proto: proto,
- src: src,
- sport: sport,
- dst: dst,
- dport: dport,
+ src: addrs.src,
+ sport: addrs.sport,
+ dst: addrs.dst,
+ dport: addrs.dport,
flags: flags,
length: length,
message: entry.msg || ''
@@ -467,42 +481,42 @@ return baseclass.extend({
return p.negate ? !hit : hit;
},
+ matchesQueryField: function (row, spec) {
+ const p = this.parseFilterValue(spec);
+ if (!p.value) return true;
+
+ const keys = Object.keys(row);
+ const parts = [];
+ for (let i = 0; i < keys.length; i++) parts.push(row[keys[i]]);
+ const blob = parts.join(' ').toLowerCase();
+ const hit = blob.indexOf(p.value.toLowerCase()) !== -1;
+ return p.negate ? !hit : hit;
+ },
+
+ matchesActionField: function (row, spec) {
+ const p = this.parseFilterValue(spec);
+ if (!p.value) return true;
+
+ const want = p.value.toLowerCase();
+ const hit =
+ row.action === want || (row.action_raw || '').toUpperCase() === p.value.toUpperCase();
+ return p.negate ? !hit : hit;
+ },
+
+ matchesInterfaceField: function (row, spec) {
+ const p = this.parseFilterValue(spec);
+ if (!p.value) return true;
+
+ const iface = p.value;
+ const hit =
+ row.interface === iface || row.interface_in === iface || row.interface_out === iface;
+ return p.negate ? !hit : hit;
+ },
+
matchesFilter: function (row, filters) {
- if (filters.q) {
- const p = this.parseFilterValue(filters.q);
- if (p.value) {
- const keys = Object.keys(row);
- const parts = [];
- for (let i = 0; i < keys.length; i++) parts.push(row[keys[i]]);
- const blob = parts.join(' ').toLowerCase();
- const hit = blob.indexOf(p.value.toLowerCase()) !== -1;
- if (p.negate ? hit : !hit) return false;
- }
- }
-
- if (filters.action) {
- const p = this.parseFilterValue(filters.action);
- if (p.value) {
- const want = p.value.toLowerCase();
- const hit =
- row.action === want ||
- (row.action_raw || '').toUpperCase() === p.value.toUpperCase();
- if (p.negate ? hit : !hit) return false;
- }
- }
-
- if (filters.interface) {
- const p = this.parseFilterValue(filters.interface);
- if (p.value) {
- const iface = p.value;
- const hit =
- row.interface === iface ||
- row.interface_in === iface ||
- row.interface_out === iface;
- if (p.negate ? hit : !hit) return false;
- }
- }
-
+ if (filters.q && !this.matchesQueryField(row, filters.q)) return false;
+ if (filters.action && !this.matchesActionField(row, filters.action)) return false;
+ if (filters.interface && !this.matchesInterfaceField(row, filters.interface)) return false;
if (filters.proto && !this.matchesExactField(row.proto, filters.proto)) return false;
if (filters.src && !this.matchesTextField(row.src, filters.src)) return false;
if (filters.dst && !this.matchesTextField(row.dst, filters.dst)) return false;
diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile
index 3d8b2dae4..8af62e7e2 100644
--- a/luci-app-passwall/Makefile
+++ b/luci-app-passwall/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
PKG_VERSION:=26.9.9
-PKG_RELEASE:=268
+PKG_RELEASE:=269
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall/htdocs/luci-static/resources/view/passwall/func.js b/luci-app-passwall/htdocs/luci-static/resources/view/passwall/func.js
index 26eeabb7e..3b5a43bce 100644
--- a/luci-app-passwall/htdocs/luci-static/resources/view/passwall/func.js
+++ b/luci-app-passwall/htdocs/luci-static/resources/view/passwall/func.js
@@ -61,14 +61,11 @@ function getOption(config, section, opt) {
const id = `cbid.${config}.${section}.${opt}`;
obj = document.getElementsByName(id)[0] || document.getElementById(id);
if (obj) {
+ //lua luci combobox
const combobox = document.getElementById('cbi.combobox.' + id);
if (combobox) {
obj.combobox = combobox;
}
- const div = document.getElementById(id);
- if (div && div.getElementsByTagName("li").length > 0) {
- obj = div;
- }
return obj;
} else {
return null;
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/1_sing-box.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/1_sing-box.lua
index 3008a5143..468484cba 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/1_sing-box.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/1_sing-box.lua
@@ -620,6 +620,7 @@ if singbox_tags:find("with_utls") then
o:depends({ protocol = "shadowsocks", tls = true })
o:depends({ protocol = "trojan", tls = true })
o:depends({ protocol = "anytls", tls = true })
+ o:depends({ protocol = "http", tls = true })
o = s:option(Value, "reality_publicKey", translate("Public Key"))
o:depends({ reality = true })
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/2_xray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/2_xray.lua
index 5684127dd..52d5df673 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/2_xray.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/2_xray.lua
@@ -401,6 +401,7 @@ o = s:option(Flag, "tls", translate("TLS"))
o.default = 0
o:depends({ protocol = "vmess" })
o:depends({ protocol = "vless" })
+o:depends({ protocol = "http" })
o:depends({ protocol = "trojan" })
o:depends({ protocol = "shadowsocks" })
@@ -719,6 +720,8 @@ o:depends({ protocol = "vless", transport = "raw" })
o:depends({ protocol = "vless", transport = "ws" })
o:depends({ protocol = "vless", transport = "grpc" })
o:depends({ protocol = "vless", transport = "httpupgrade" })
+o:depends({ protocol = "http" })
+o:depends({ protocol = "socks" })
o:depends({ protocol = "shadowsocks" })
o:depends({ protocol = "trojan" })
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/2_xray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/2_xray.lua
index 02dfc68d1..078de237b 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/2_xray.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/2_xray.lua
@@ -206,13 +206,18 @@ o.validate = function(self, value, t)
end
o:depends({ protocol = "vmess" })
o:depends({ protocol = "vless" })
+o:depends({ protocol = "http" })
o:depends({ protocol = "shadowsocks" })
o:depends({ protocol = "trojan" })
-- [[ REALITY部分 ]] --
o = s:option(Flag, "reality", translate("REALITY"))
o.default = 0
-o:depends({ tls = true })
+o:depends({ tls = true, transport = "raw" })
+o:depends({ tls = true, transport = "ws" })
+o:depends({ tls = true, transport = "grpc" })
+o:depends({ tls = true, transport = "httpupgrade" })
+o:depends({ tls = true, transport = "xhttp" })
o = s:option(Value, "reality_private_key", translate("Private Key"))
o:depends({ reality = true })
diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua
index 6c0b8da4f..ee91ac350 100644
--- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua
+++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua
@@ -481,9 +481,9 @@ function gen_outbound(flag, node, tag, proxy_table)
obfs = node.hysteria_obfs,
auth = (node.hysteria_auth_type == "base64") and node.hysteria_auth_password or nil,
auth_str = (node.hysteria_auth_type == "string") and node.hysteria_auth_password or nil,
- recv_window_conn = tonumber(node.hysteria_recv_window_conn), --1.14 将变更为 stream_receive_window
- recv_window = tonumber(node.hysteria_recv_window), --1.14 将变更为 connection_receive_window
- disable_mtu_discovery = (node.hysteria_disable_mtu_discovery == "1") and true or false, --1.14 将变更为 disable_path_mtu_discovery
+ stream_receive_window = tonumber(node.hysteria_recv_window_conn),
+ connection_receive_window = tonumber(node.hysteria_recv_window),
+ disable_path_mtu_discovery = (node.hysteria_disable_mtu_discovery == "1") and true or false,
tls = tls
}
end
@@ -910,10 +910,10 @@ function gen_config_server(node)
down_mbps = tonumber(node.hysteria_down_mbps),
obfs = node.hysteria_obfs,
users = users,
- recv_window_conn = node.hysteria_recv_window_conn and tonumber(node.hysteria_recv_window_conn) or nil, --1.14 to stream_receive_window
- recv_window_client = node.hysteria_recv_window_client and tonumber(node.hysteria_recv_window_client) or nil, --1.14 to connection_receive_window
- max_conn_client = node.hysteria_max_conn_client and tonumber(node.hysteria_max_conn_client) or nil, --1.14 to max_concurrent_streams
- disable_mtu_discovery = (node.hysteria_disable_mtu_discovery == "1") and true or false, --1.14 to disable_path_mtu_discover
+ stream_receive_window = node.hysteria_recv_window_conn and tonumber(node.hysteria_recv_window_conn) or nil,
+ connection_receive_window = node.hysteria_recv_window_client and tonumber(node.hysteria_recv_window_client) or nil,
+ max_concurrent_streams = node.hysteria_max_conn_client and tonumber(node.hysteria_max_conn_client) or nil,
+ disable_path_mtu_discover = (node.hysteria_disable_mtu_discovery == "1") and true or false,
tls = tls
}
end
diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua
index 519497ddd..73c890179 100644
--- a/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -120,6 +120,10 @@ function gen_outbound(flag, node, tag, proxy_table)
node.stream_security = "tls"
end
+ if node.protocol == "http" and node.stream_security == "tls" then
+ node.transport = "raw"
+ end
+
if remarks then
tag = tag .. ":" .. remarks
end
@@ -138,7 +142,7 @@ function gen_outbound(flag, node, tag, proxy_table)
xudpConcurrency = (node.mux == "1" and ((node.xudp_concurrency) and tonumber(node.xudp_concurrency) or 8)) or nil
} or nil,
-- 底层传输配置
- streamSettings = (node.streamSettings or dialer_proxy_tag or node.protocol == "vmess" or node.protocol == "vless" or node.protocol == "socks" or node.protocol == "shadowsocks" or node.protocol == "trojan" or node.protocol == "hysteria") and {
+ streamSettings = (node.streamSettings or dialer_proxy_tag or node.protocol == "vmess" or node.protocol == "vless" or node.protocol == "socks" or node.protocol == "shadowsocks" or node.protocol == "trojan" or node.protocol == "hysteria" or node.protocol == "http") and {
sockopt = {
mark = 255,
domainStrategy = node.domain_strategy or "UseIP",
@@ -544,7 +548,7 @@ function gen_config_server(node)
allowTransparent = false,
users = users
}
- node.transport = "tcp"
+ node.transport = "raw"
node.tcp_guise = "none"
elseif node.protocol == "shadowsocks" then
settings = {
diff --git a/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm b/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm
index cfe03b1cb..c825cc9ec 100644
--- a/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm
+++ b/luci-app-passwall/luasrc/view/passwall/node_config/footer.htm
@@ -26,12 +26,18 @@ local config = map.config
update_config(node_id, {
remarks: getOption("<%=config%>", "<%=sid%>", "remarks").value,
group: getOption("<%=config%>", "<%=sid%>", "group").value,
- type: getOption("<%=config%>", "<%=sid%>", "type").value,
+ type: el.value,
//protocol: ''
}, node_config_url);
}
}
});
+ const fromUrlCache = JSON.parse(sessionStorage.getItem("fromUrl"));
+ if (fromUrlCache && fromUrlCache.savetime && (Date.now() - fromUrlCache.timestamp) < fromUrlCache.savetime) {
+ fromUrl(fromUrlCache.link, true)
+ } else {
+ sessionStorage.removeItem("fromUrl");
+ }
});
waitForElement('select[name*="<%=config%>"][name*="protocol"]', function(el) {
let o_val = el.value;
@@ -56,7 +62,7 @@ local config = map.config
update_config(node_id, {
remarks: getOption("<%=config%>", "<%=sid%>", "remarks").value,
group: getOption("<%=config%>", "<%=sid%>", "group").value,
- protocol: getOption("<%=config%>", "<%=sid%>", name).value,
+ protocol: el.value,
}, node_config_url);
*/
}
diff --git a/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm
index b489e0f4f..c806e5690 100644
--- a/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm
+++ b/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm
@@ -1,8 +1,8 @@
<%+cbi/valueheader%>
<%
-local api = require "luci.passwall.api"
-local appname = api.appname
local map = self.map
+local api = map.api
+local config = map.config
local has_ss_rust = api.is_finded("sslocal")
local has_singbox = api.finded_com("sing-box")
@@ -17,7 +17,7 @@ local hysteria2_type = api.get_core("hysteria2_type", {{has_hysteria2,"hysteria2
local current_node = map:get(section)
-%>
-
+