From dee89d70d3dd7f49877251de6077be68ba9d1069 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:09:06 +0800 Subject: [PATCH] update 2024-02-27 09:09:06 --- .../passwall/node_list/link_share_man.htm | 44 +++++++++++++++++++ .../root/usr/share/passwall/subscribe.lua | 30 +++++++++++++ .../passwall2/node_list/link_share_man.htm | 44 +++++++++++++++++++ .../root/usr/share/passwall2/subscribe.lua | 30 +++++++++++++ microsocks/Makefile | 4 +- natflow/Makefile | 2 +- 6 files changed, 151 insertions(+), 3 deletions(-) diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm index 2540f664d..22be258e2 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_list/link_share_man.htm @@ -225,6 +225,10 @@ local api = require "luci.passwall.api" if (v_transport === "ws") { info.host = opt.get(dom_prefix + "ws_host").value; info.path = opt.get(dom_prefix + "ws_path").value; + if (v_type == "sing-box" && opt.get(dom_prefix + "ws_enableEarlyData").checked) { + var ws_maxEarlyData = opt.get(dom_prefix + "ws_maxEarlyData").value; + info.path = info.path + "?ed=" + ws_maxEarlyData; + } } else if (v_transport === "h2") { info.host = opt.get(dom_prefix + "h2_host").value; info.path = opt.get(dom_prefix + "h2_path").value; @@ -269,6 +273,10 @@ local api = require "luci.passwall.api" if (v_transport === "ws") { params += opt.query("host", dom_prefix + "ws_host"); params += opt.query("path", dom_prefix + "ws_path"); + if (v_type == "sing-box" && opt.get(dom_prefix + "ws_enableEarlyData").checked) { + var ws_maxEarlyData = opt.get(dom_prefix + "ws_maxEarlyData").value; + params += "?ed=" + ws_maxEarlyData; + } } else if (v_transport === "h2") { v_transport = "http"; params += opt.query("host", dom_prefix + "h2_host"); @@ -704,6 +712,24 @@ local api = require "luci.passwall.api" } else if (ssm.net === "ws") { opt.set(dom_prefix + 'ws_host', ssm.host); opt.set(dom_prefix + 'ws_path', ssm.path); + if (dom_prefix == "singbox_" && ssm.path && ssm.path.length > 1) { + var ws_path_params = {}; + var ws_path_dat = ssm.path.split('?'); + var ws_path = ws_path_dat[0]; + var ws_path_params = {}; + var ws_path_params_array = ws_path_dat[1].split('&'); + for (i = 0; i < ws_path_params_array.length; i++) { + var kv = ws_path_params_array[i].split('='); + ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || ''); + } + + if (ws_path_params.ed) { + opt.set(dom_prefix + 'ws_path', ws_path); + opt.set(dom_prefix + 'ws_enableEarlyData', true); + opt.set(dom_prefix + 'ws_maxEarlyData', ws_path_params.ed); + opt.set(dom_prefix + 'ws_earlyDataHeaderName', 'Sec-WebSocket-Protocol'); + } + } } else if (ssm.net === "h2") { opt.set(dom_prefix + 'h2_host', ssm.host); opt.set(dom_prefix + 'h2_path', ssm.path); @@ -793,6 +819,24 @@ local api = require "luci.passwall.api" } else if (queryParam.type === "ws") { opt.set(dom_prefix + 'ws_host', queryParam.host || ""); opt.set(dom_prefix + 'ws_path', queryParam.path || ""); + if (dom_prefix == "singbox_" && queryParam.path && queryParam.path.length > 1) { + var ws_path_params = {}; + var ws_path_dat = queryParam.path.split('?'); + var ws_path = ws_path_dat[0]; + var ws_path_params = {}; + var ws_path_params_array = ws_path_dat[1].split('&'); + for (i = 0; i < ws_path_params_array.length; i++) { + var kv = ws_path_params_array[i].split('='); + ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || ''); + } + + if (ws_path_params.ed) { + opt.set(dom_prefix + 'ws_path', ws_path); + opt.set(dom_prefix + 'ws_enableEarlyData', true); + opt.set(dom_prefix + 'ws_maxEarlyData', ws_path_params.ed); + opt.set(dom_prefix + 'ws_earlyDataHeaderName', 'Sec-WebSocket-Protocol'); + } + } } else if (queryParam.type === "h2" || queryParam.type === "http") { opt.set(dom_prefix + 'h2_host', queryParam.host || ""); opt.set(dom_prefix + 'h2_path', queryParam.path || ""); diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua index 3be410bc3..bc68928d2 100755 --- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -406,6 +406,21 @@ local function processData(szType, content, add_mode, add_from) if info.net == 'ws' then result.ws_host = info.host result.ws_path = info.path + if result.type == "sing-box" and info.path then + local ws_path_dat = split(info.path, "?") + local ws_path = ws_path_dat[1] + local ws_path_params = {} + for _, v in pairs(split(ws_path_dat[2], '&')) do + local t = split(v, '=') + ws_path_params[t[1]] = t[2] + end + if ws_path_params.ed and tonumber(ws_path_params.ed) then + result.ws_path = ws_path + result.ws_enableEarlyData = "1" + result.ws_maxEarlyData = tonumber(ws_path_params.ed) + result.ws_earlyDataHeaderName = "Sec-WebSocket-Protocol" + end + end end if info.net == 'h2' then result.h2_host = info.host @@ -693,6 +708,21 @@ local function processData(szType, content, add_mode, add_from) if params.type == 'ws' then result.ws_host = params.host result.ws_path = params.path + if result.type == "sing-box" and params.path then + local ws_path_dat = split(params.path, "?") + local ws_path = ws_path_dat[1] + local ws_path_params = {} + for _, v in pairs(split(ws_path_dat[2], '&')) do + local t = split(v, '=') + ws_path_params[t[1]] = t[2] + end + if ws_path_params.ed and tonumber(ws_path_params.ed) then + result.ws_path = ws_path + result.ws_enableEarlyData = "1" + result.ws_maxEarlyData = tonumber(ws_path_params.ed) + result.ws_earlyDataHeaderName = "Sec-WebSocket-Protocol" + end + end end if params.type == 'h2' or params.type == 'http' then params.type = "h2" diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm index fb8fb7764..f2c324a39 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm @@ -225,6 +225,10 @@ local api = require "luci.passwall2.api" if (v_transport === "ws") { info.host = opt.get(dom_prefix + "ws_host").value; info.path = opt.get(dom_prefix + "ws_path").value; + if (v_type == "sing-box" && opt.get(dom_prefix + "ws_enableEarlyData").checked) { + var ws_maxEarlyData = opt.get(dom_prefix + "ws_maxEarlyData").value; + info.path = info.path + "?ed=" + ws_maxEarlyData; + } } else if (v_transport === "h2") { info.host = opt.get(dom_prefix + "h2_host").value; info.path = opt.get(dom_prefix + "h2_path").value; @@ -269,6 +273,10 @@ local api = require "luci.passwall2.api" if (v_transport === "ws") { params += opt.query("host", dom_prefix + "ws_host"); params += opt.query("path", dom_prefix + "ws_path"); + if (v_type == "sing-box" && opt.get(dom_prefix + "ws_enableEarlyData").checked) { + var ws_maxEarlyData = opt.get(dom_prefix + "ws_maxEarlyData").value; + params += "?ed=" + ws_maxEarlyData; + } } else if (v_transport === "h2") { v_transport = "http"; params += opt.query("host", dom_prefix + "h2_host"); @@ -720,6 +728,24 @@ local api = require "luci.passwall2.api" } else if (ssm.net === "ws") { opt.set(dom_prefix + 'ws_host', ssm.host); opt.set(dom_prefix + 'ws_path', ssm.path); + if (dom_prefix == "singbox_" && ssm.path && ssm.path.length > 1) { + var ws_path_params = {}; + var ws_path_dat = ssm.path.split('?'); + var ws_path = ws_path_dat[0]; + var ws_path_params = {}; + var ws_path_params_array = ws_path_dat[1].split('&'); + for (i = 0; i < ws_path_params_array.length; i++) { + var kv = ws_path_params_array[i].split('='); + ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || ''); + } + + if (ws_path_params.ed) { + opt.set(dom_prefix + 'ws_path', ws_path); + opt.set(dom_prefix + 'ws_enableEarlyData', true); + opt.set(dom_prefix + 'ws_maxEarlyData', ws_path_params.ed); + opt.set(dom_prefix + 'ws_earlyDataHeaderName', 'Sec-WebSocket-Protocol'); + } + } } else if (ssm.net === "h2") { opt.set(dom_prefix + 'h2_host', ssm.host); opt.set(dom_prefix + 'h2_path', ssm.path); @@ -809,6 +835,24 @@ local api = require "luci.passwall2.api" } else if (queryParam.type === "ws") { opt.set(dom_prefix + 'ws_host', queryParam.host || ""); opt.set(dom_prefix + 'ws_path', queryParam.path || ""); + if (dom_prefix == "singbox_" && queryParam.path && queryParam.path.length > 1) { + var ws_path_params = {}; + var ws_path_dat = queryParam.path.split('?'); + var ws_path = ws_path_dat[0]; + var ws_path_params = {}; + var ws_path_params_array = ws_path_dat[1].split('&'); + for (i = 0; i < ws_path_params_array.length; i++) { + var kv = ws_path_params_array[i].split('='); + ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || ''); + } + + if (ws_path_params.ed) { + opt.set(dom_prefix + 'ws_path', ws_path); + opt.set(dom_prefix + 'ws_enableEarlyData', true); + opt.set(dom_prefix + 'ws_maxEarlyData', ws_path_params.ed); + opt.set(dom_prefix + 'ws_earlyDataHeaderName', 'Sec-WebSocket-Protocol'); + } + } } else if (queryParam.type === "h2" || queryParam.type === "http") { opt.set(dom_prefix + 'h2_host', queryParam.host || ""); opt.set(dom_prefix + 'h2_path', queryParam.path || ""); diff --git a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index 8627c643f..b3a1217d6 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -401,6 +401,21 @@ local function processData(szType, content, add_mode, add_from) if info.net == 'ws' then result.ws_host = info.host result.ws_path = info.path + if result.type == "sing-box" and info.path then + local ws_path_dat = split(info.path, "?") + local ws_path = ws_path_dat[1] + local ws_path_params = {} + for _, v in pairs(split(ws_path_dat[2], '&')) do + local t = split(v, '=') + ws_path_params[t[1]] = t[2] + end + if ws_path_params.ed and tonumber(ws_path_params.ed) then + result.ws_path = ws_path + result.ws_enableEarlyData = "1" + result.ws_maxEarlyData = tonumber(ws_path_params.ed) + result.ws_earlyDataHeaderName = "Sec-WebSocket-Protocol" + end + end end if info.net == 'h2' then result.h2_host = info.host @@ -672,6 +687,21 @@ local function processData(szType, content, add_mode, add_from) if params.type == 'ws' then result.ws_host = params.host result.ws_path = params.path + if result.type == "sing-box" and params.path then + local ws_path_dat = split(params.path, "?") + local ws_path = ws_path_dat[1] + local ws_path_params = {} + for _, v in pairs(split(ws_path_dat[2], '&')) do + local t = split(v, '=') + ws_path_params[t[1]] = t[2] + end + if ws_path_params.ed and tonumber(ws_path_params.ed) then + result.ws_path = ws_path + result.ws_enableEarlyData = "1" + result.ws_maxEarlyData = tonumber(ws_path_params.ed) + result.ws_earlyDataHeaderName = "Sec-WebSocket-Protocol" + end + end end if params.type == 'h2' or params.type == 'http' then params.type = "h2" diff --git a/microsocks/Makefile b/microsocks/Makefile index ebd4b59fb..9f3b13a9e 100644 --- a/microsocks/Makefile +++ b/microsocks/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=microsocks -PKG_VERSION:=1.0.3 +PKG_VERSION:=1.0.4 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/rofl0r/microsocks/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=6801559b6f8e17240ed8eef17a36eea8643412b5a7476980fd4e24b02a021b82 +PKG_HASH:=130127a87f55870f18fbe47a64d9b9533020e2900802d36a0f6fd2b074313deb PKG_LICENSE:=MIT PKG_LICENSE_FILES:=COPYING diff --git a/natflow/Makefile b/natflow/Makefile index 47dd7cad6..4b07c3baf 100644 --- a/natflow/Makefile +++ b/natflow/Makefile @@ -12,7 +12,7 @@ PKG_NAME:=natflow PKG_VERSION:=20240227 PKG_SOURCE_URL:=https://codeload.github.com/ptpt52/natflow/tar.gz/$(PKG_VERSION)? -PKG_HASH:=038e1a9351aaf052410140088aa402c1a1dcbba2d28a86cb64fe56d0cda226ce +PKG_HASH:=08852cdab11b529d49d7af9dcc2bce06bf2d388a50af150377852b04e38a6393 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_MAINTAINER:=Chen Minqiang