From c705e7d27669d4fe78fa9f48eb25d2a5e8842955 Mon Sep 17 00:00:00 2001 From: "github-action[bot]" Date: Tue, 3 Dec 2024 19:35:40 +0100 Subject: [PATCH] Update On Tue Dec 3 19:35:40 CET 2024 --- .github/update.log | 1 + .../golang/clash/.github/workflows/build.yml | 19 +- .../src/foss/golang/clash/adapter/adapter.go | 13 +- .../foss/golang/clash/adapter/inbound/auth.go | 9 +- .../golang/clash/adapter/inbound/ipfilter.go | 24 +- .../golang/clash/adapter/inbound/listen.go | 23 + .../foss/golang/clash/adapter/inbound/util.go | 16 + .../golang/clash/adapter/outbound/base.go | 17 +- .../golang/clash/adapter/outbound/http.go | 7 + .../golang/clash/adapter/outbound/hysteria.go | 7 + .../clash/adapter/outbound/hysteria2.go | 7 + .../clash/adapter/outbound/shadowsocks.go | 7 + .../clash/adapter/outbound/shadowsocksr.go | 7 + .../golang/clash/adapter/outbound/singmux.go | 6 + .../golang/clash/adapter/outbound/snell.go | 9 +- .../golang/clash/adapter/outbound/socks5.go | 7 + .../foss/golang/clash/adapter/outbound/ssh.go | 7 + .../golang/clash/adapter/outbound/trojan.go | 7 + .../golang/clash/adapter/outbound/tuic.go | 7 + .../golang/clash/adapter/outbound/vless.go | 7 + .../golang/clash/adapter/outbound/vmess.go | 7 + .../clash/adapter/outbound/wireguard.go | 13 +- .../golang/clash/adapter/provider/parser.go | 3 +- .../component/keepalive/tcp_keepalive.go | 2 +- .../component/process/process_windows.go | 8 +- .../clash/component/resource/vehicle.go | 32 +- .../clash/component/updater/update_geo.go | 8 +- .../foss/golang/clash/constant/adapters.go | 15 +- .../src/foss/golang/clash/docs/config.yaml | 2 + .../core/src/foss/golang/clash/go.mod | 26 +- .../core/src/foss/golang/clash/go.sum | 50 +- .../foss/golang/clash/rules/common/ipcidr.go | 2 +- .../foss/golang/clash/rules/provider/parse.go | 17 +- .../core/src/foss/golang/go.mod | 26 +- .../core/src/foss/golang/go.sum | 50 +- .../core/src/main/golang/go.mod | 26 +- .../core/src/main/golang/go.sum | 50 +- clash-nyanpasu/backend/Cargo.lock | 18 +- clash-nyanpasu/frontend/nyanpasu/package.json | 14 +- clash-nyanpasu/frontend/ui/package.json | 2 +- clash-nyanpasu/manifest/version.json | 4 +- clash-nyanpasu/pnpm-lock.yaml | 162 +- filebrowser/frontend/package-lock.json | 36 +- filebrowser/frontend/package.json | 2 +- lede/README.md | 8 +- lede/include/meson.mk | 23 +- lede/include/target.mk | 2 +- lede/package/lean/autosamba/Makefile | 26 +- lede/package/libs/elfutils/Makefile | 14 +- .../patches/003-libintl-compatibility.patch | 4 +- .../patches/005-build_only_libs.patch | 4 +- .../006-Fix-build-on-aarch64-musl.patch | 4 +- .../007-add-libeu-symbols-to-libelf.patch | 31 + ...fix-autoconf-ENABLE_IMA_VERIFICATION.patch | 24 + .../009-fix-null-dereference-with-lto.patch | 193 +++ ...02-fix-potential-deref-of-null-error.patch | 55 + lede/package/libs/libubox/Makefile | 14 +- ...e-standard-POSIX-header-for-basename.patch | 13 + lede/package/system/ubus/Makefile | 10 +- lede/toolchain/gcc/Config.in | 3 +- lede/toolchain/gcc/Config.version | 13 +- ...pe.h-after-C-standard-headers-to-avo.patch | 139 -- .../021-libcc1-fix-vector-include.patch | 65 - lede/toolchain/musl/common.mk | 4 +- .../400-fix-loongarch64-ldso-file-name.patch | 10 + .../musl/patches/900-iconv_size_hack.patch | 2 +- .../patches/990-add_loongarch64_support.patch | 1404 ----------------- mieru/Makefile | 2 +- .../package/mieru/amd64/debian/DEBIAN/control | 2 +- .../build/package/mieru/amd64/rpm/mieru.spec | 2 +- .../package/mieru/arm64/debian/DEBIAN/control | 2 +- .../build/package/mieru/arm64/rpm/mieru.spec | 2 +- .../package/mita/amd64/debian/DEBIAN/control | 2 +- mieru/build/package/mita/amd64/rpm/mita.spec | 2 +- .../package/mita/arm64/debian/DEBIAN/control | 2 +- mieru/build/package/mita/arm64/rpm/mita.spec | 2 +- mieru/docs/server-install.md | 16 +- mieru/docs/server-install.zh_CN.md | 16 +- mieru/pkg/version/current.go | 2 +- .../passwall/client/node_subscribe_config.lua | 8 +- .../luci-app-passwall/luasrc/passwall/api.lua | 45 + .../luci-app-passwall/po/zh-cn/passwall.po | 3 + .../root/usr/share/passwall/subscribe.lua | 17 +- .../model/cbi/passwall2/client/type/ray.lua | 137 +- .../luasrc/passwall2/api.lua | 13 +- .../luasrc/passwall2/util_xray.lua | 82 +- .../passwall2/node_list/link_share_man.htm | 4 + .../luci-app-passwall2/po/zh-cn/passwall2.po | 25 +- .../usr/share/passwall2/helper_dnsmasq.sh | 2 +- .../root/usr/share/passwall2/iptables.sh | 2 + .../root/usr/share/passwall2/nftables.sh | 3 + .../root/usr/share/passwall2/subscribe.lua | 10 + shadowsocks-rust/Cargo.lock | 33 +- .../crates/shadowsocks-service/Cargo.toml | 6 +- .../src/local/tun/fake_tun.rs | 32 +- .../shadowsocks-service/src/local/tun/mod.rs | 4 +- .../crates/shadowsocks/Cargo.toml | 2 +- .../src/security/replay/ppbloom.rs | 4 +- shadowsocks-rust/deny.toml | 2 +- shadowsocks-rust/tests/tunnel.rs | 12 +- sing-box/Makefile | 4 +- sing-box/cmd/sing-box/cmd_tools.go | 2 +- sing-box/common/dialer/default.go | 36 +- sing-box/docs/changelog.md | 2 +- sing-box/experimental/clashapi/server.go | 16 +- .../experimental/libbox/command_status.go | 22 +- sing-box/go.mod | 2 +- sing-box/go.sum | 4 +- sing-box/option/route.go | 2 +- sing-box/protocol/direct/inbound.go | 5 +- sing-box/protocol/redirect/tproxy.go | 2 + sing-box/protocol/ssh/outbound.go | 11 + sing-box/route/network.go | 2 +- sing-box/test/go.mod | 24 +- sing-box/test/go.sum | 66 +- .../model/cbi/passwall2/client/type/ray.lua | 137 +- .../luasrc/passwall2/api.lua | 13 +- .../luasrc/passwall2/util_xray.lua | 82 +- .../passwall2/node_list/link_share_man.htm | 4 + .../luci-app-passwall2/po/zh-cn/passwall2.po | 25 +- .../usr/share/passwall2/helper_dnsmasq.sh | 2 +- .../root/usr/share/passwall2/iptables.sh | 2 + .../root/usr/share/passwall2/nftables.sh | 3 + .../root/usr/share/passwall2/subscribe.lua | 10 + v2rayn/README.md | 2 +- v2rayn/v2rayN/ServiceLib/Enums/ECoreType.cs | 2 - .../ServiceLib/Enums/EInboundProtocol.cs | 3 +- v2rayn/v2rayN/ServiceLib/Global.cs | 7 +- .../v2rayN/ServiceLib/Handler/AppHandler.cs | 12 +- .../Handler/SysProxy/SysProxyHandler.cs | 9 +- .../v2rayN/ServiceLib/Resx/ResUI.Designer.cs | 4 +- .../v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx | 4 +- v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx | 4 +- v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx | 4 +- .../v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx | 4 +- .../v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx | 4 +- .../CoreConfig/CoreConfigClashService.cs | 6 +- .../CoreConfig/CoreConfigSingboxService.cs | 16 +- .../CoreConfig/CoreConfigV2rayService.cs | 18 +- .../ServiceLib/Services/DownloadService.cs | 2 +- .../ViewModels/StatusBarViewModel.cs | 8 +- .../Views/AddServerWindow.axaml.cs | 16 +- .../v2rayN/Views/AddServerWindow.xaml.cs | 16 +- .../src/main/java/com/v2ray/ang/AppConfig.kt | 2 - .../com/v2ray/ang/handler/SettingsManager.kt | 2 +- .../v2ray/ang/handler/V2rayConfigManager.kt | 18 +- .../java/com/v2ray/ang/ui/SettingsActivity.kt | 9 +- .../src/main/java/com/v2ray/ang/util/Utils.kt | 2 + .../v2ray/ang/viewmodel/SettingsViewModel.kt | 1 - .../app/src/main/res/values-ar/strings.xml | 3 - .../app/src/main/res/values-bn/strings.xml | 3 - .../src/main/res/values-bqi-rIR/strings.xml | 3 - .../app/src/main/res/values-fa/strings.xml | 3 - .../app/src/main/res/values-ru/strings.xml | 3 - .../app/src/main/res/values-vi/strings.xml | 3 - .../src/main/res/values-zh-rCN/strings.xml | 3 - .../src/main/res/values-zh-rTW/strings.xml | 3 - .../app/src/main/res/values/strings.xml | 3 - .../app/src/main/res/xml/pref_settings.xml | 6 - yass/scripts/install-sysroot-freebsd.py | 4 +- yass/src/android/jni.cpp | 41 +- yass/src/config/config_core.cpp | 8 +- yass/src/crypto/crypter_export.cpp | 6 - yass/src/crypto/crypter_export.hpp | 18 +- yass/src/gtk/yass_window.cpp | 21 +- yass/src/gtk4/yass_window.cpp | 21 +- yass/src/harmony/yass.cpp | 14 +- yass/src/net/io_queue_test.cpp | 2 +- yass/src/qt6/yass_window.cpp | 21 +- yass/src/ss_test.cpp | 27 +- yass/src/win32/yass_frame.cpp | 16 +- yt-dlp/yt_dlp/extractor/bilibili.py | 165 +- yt-dlp/yt_dlp/extractor/vk.py | 96 +- 173 files changed, 1580 insertions(+), 2911 deletions(-) create mode 100644 lede/package/libs/elfutils/patches/007-add-libeu-symbols-to-libelf.patch create mode 100644 lede/package/libs/elfutils/patches/008-fix-autoconf-ENABLE_IMA_VERIFICATION.patch create mode 100644 lede/package/libs/elfutils/patches/009-fix-null-dereference-with-lto.patch create mode 100644 lede/package/libs/elfutils/patches/102-fix-potential-deref-of-null-error.patch create mode 100644 lede/package/system/procd/patches/001-use-standard-POSIX-header-for-basename.patch delete mode 100644 lede/toolchain/gcc/patches-13.x/020-Include-safe-ctype.h-after-C-standard-headers-to-avo.patch delete mode 100644 lede/toolchain/gcc/patches-13.x/021-libcc1-fix-vector-include.patch create mode 100644 lede/toolchain/musl/patches/400-fix-loongarch64-ldso-file-name.patch delete mode 100644 lede/toolchain/musl/patches/990-add_loongarch64_support.patch diff --git a/.github/update.log b/.github/update.log index 45ba1a9540..09bd67482f 100644 --- a/.github/update.log +++ b/.github/update.log @@ -843,3 +843,4 @@ Update On Fri Nov 29 19:38:25 CET 2024 Update On Sat Nov 30 19:35:41 CET 2024 Update On Sun Dec 1 19:36:04 CET 2024 Update On Mon Dec 2 19:39:13 CET 2024 +Update On Tue Dec 3 19:35:29 CET 2024 diff --git a/clash-meta-android/core/src/foss/golang/clash/.github/workflows/build.yml b/clash-meta-android/core/src/foss/golang/clash/.github/workflows/build.yml index 5ba2ef6f9e..56c7b66d78 100644 --- a/clash-meta-android/core/src/foss/golang/clash/.github/workflows/build.yml +++ b/clash-meta-android/core/src/foss/golang/clash/.github/workflows/build.yml @@ -104,29 +104,22 @@ jobs: - uses: actions/checkout@v4 - name: Set up Go - if: ${{ matrix.jobs.goversion == '' && matrix.jobs.goarch != 'loong64' }} + if: ${{ matrix.jobs.goversion == '' && matrix.jobs.abi != '1' }} uses: actions/setup-go@v5 with: go-version: '1.23' - name: Set up Go - if: ${{ matrix.jobs.goversion != '' && matrix.jobs.goarch != 'loong64' }} + if: ${{ matrix.jobs.goversion != '' && matrix.jobs.abi != '1' }} uses: actions/setup-go@v5 with: go-version: ${{ matrix.jobs.goversion }} - - name: Set up Go1.22 loongarch abi1 + - name: Set up Go1.23 loongarch abi1 if: ${{ matrix.jobs.goarch == 'loong64' && matrix.jobs.abi == '1' }} run: | - wget -q https://github.com/MetaCubeX/loongarch64-golang/releases/download/1.22.4/go1.22.4.linux-amd64-abi1.tar.gz - sudo tar zxf go1.22.4.linux-amd64-abi1.tar.gz -C /usr/local - echo "/usr/local/go/bin" >> $GITHUB_PATH - - - name: Set up Go1.22 loongarch abi2 - if: ${{ matrix.jobs.goarch == 'loong64' && matrix.jobs.abi == '2' }} - run: | - wget -q https://github.com/MetaCubeX/loongarch64-golang/releases/download/1.22.4/go1.22.4.linux-amd64-abi2.tar.gz - sudo tar zxf go1.22.4.linux-amd64-abi2.tar.gz -C /usr/local + wget -q https://github.com/MetaCubeX/loongarch64-golang/releases/download/1.23.0/go1.23.0.linux-amd64-abi1.tar.gz + sudo tar zxf go1.23.0.linux-amd64-abi1.tar.gz -C /usr/local echo "/usr/local/go/bin" >> $GITHUB_PATH # modify from https://github.com/restic/restic/issues/4636#issuecomment-1896455557 @@ -194,7 +187,7 @@ jobs: uses: nttld/setup-ndk@v1 id: setup-ndk with: - ndk-version: r27 + ndk-version: r28-beta1 - name: Set NDK path if: ${{ matrix.jobs.goos == 'android' }} diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/adapter.go b/clash-meta-android/core/src/foss/golang/clash/adapter/adapter.go index 6de7fb928d..31706a2eed 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/adapter.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/adapter.go @@ -163,8 +163,17 @@ func (p *Proxy) MarshalJSON() ([]byte, error) { mapping["alive"] = p.alive.Load() mapping["name"] = p.Name() mapping["udp"] = p.SupportUDP() - mapping["xudp"] = p.SupportXUDP() - mapping["tfo"] = p.SupportTFO() + mapping["uot"] = p.SupportUOT() + + proxyInfo := p.ProxyInfo() + mapping["xudp"] = proxyInfo.XUDP + mapping["tfo"] = proxyInfo.TFO + mapping["mptcp"] = proxyInfo.MPTCP + mapping["smux"] = proxyInfo.SMUX + mapping["interface"] = proxyInfo.Interface + mapping["dialer-proxy"] = proxyInfo.DialerProxy + mapping["routing-mark"] = proxyInfo.RoutingMark + return json.Marshal(mapping) } diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/auth.go b/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/auth.go index 984c9bd68e..8317274687 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/auth.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/auth.go @@ -34,12 +34,5 @@ func SkipAuthRemoteAddress(addr string) bool { } func skipAuth(addr netip.Addr) bool { - if addr.IsValid() { - for _, prefix := range skipAuthPrefixes { - if prefix.Contains(addr.Unmap()) { - return true - } - } - } - return false + return prefixesContains(skipAuthPrefixes, addr) } diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/ipfilter.go b/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/ipfilter.go index 7fa218c1f9..872d0c85a1 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/ipfilter.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/ipfilter.go @@ -31,27 +31,17 @@ func IsRemoteAddrDisAllowed(addr net.Addr) bool { if err := m.SetRemoteAddr(addr); err != nil { return false } - return isAllowed(m.AddrPort().Addr().Unmap()) && !isDisAllowed(m.AddrPort().Addr().Unmap()) + ipAddr := m.AddrPort().Addr() + if ipAddr.IsValid() { + return isAllowed(ipAddr) && !isDisAllowed(ipAddr) + } + return false } func isAllowed(addr netip.Addr) bool { - if addr.IsValid() { - for _, prefix := range lanAllowedIPs { - if prefix.Contains(addr) { - return true - } - } - } - return false + return prefixesContains(lanAllowedIPs, addr) } func isDisAllowed(addr netip.Addr) bool { - if addr.IsValid() { - for _, prefix := range lanDisAllowedIPs { - if prefix.Contains(addr) { - return true - } - } - } - return false + return prefixesContains(lanDisAllowedIPs, addr) } diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/listen.go b/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/listen.go index 318c9675db..ad944006a2 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/listen.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/listen.go @@ -2,7 +2,9 @@ package inbound import ( "context" + "fmt" "net" + "net/netip" "sync" "github.com/metacubex/mihomo/component/keepalive" @@ -42,6 +44,27 @@ func MPTCP() bool { } func ListenContext(ctx context.Context, network, address string) (net.Listener, error) { + switch network { // like net.Resolver.internetAddrList but filter domain to avoid call net.Resolver.lookupIPAddr + case "tcp", "tcp4", "tcp6", "udp", "udp4", "udp6", "ip", "ip4", "ip6": + if host, port, err := net.SplitHostPort(address); err == nil { + switch host { + case "localhost": + switch network { + case "tcp6", "udp6", "ip6": + address = net.JoinHostPort("::1", port) + default: + address = net.JoinHostPort("127.0.0.1", port) + } + case "": // internetAddrList can handle this special case + break + default: + if _, err := netip.ParseAddr(host); err != nil { // not ip + return nil, fmt.Errorf("invalid network address: %s", address) + } + } + } + } + mutex.RLock() defer mutex.RUnlock() return lc.Listen(ctx, network, address) diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/util.go b/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/util.go index 743337fc12..3bcd280895 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/util.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/inbound/util.go @@ -61,3 +61,19 @@ func parseHTTPAddr(request *http.Request) *C.Metadata { return metadata } + +func prefixesContains(prefixes []netip.Prefix, addr netip.Addr) bool { + if len(prefixes) == 0 { + return false + } + if !addr.IsValid() { + return false + } + addr = addr.Unmap().WithZone("") // netip.Prefix.Contains returns false if ip has an IPv6 zone + for _, prefix := range prefixes { + if prefix.Contains(addr) { + return true + } + } + return false +} diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/base.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/base.go index ae8c4651bd..dd226f74a7 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/base.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/base.go @@ -85,14 +85,15 @@ func (b *Base) SupportUDP() bool { return b.udp } -// SupportXUDP implements C.ProxyAdapter -func (b *Base) SupportXUDP() bool { - return b.xudp -} - -// SupportTFO implements C.ProxyAdapter -func (b *Base) SupportTFO() bool { - return b.tfo +// ProxyInfo implements C.ProxyAdapter +func (b *Base) ProxyInfo() (info C.ProxyInfo) { + info.XUDP = b.xudp + info.TFO = b.tfo + info.MPTCP = b.mpTcp + info.SMUX = false + info.Interface = b.iface + info.RoutingMark = b.rmark + return } // IsL3Protocol implements C.ProxyAdapter diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/http.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/http.go index ebb1d67cc5..54e05f9db3 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/http.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/http.go @@ -92,6 +92,13 @@ func (h *Http) SupportWithDialer() C.NetWork { return C.TCP } +// ProxyInfo implements C.ProxyAdapter +func (h *Http) ProxyInfo() C.ProxyInfo { + info := h.Base.ProxyInfo() + info.DialerProxy = h.option.DialerProxy + return info +} + func (h *Http) shakeHand(metadata *C.Metadata, rw io.ReadWriter) error { addr := metadata.RemoteAddress() HeaderString := "CONNECT " + addr + " HTTP/1.1\r\n" diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/hysteria.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/hysteria.go index 55c66c455b..b0edab0293 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/hysteria.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/hysteria.go @@ -87,6 +87,13 @@ func (h *Hysteria) genHdc(ctx context.Context, opts ...dialer.Option) utils.Pack } } +// ProxyInfo implements C.ProxyAdapter +func (h *Hysteria) ProxyInfo() C.ProxyInfo { + info := h.Base.ProxyInfo() + info.DialerProxy = h.option.DialerProxy + return info +} + type HysteriaOption struct { BasicOption Name string `proxy:"name"` diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/hysteria2.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/hysteria2.go index c1a255a766..e7a9adaee4 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/hysteria2.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/hysteria2.go @@ -96,6 +96,13 @@ func closeHysteria2(h *Hysteria2) { } } +// ProxyInfo implements C.ProxyAdapter +func (h *Hysteria2) ProxyInfo() C.ProxyInfo { + info := h.Base.ProxyInfo() + info.DialerProxy = h.option.DialerProxy + return info +} + func NewHysteria2(option Hysteria2Option) (*Hysteria2, error) { addr := net.JoinHostPort(option.Server, strconv.Itoa(option.Port)) var salamanderPassword string diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/shadowsocks.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/shadowsocks.go index 021fbc0a26..f73d5302a4 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/shadowsocks.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/shadowsocks.go @@ -196,6 +196,13 @@ func (ss *ShadowSocks) SupportWithDialer() C.NetWork { return C.ALLNet } +// ProxyInfo implements C.ProxyAdapter +func (ss *ShadowSocks) ProxyInfo() C.ProxyInfo { + info := ss.Base.ProxyInfo() + info.DialerProxy = ss.option.DialerProxy + return info +} + // ListenPacketOnStreamConn implements C.ProxyAdapter func (ss *ShadowSocks) ListenPacketOnStreamConn(ctx context.Context, c net.Conn, metadata *C.Metadata) (_ C.PacketConn, err error) { if ss.option.UDPOverTCP { diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/shadowsocksr.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/shadowsocksr.go index 437695b4c8..d0752e79dd 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/shadowsocksr.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/shadowsocksr.go @@ -122,6 +122,13 @@ func (ssr *ShadowSocksR) SupportWithDialer() C.NetWork { return C.ALLNet } +// ProxyInfo implements C.ProxyAdapter +func (ssr *ShadowSocksR) ProxyInfo() C.ProxyInfo { + info := ssr.Base.ProxyInfo() + info.DialerProxy = ssr.option.DialerProxy + return info +} + func NewShadowSocksR(option ShadowSocksROption) (*ShadowSocksR, error) { // SSR protocol compatibility // https://github.com/metacubex/mihomo/pull/2056 diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/singmux.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/singmux.go index 6726774448..26a8d26ea5 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/singmux.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/singmux.go @@ -97,6 +97,12 @@ func (s *SingMux) SupportUOT() bool { return true } +func (s *SingMux) ProxyInfo() C.ProxyInfo { + info := s.ProxyAdapter.ProxyInfo() + info.SMUX = true + return info +} + func closeSingMux(s *SingMux) { _ = s.client.Close() } diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/snell.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/snell.go index f6a4b4f9aa..f4b94787e6 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/snell.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/snell.go @@ -141,6 +141,13 @@ func (s *Snell) SupportUOT() bool { return true } +// ProxyInfo implements C.ProxyAdapter +func (s *Snell) ProxyInfo() C.ProxyInfo { + info := s.Base.ProxyInfo() + info.DialerProxy = s.option.DialerProxy + return info +} + func NewSnell(option SnellOption) (*Snell, error) { addr := net.JoinHostPort(option.Server, strconv.Itoa(option.Port)) psk := []byte(option.Psk) @@ -204,7 +211,7 @@ func NewSnell(option SnellOption) (*Snell, error) { if err != nil { return nil, err } - + return streamConn(c, streamOption{psk, option.Version, addr, obfsOption}), nil }) } diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/socks5.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/socks5.go index 1908167abc..b8dd3b39dc 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/socks5.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/socks5.go @@ -171,6 +171,13 @@ func (ss *Socks5) ListenPacketContext(ctx context.Context, metadata *C.Metadata, return newPacketConn(&socksPacketConn{PacketConn: pc, rAddr: bindUDPAddr, tcpConn: c}, ss), nil } +// ProxyInfo implements C.ProxyAdapter +func (ss *Socks5) ProxyInfo() C.ProxyInfo { + info := ss.Base.ProxyInfo() + info.DialerProxy = ss.option.DialerProxy + return info +} + func NewSocks5(option Socks5Option) (*Socks5, error) { var tlsConfig *tls.Config if option.TLS { diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/ssh.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/ssh.go index 9e23b463dd..d746842d4d 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/ssh.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/ssh.go @@ -121,6 +121,13 @@ func closeSsh(s *Ssh) { _ = s.client.Close() } +// ProxyInfo implements C.ProxyAdapter +func (s *Ssh) ProxyInfo() C.ProxyInfo { + info := s.Base.ProxyInfo() + info.DialerProxy = s.option.DialerProxy + return info +} + func NewSsh(option SshOption) (*Ssh, error) { addr := net.JoinHostPort(option.Server, strconv.Itoa(option.Port)) diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/trojan.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/trojan.go index b3a611af05..b626543963 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/trojan.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/trojan.go @@ -244,6 +244,13 @@ func (t *Trojan) SupportUOT() bool { return true } +// ProxyInfo implements C.ProxyAdapter +func (t *Trojan) ProxyInfo() C.ProxyInfo { + info := t.Base.ProxyInfo() + info.DialerProxy = t.option.DialerProxy + return info +} + func NewTrojan(option TrojanOption) (*Trojan, error) { addr := net.JoinHostPort(option.Server, strconv.Itoa(option.Port)) diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/tuic.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/tuic.go index 666e72fad2..eaacb8177a 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/tuic.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/tuic.go @@ -146,6 +146,13 @@ func (t *Tuic) dialWithDialer(ctx context.Context, dialer C.Dialer) (transport * return } +// ProxyInfo implements C.ProxyAdapter +func (t *Tuic) ProxyInfo() C.ProxyInfo { + info := t.Base.ProxyInfo() + info.DialerProxy = t.option.DialerProxy + return info +} + func NewTuic(option TuicOption) (*Tuic, error) { addr := net.JoinHostPort(option.Server, strconv.Itoa(option.Port)) serverName := option.Server diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/vless.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/vless.go index 7905887409..7ab61ff624 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/vless.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/vless.go @@ -379,6 +379,13 @@ func (v *Vless) SupportUOT() bool { return true } +// ProxyInfo implements C.ProxyAdapter +func (v *Vless) ProxyInfo() C.ProxyInfo { + info := v.Base.ProxyInfo() + info.DialerProxy = v.option.DialerProxy + return info +} + func parseVlessAddr(metadata *C.Metadata, xudp bool) *vless.DstAddr { var addrType byte var addr []byte diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/vmess.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/vmess.go index 8797374dd8..f7de4e8e7f 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/vmess.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/vmess.go @@ -388,6 +388,13 @@ func (v *Vmess) SupportWithDialer() C.NetWork { return C.ALLNet } +// ProxyInfo implements C.ProxyAdapter +func (v *Vmess) ProxyInfo() C.ProxyInfo { + info := v.Base.ProxyInfo() + info.DialerProxy = v.option.DialerProxy + return info +} + // ListenPacketOnStreamConn implements C.ProxyAdapter func (v *Vmess) ListenPacketOnStreamConn(ctx context.Context, c net.Conn, metadata *C.Metadata) (_ C.PacketConn, err error) { // vmess use stream-oriented udp with a special address, so we need a net.UDPAddr diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/wireguard.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/wireguard.go index 03145c3700..2834d32447 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/wireguard.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/wireguard.go @@ -611,18 +611,11 @@ func (r *refProxyAdapter) SupportUDP() bool { return false } -func (r *refProxyAdapter) SupportXUDP() bool { +func (r *refProxyAdapter) ProxyInfo() C.ProxyInfo { if r.proxyAdapter != nil { - return r.proxyAdapter.SupportXUDP() + return r.proxyAdapter.ProxyInfo() } - return false -} - -func (r *refProxyAdapter) SupportTFO() bool { - if r.proxyAdapter != nil { - return r.proxyAdapter.SupportTFO() - } - return false + return C.ProxyInfo{} } func (r *refProxyAdapter) MarshalJSON() ([]byte, error) { diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/provider/parser.go b/clash-meta-android/core/src/foss/golang/clash/adapter/provider/parser.go index b0db5db340..b305df7f89 100644 --- a/clash-meta-android/core/src/foss/golang/clash/adapter/provider/parser.go +++ b/clash-meta-android/core/src/foss/golang/clash/adapter/provider/parser.go @@ -66,6 +66,7 @@ type proxyProviderSchema struct { ExcludeFilter string `provider:"exclude-filter,omitempty"` ExcludeType string `provider:"exclude-type,omitempty"` DialerProxy string `provider:"dialer-proxy,omitempty"` + SizeLimit int64 `provider:"size-limit,omitempty"` HealthCheck healthCheckSchema `provider:"health-check,omitempty"` Override OverrideSchema `provider:"override,omitempty"` @@ -111,7 +112,7 @@ func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvide return nil, fmt.Errorf("%w: %s", errSubPath, path) } } - vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, schema.Header, resource.DefaultHttpTimeout) + vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, schema.Header, resource.DefaultHttpTimeout, schema.SizeLimit) default: return nil, fmt.Errorf("%w: %s", errVehicleType, schema.Type) } diff --git a/clash-meta-android/core/src/foss/golang/clash/component/keepalive/tcp_keepalive.go b/clash-meta-android/core/src/foss/golang/clash/component/keepalive/tcp_keepalive.go index 9b24c45ada..14ec862b62 100644 --- a/clash-meta-android/core/src/foss/golang/clash/component/keepalive/tcp_keepalive.go +++ b/clash-meta-android/core/src/foss/golang/clash/component/keepalive/tcp_keepalive.go @@ -35,7 +35,7 @@ func KeepAliveInterval() time.Duration { func SetDisableKeepAlive(disable bool) { if runtime.GOOS == "android" { - setDisableKeepAlive(false) + setDisableKeepAlive(true) } else { setDisableKeepAlive(disable) } diff --git a/clash-meta-android/core/src/foss/golang/clash/component/process/process_windows.go b/clash-meta-android/core/src/foss/golang/clash/component/process/process_windows.go index f8cd00d8aa..73ac025546 100644 --- a/clash-meta-android/core/src/foss/golang/clash/component/process/process_windows.go +++ b/clash-meta-android/core/src/foss/golang/clash/component/process/process_windows.go @@ -180,7 +180,7 @@ func newSearcher(isV4, isTCP bool) *searcher { func getTransportTable(fn uintptr, family int, class int) ([]byte, error) { for size, buf := uint32(8), make([]byte, 8); ; { ptr := unsafe.Pointer(&buf[0]) - err, _, _ := syscall.SyscallN(fn, uintptr(ptr), uintptr(unsafe.Pointer(&size)), 0, uintptr(family), uintptr(class), 0) + err, _, _ := syscall.Syscall6(fn, 6, uintptr(ptr), uintptr(unsafe.Pointer(&size)), 0, uintptr(family), uintptr(class), 0) switch err { case 0: @@ -215,13 +215,13 @@ func getExecPathFromPID(pid uint32) (string, error) { buf := make([]uint16, syscall.MAX_LONG_PATH) size := uint32(len(buf)) - r1, _, err := syscall.SyscallN( - queryProcName, + r1, _, err := syscall.Syscall6( + queryProcName, 4, uintptr(h), uintptr(0), uintptr(unsafe.Pointer(&buf[0])), uintptr(unsafe.Pointer(&size)), - ) + 0, 0) if r1 == 0 { return "", err } diff --git a/clash-meta-android/core/src/foss/golang/clash/component/resource/vehicle.go b/clash-meta-android/core/src/foss/golang/clash/component/resource/vehicle.go index 7c3cb1c2a1..18cebf002c 100644 --- a/clash-meta-android/core/src/foss/golang/clash/component/resource/vehicle.go +++ b/clash-meta-android/core/src/foss/golang/clash/component/resource/vehicle.go @@ -84,12 +84,13 @@ func NewFileVehicle(path string) *FileVehicle { } type HTTPVehicle struct { - url string - path string - proxy string - header http.Header - timeout time.Duration - provider types.ProxyProvider + url string + path string + proxy string + header http.Header + timeout time.Duration + sizeLimit int64 + provider types.ProxyProvider } func (h *HTTPVehicle) Url() string { @@ -151,7 +152,11 @@ func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []b err = errors.New(resp.Status) return } - buf, err = io.ReadAll(resp.Body) + var reader io.Reader = resp.Body + if h.sizeLimit > 0 { + reader = io.LimitReader(reader, h.sizeLimit) + } + buf, err = io.ReadAll(reader) if err != nil { return } @@ -166,12 +171,13 @@ func (h *HTTPVehicle) Read(ctx context.Context, oldHash utils.HashType) (buf []b return } -func NewHTTPVehicle(url string, path string, proxy string, header http.Header, timeout time.Duration) *HTTPVehicle { +func NewHTTPVehicle(url string, path string, proxy string, header http.Header, timeout time.Duration, sizeLimit int64) *HTTPVehicle { return &HTTPVehicle{ - url: url, - path: path, - proxy: proxy, - header: header, - timeout: timeout, + url: url, + path: path, + proxy: proxy, + header: header, + timeout: timeout, + sizeLimit: sizeLimit, } } diff --git a/clash-meta-android/core/src/foss/golang/clash/component/updater/update_geo.go b/clash-meta-android/core/src/foss/golang/clash/component/updater/update_geo.go index bba0dabd2e..719a521515 100644 --- a/clash-meta-android/core/src/foss/golang/clash/component/updater/update_geo.go +++ b/clash-meta-android/core/src/foss/golang/clash/component/updater/update_geo.go @@ -45,7 +45,7 @@ func SetGeoUpdateInterval(newGeoUpdateInterval int) { } func UpdateMMDB() (err error) { - vehicle := resource.NewHTTPVehicle(geodata.MmdbUrl(), C.Path.MMDB(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.MmdbUrl(), C.Path.MMDB(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -76,7 +76,7 @@ func UpdateMMDB() (err error) { } func UpdateASN() (err error) { - vehicle := resource.NewHTTPVehicle(geodata.ASNUrl(), C.Path.ASN(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.ASNUrl(), C.Path.ASN(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -109,7 +109,7 @@ func UpdateASN() (err error) { func UpdateGeoIp() (err error) { geoLoader, err := geodata.GetGeoDataLoader("standard") - vehicle := resource.NewHTTPVehicle(geodata.GeoIpUrl(), C.Path.GeoIP(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.GeoIpUrl(), C.Path.GeoIP(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) @@ -139,7 +139,7 @@ func UpdateGeoIp() (err error) { func UpdateGeoSite() (err error) { geoLoader, err := geodata.GetGeoDataLoader("standard") - vehicle := resource.NewHTTPVehicle(geodata.GeoSiteUrl(), C.Path.GeoSite(), "", nil, defaultHttpTimeout) + vehicle := resource.NewHTTPVehicle(geodata.GeoSiteUrl(), C.Path.GeoSite(), "", nil, defaultHttpTimeout, 0) var oldHash utils.HashType if buf, err := os.ReadFile(vehicle.Path()); err == nil { oldHash = utils.MakeHash(buf) diff --git a/clash-meta-android/core/src/foss/golang/clash/constant/adapters.go b/clash-meta-android/core/src/foss/golang/clash/constant/adapters.go index c7b73a0693..664054d750 100644 --- a/clash-meta-android/core/src/foss/golang/clash/constant/adapters.go +++ b/clash-meta-android/core/src/foss/golang/clash/constant/adapters.go @@ -99,13 +99,24 @@ type Dialer interface { ListenPacket(ctx context.Context, network, address string, rAddrPort netip.AddrPort) (net.PacketConn, error) } +type ProxyInfo struct { + XUDP bool + TFO bool + MPTCP bool + SMUX bool + Interface string + RoutingMark int + DialerProxy string +} + type ProxyAdapter interface { Name() string Type() AdapterType Addr() string SupportUDP() bool - SupportXUDP() bool - SupportTFO() bool + + // ProxyInfo contains some extra information maybe useful for MarshalJSON + ProxyInfo() ProxyInfo MarshalJSON() ([]byte, error) // Deprecated: use DialContextWithDialer and ListenPacketWithDialer instead. diff --git a/clash-meta-android/core/src/foss/golang/clash/docs/config.yaml b/clash-meta-android/core/src/foss/golang/clash/docs/config.yaml index e75e5bd59b..5e83eea376 100644 --- a/clash-meta-android/core/src/foss/golang/clash/docs/config.yaml +++ b/clash-meta-android/core/src/foss/golang/clash/docs/config.yaml @@ -930,6 +930,7 @@ proxy-providers: interval: 3600 path: ./provider1.yaml # 默认只允许存储在 mihomo 的 Home Dir,如果想存储到任意位置,添加环境变量 SKIP_SAFE_PATH_CHECK=1 proxy: DIRECT + # size-limit: 10240 # 限制下载文件最大为10kb,默认为0即不限制文件大小 header: User-Agent: - "Clash/v1.18.0" @@ -977,6 +978,7 @@ rule-providers: type: http # http 的 path 可空置,默认储存路径为 homedir 的 rules 文件夹,文件名为 url 的 md5 url: "url" proxy: DIRECT + # size-limit: 10240 # 限制下载文件最大为10kb,默认为0即不限制文件大小 rule2: behavior: classical interval: 259200 diff --git a/clash-meta-android/core/src/foss/golang/clash/go.mod b/clash-meta-android/core/src/foss/golang/clash/go.mod index ff87012117..905b1597fe 100644 --- a/clash-meta-android/core/src/foss/golang/clash/go.mod +++ b/clash-meta-android/core/src/foss/golang/clash/go.mod @@ -20,14 +20,14 @@ require ( github.com/metacubex/bbolt v0.0.0-20240822011022-aed6d4850399 github.com/metacubex/chacha v0.1.0 github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 - github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2 + github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da github.com/metacubex/randv2 v0.2.0 github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4 github.com/metacubex/sing-shadowsocks v0.2.8 github.com/metacubex/sing-shadowsocks2 v0.2.2 - github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98 + github.com/metacubex/sing-tun v0.4.2 github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9 - github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3 + github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589 github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa github.com/metacubex/utls v1.6.6 github.com/metacubex/wireguard-go v0.0.0-20240922131502-c182e7471181 @@ -39,7 +39,7 @@ require ( github.com/sagernet/cors v1.2.1 github.com/sagernet/fswatch v0.1.1 github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a - github.com/sagernet/sing v0.5.0 + github.com/sagernet/sing v0.5.1 github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6 github.com/sagernet/sing-shadowtls v0.1.4 github.com/samber/lo v1.47.0 @@ -51,10 +51,10 @@ require ( gitlab.com/go-extension/aes-ccm v0.0.0-20230221065045-e58665ef23c7 go.uber.org/automaxprocs v1.6.0 go4.org/netipx v0.0.0-20231129151722-fdeea329fbba - golang.org/x/crypto v0.28.0 + golang.org/x/crypto v0.29.0 golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // lastest version compatible with golang1.20 - golang.org/x/net v0.30.0 - golang.org/x/sys v0.26.0 + golang.org/x/net v0.31.0 + golang.org/x/sys v0.27.0 google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v3 v3.0.1 lukechampine.com/blake3 v1.3.0 @@ -78,7 +78,7 @@ require ( github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/gobwas/httphead v0.1.0 // indirect github.com/gobwas/pool v0.2.1 // indirect - github.com/google/btree v1.1.2 // indirect + github.com/google/btree v1.1.3 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect github.com/hashicorp/yamux v0.1.1 // indirect @@ -87,7 +87,7 @@ require ( github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mdlayher/socket v0.4.1 // indirect - github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec // indirect + github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a // indirect github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 // indirect github.com/onsi/ginkgo/v2 v2.9.5 // indirect github.com/pierrec/lz4/v4 v4.1.14 // indirect @@ -110,10 +110,10 @@ require ( gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect go.uber.org/mock v0.4.0 // indirect golang.org/x/mod v0.20.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/text v0.19.0 // indirect - golang.org/x/time v0.5.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/text v0.20.0 // indirect + golang.org/x/time v0.7.0 // indirect golang.org/x/tools v0.24.0 // indirect ) -replace github.com/sagernet/sing => github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908 +replace github.com/sagernet/sing => github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000 diff --git a/clash-meta-android/core/src/foss/golang/clash/go.sum b/clash-meta-android/core/src/foss/golang/clash/go.sum index d7b3c64001..7845d2949a 100644 --- a/clash-meta-android/core/src/foss/golang/clash/go.sum +++ b/clash-meta-android/core/src/foss/golang/clash/go.sum @@ -60,8 +60,8 @@ github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk= github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -102,26 +102,26 @@ github.com/metacubex/chacha v0.1.0 h1:tg9RSJ18NvL38cCWNyYH1eiG6qDCyyXIaTLQthon0s github.com/metacubex/chacha v0.1.0/go.mod h1:Djn9bPZxLTXbJFSeyo0/qzEzQI+gUSSzttuzZM75GH8= github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 h1:cjd4biTvOzK9ubNCCkQ+ldc4YSH/rILn53l/xGBFHHI= github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759/go.mod h1:UHOv2xu+RIgLwpXca7TLrXleEd4oR3sPatW6IF8wU88= -github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec h1:HxreOiFTUrJXJautEo8rnE1uKTVGY8wtZepY1Tii/Nc= -github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec/go.mod h1:8BVmQ+3cxjqzWElafm24rb2Ae4jRI6vAXNXWqWjfrXw= -github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2 h1:1prpWzQnhN/LgGTMA6nz86MGcppDUOwfRkhxPOnrzAk= -github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2/go.mod h1:AiZ+UPgrkO1DTnmiAX4b+kRoV1Vfc65UkYD7RbFlIZA= +github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a h1:cZ6oNVrsmsi3SNlnSnRio4zOgtQq+/XidwsaNgKICcg= +github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a/go.mod h1:xBw/SYJPgUMPQ1tklV/brGn2nxhfr3BnvBzNlyi4Nic= +github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da h1:Mq6cbHbPTLLTUfA9scrwBmOGkvl6y99E3WmtMIMqo30= +github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da/go.mod h1:AiZ+UPgrkO1DTnmiAX4b+kRoV1Vfc65UkYD7RbFlIZA= github.com/metacubex/randv2 v0.2.0 h1:uP38uBvV2SxYfLj53kuvAjbND4RUDfFJjwr4UigMiLs= github.com/metacubex/randv2 v0.2.0/go.mod h1:kFi2SzrQ5WuneuoLLCMkABtiBu6VRrMrWFqSPyj2cxY= -github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908 h1:cZYdGEQKfLsw//TI7dk9bdplz48zitpEDbDGusB9d40= -github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000 h1:gUbMXcQXhXGj0vCpCVFTUyIH7TMpD1dpTcNv/MCS+ok= +github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4 h1:HobpULaPK6OoxrHMmgcwLkwwIduXVmwdcznwUfH1GQM= github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4/go.mod h1:g7Mxj7b7zm7YVqD975mk/hSmrb0A0G4bVvIMr2MMzn8= github.com/metacubex/sing-shadowsocks v0.2.8 h1:wIhlaigswzjPw4hej75sEvWte3QR0+AJRafgwBHO5B4= github.com/metacubex/sing-shadowsocks v0.2.8/go.mod h1:X3x88XtJpBxG0W0/ECOJL6Ib0SJ3xdniAkU/6/RMWU0= github.com/metacubex/sing-shadowsocks2 v0.2.2 h1:eaf42uVx4Lr21S6MDYs0ZdTvGA0GEhDpb9no4+gdXPo= github.com/metacubex/sing-shadowsocks2 v0.2.2/go.mod h1:BhOug03a/RbI7y6hp6q+6ITM1dXjnLTmeWBHSTwvv2Q= -github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98 h1:vW0QDrzUc4k1yi3A76lDW064zonPj880QFcpTD58u7A= -github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98/go.mod h1:GRcrj7VnhvYFsS34cv0J2qTVm5h9DvQuGwliVyVLVvE= +github.com/metacubex/sing-tun v0.4.2 h1:fwrQp3P536Pswu6gR1FJ+8GH55e+t2+B8LHIjwRtWbc= +github.com/metacubex/sing-tun v0.4.2/go.mod h1:V0N4rr0dWPBEE20ESkTXdbtx2riQYcb6YtwC5w/9wl0= github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9 h1:OAXiCosqY8xKDp3pqTW3qbrCprZ1l6WkrXSFSCwyY4I= github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9/go.mod h1:olVkD4FChQ5gKMHG4ZzuD7+fMkJY1G8vwOKpRehjrmY= -github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3 h1:xg71VmzLS6ByAzi/57phwDvjE+dLLs+ozH00k4DnOns= -github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3/go.mod h1:6nitcmzPDL3MXnLdhu6Hm126Zk4S1fBbX3P7jxUxSFw= +github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589 h1:Z6bNy0HLTjx6BKIkV48sV/yia/GP8Bnyb5JQuGgSGzg= +github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589/go.mod h1:4NclTLIZuk+QkHVCGrP87rHi/y8YjgPytxTgApJNMhc= github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa h1:9mcjV+RGZVC3reJBNDjjNPyS8PmFG97zq56X7WNaFO4= github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa/go.mod h1:4tLB5c8U0CxpkFM+AJJB77jEaVDbLH5XQvy42vAGsWw= github.com/metacubex/utls v1.6.6 h1:3D12YKHTf2Z41UPhQU2dWerNWJ5TVQD9gKoQ+H+iLC8= @@ -230,8 +230,8 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= @@ -240,11 +240,11 @@ golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -261,14 +261,14 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= diff --git a/clash-meta-android/core/src/foss/golang/clash/rules/common/ipcidr.go b/clash-meta-android/core/src/foss/golang/clash/rules/common/ipcidr.go index 663c9397c9..9c159502b4 100644 --- a/clash-meta-android/core/src/foss/golang/clash/rules/common/ipcidr.go +++ b/clash-meta-android/core/src/foss/golang/clash/rules/common/ipcidr.go @@ -40,7 +40,7 @@ func (i *IPCIDR) Match(metadata *C.Metadata) (bool, string) { if i.isSourceIP { ip = metadata.SrcIP } - return ip.IsValid() && i.ipnet.Contains(ip), i.adapter + return ip.IsValid() && i.ipnet.Contains(ip.WithZone("")), i.adapter } func (i *IPCIDR) Adapter() string { diff --git a/clash-meta-android/core/src/foss/golang/clash/rules/provider/parse.go b/clash-meta-android/core/src/foss/golang/clash/rules/provider/parse.go index 3bd8f54c8e..b04096fb3c 100644 --- a/clash-meta-android/core/src/foss/golang/clash/rules/provider/parse.go +++ b/clash-meta-android/core/src/foss/golang/clash/rules/provider/parse.go @@ -16,13 +16,14 @@ var ( ) type ruleProviderSchema struct { - Type string `provider:"type"` - Behavior string `provider:"behavior"` - Path string `provider:"path,omitempty"` - URL string `provider:"url,omitempty"` - Proxy string `provider:"proxy,omitempty"` - Format string `provider:"format,omitempty"` - Interval int `provider:"interval,omitempty"` + Type string `provider:"type"` + Behavior string `provider:"behavior"` + Path string `provider:"path,omitempty"` + URL string `provider:"url,omitempty"` + Proxy string `provider:"proxy,omitempty"` + Format string `provider:"format,omitempty"` + Interval int `provider:"interval,omitempty"` + SizeLimit int64 `provider:"size-limit,omitempty"` } func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (P.RuleProvider, error) { @@ -53,7 +54,7 @@ func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(t return nil, fmt.Errorf("%w: %s", errSubPath, path) } } - vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout) + vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout, schema.SizeLimit) default: return nil, fmt.Errorf("unsupported vehicle type: %s", schema.Type) } diff --git a/clash-meta-android/core/src/foss/golang/go.mod b/clash-meta-android/core/src/foss/golang/go.mod index 34ce0713f1..ce8174e46b 100644 --- a/clash-meta-android/core/src/foss/golang/go.mod +++ b/clash-meta-android/core/src/foss/golang/go.mod @@ -29,7 +29,7 @@ require ( github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.4.0 // indirect github.com/gofrs/uuid/v5 v5.3.0 // indirect - github.com/google/btree v1.1.2 // indirect + github.com/google/btree v1.1.3 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect github.com/hashicorp/yamux v0.1.1 // indirect @@ -46,16 +46,16 @@ require ( github.com/metacubex/bbolt v0.0.0-20240822011022-aed6d4850399 // indirect github.com/metacubex/chacha v0.1.0 // indirect github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 // indirect - github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec // indirect + github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a // indirect github.com/metacubex/mihomo v1.7.0 // indirect - github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2 // indirect + github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da // indirect github.com/metacubex/randv2 v0.2.0 // indirect github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4 // indirect github.com/metacubex/sing-shadowsocks v0.2.8 // indirect github.com/metacubex/sing-shadowsocks2 v0.2.2 // indirect - github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98 // indirect + github.com/metacubex/sing-tun v0.4.2 // indirect github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9 // indirect - github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3 // indirect + github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589 // indirect github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa // indirect github.com/metacubex/utls v1.6.6 // indirect github.com/metacubex/wireguard-go v0.0.0-20240922131502-c182e7471181 // indirect @@ -74,7 +74,7 @@ require ( github.com/sagernet/fswatch v0.1.1 // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/sagernet/nftables v0.3.0-beta.4 // indirect - github.com/sagernet/sing v0.5.0 // indirect + github.com/sagernet/sing v0.5.1 // indirect github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6 // indirect github.com/sagernet/sing-shadowtls v0.1.4 // indirect github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 // indirect @@ -97,21 +97,21 @@ require ( gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect go.uber.org/mock v0.4.0 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect golang.org/x/mod v0.20.0 // indirect - golang.org/x/net v0.30.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.19.0 // indirect - golang.org/x/time v0.5.0 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect + golang.org/x/time v0.7.0 // indirect golang.org/x/tools v0.24.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.3.0 // indirect ) -replace github.com/sagernet/sing => github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908 +replace github.com/sagernet/sing => github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000 replace cfa => ../../main/golang diff --git a/clash-meta-android/core/src/foss/golang/go.sum b/clash-meta-android/core/src/foss/golang/go.sum index 7002df77d2..d236cb06b3 100644 --- a/clash-meta-android/core/src/foss/golang/go.sum +++ b/clash-meta-android/core/src/foss/golang/go.sum @@ -59,8 +59,8 @@ github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk= github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -98,26 +98,26 @@ github.com/metacubex/chacha v0.1.0 h1:tg9RSJ18NvL38cCWNyYH1eiG6qDCyyXIaTLQthon0s github.com/metacubex/chacha v0.1.0/go.mod h1:Djn9bPZxLTXbJFSeyo0/qzEzQI+gUSSzttuzZM75GH8= github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 h1:cjd4biTvOzK9ubNCCkQ+ldc4YSH/rILn53l/xGBFHHI= github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759/go.mod h1:UHOv2xu+RIgLwpXca7TLrXleEd4oR3sPatW6IF8wU88= -github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec h1:HxreOiFTUrJXJautEo8rnE1uKTVGY8wtZepY1Tii/Nc= -github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec/go.mod h1:8BVmQ+3cxjqzWElafm24rb2Ae4jRI6vAXNXWqWjfrXw= -github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2 h1:1prpWzQnhN/LgGTMA6nz86MGcppDUOwfRkhxPOnrzAk= -github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2/go.mod h1:AiZ+UPgrkO1DTnmiAX4b+kRoV1Vfc65UkYD7RbFlIZA= +github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a h1:cZ6oNVrsmsi3SNlnSnRio4zOgtQq+/XidwsaNgKICcg= +github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a/go.mod h1:xBw/SYJPgUMPQ1tklV/brGn2nxhfr3BnvBzNlyi4Nic= +github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da h1:Mq6cbHbPTLLTUfA9scrwBmOGkvl6y99E3WmtMIMqo30= +github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da/go.mod h1:AiZ+UPgrkO1DTnmiAX4b+kRoV1Vfc65UkYD7RbFlIZA= github.com/metacubex/randv2 v0.2.0 h1:uP38uBvV2SxYfLj53kuvAjbND4RUDfFJjwr4UigMiLs= github.com/metacubex/randv2 v0.2.0/go.mod h1:kFi2SzrQ5WuneuoLLCMkABtiBu6VRrMrWFqSPyj2cxY= -github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908 h1:cZYdGEQKfLsw//TI7dk9bdplz48zitpEDbDGusB9d40= -github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000 h1:gUbMXcQXhXGj0vCpCVFTUyIH7TMpD1dpTcNv/MCS+ok= +github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4 h1:HobpULaPK6OoxrHMmgcwLkwwIduXVmwdcznwUfH1GQM= github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4/go.mod h1:g7Mxj7b7zm7YVqD975mk/hSmrb0A0G4bVvIMr2MMzn8= github.com/metacubex/sing-shadowsocks v0.2.8 h1:wIhlaigswzjPw4hej75sEvWte3QR0+AJRafgwBHO5B4= github.com/metacubex/sing-shadowsocks v0.2.8/go.mod h1:X3x88XtJpBxG0W0/ECOJL6Ib0SJ3xdniAkU/6/RMWU0= github.com/metacubex/sing-shadowsocks2 v0.2.2 h1:eaf42uVx4Lr21S6MDYs0ZdTvGA0GEhDpb9no4+gdXPo= github.com/metacubex/sing-shadowsocks2 v0.2.2/go.mod h1:BhOug03a/RbI7y6hp6q+6ITM1dXjnLTmeWBHSTwvv2Q= -github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98 h1:vW0QDrzUc4k1yi3A76lDW064zonPj880QFcpTD58u7A= -github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98/go.mod h1:GRcrj7VnhvYFsS34cv0J2qTVm5h9DvQuGwliVyVLVvE= +github.com/metacubex/sing-tun v0.4.2 h1:fwrQp3P536Pswu6gR1FJ+8GH55e+t2+B8LHIjwRtWbc= +github.com/metacubex/sing-tun v0.4.2/go.mod h1:V0N4rr0dWPBEE20ESkTXdbtx2riQYcb6YtwC5w/9wl0= github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9 h1:OAXiCosqY8xKDp3pqTW3qbrCprZ1l6WkrXSFSCwyY4I= github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9/go.mod h1:olVkD4FChQ5gKMHG4ZzuD7+fMkJY1G8vwOKpRehjrmY= -github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3 h1:xg71VmzLS6ByAzi/57phwDvjE+dLLs+ozH00k4DnOns= -github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3/go.mod h1:6nitcmzPDL3MXnLdhu6Hm126Zk4S1fBbX3P7jxUxSFw= +github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589 h1:Z6bNy0HLTjx6BKIkV48sV/yia/GP8Bnyb5JQuGgSGzg= +github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589/go.mod h1:4NclTLIZuk+QkHVCGrP87rHi/y8YjgPytxTgApJNMhc= github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa h1:9mcjV+RGZVC3reJBNDjjNPyS8PmFG97zq56X7WNaFO4= github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa/go.mod h1:4tLB5c8U0CxpkFM+AJJB77jEaVDbLH5XQvy42vAGsWw= github.com/metacubex/utls v1.6.6 h1:3D12YKHTf2Z41UPhQU2dWerNWJ5TVQD9gKoQ+H+iLC8= @@ -223,8 +223,8 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= @@ -233,11 +233,11 @@ golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -254,14 +254,14 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= diff --git a/clash-meta-android/core/src/main/golang/go.mod b/clash-meta-android/core/src/main/golang/go.mod index 78419a85e7..0c9a54b9a9 100644 --- a/clash-meta-android/core/src/main/golang/go.mod +++ b/clash-meta-android/core/src/main/golang/go.mod @@ -5,13 +5,13 @@ go 1.20 require ( github.com/dlclark/regexp2 v1.11.4 github.com/metacubex/mihomo v1.7.0 - golang.org/x/sync v0.8.0 + golang.org/x/sync v0.9.0 gopkg.in/yaml.v3 v3.0.1 ) replace github.com/metacubex/mihomo => ../../foss/golang/clash -replace github.com/sagernet/sing => github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908 +replace github.com/sagernet/sing => github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000 require ( github.com/3andne/restls-client-go v0.1.6 // indirect @@ -37,7 +37,7 @@ require ( github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.4.0 // indirect github.com/gofrs/uuid/v5 v5.3.0 // indirect - github.com/google/btree v1.1.2 // indirect + github.com/google/btree v1.1.3 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect github.com/hashicorp/yamux v0.1.1 // indirect @@ -54,15 +54,15 @@ require ( github.com/metacubex/bbolt v0.0.0-20240822011022-aed6d4850399 // indirect github.com/metacubex/chacha v0.1.0 // indirect github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 // indirect - github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec // indirect - github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2 // indirect + github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a // indirect + github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da // indirect github.com/metacubex/randv2 v0.2.0 // indirect github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4 // indirect github.com/metacubex/sing-shadowsocks v0.2.8 // indirect github.com/metacubex/sing-shadowsocks2 v0.2.2 // indirect - github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98 // indirect + github.com/metacubex/sing-tun v0.4.2 // indirect github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9 // indirect - github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3 // indirect + github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589 // indirect github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa // indirect github.com/metacubex/utls v1.6.6 // indirect github.com/metacubex/wireguard-go v0.0.0-20240922131502-c182e7471181 // indirect @@ -81,7 +81,7 @@ require ( github.com/sagernet/fswatch v0.1.1 // indirect github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect github.com/sagernet/nftables v0.3.0-beta.4 // indirect - github.com/sagernet/sing v0.5.0 // indirect + github.com/sagernet/sing v0.5.1 // indirect github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6 // indirect github.com/sagernet/sing-shadowtls v0.1.4 // indirect github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 // indirect @@ -104,13 +104,13 @@ require ( gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect go.uber.org/mock v0.4.0 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect golang.org/x/mod v0.20.0 // indirect - golang.org/x/net v0.30.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.19.0 // indirect - golang.org/x/time v0.5.0 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect + golang.org/x/time v0.7.0 // indirect golang.org/x/tools v0.24.0 // indirect google.golang.org/protobuf v1.34.2 // indirect lukechampine.com/blake3 v1.3.0 // indirect diff --git a/clash-meta-android/core/src/main/golang/go.sum b/clash-meta-android/core/src/main/golang/go.sum index 7002df77d2..d236cb06b3 100644 --- a/clash-meta-android/core/src/main/golang/go.sum +++ b/clash-meta-android/core/src/main/golang/go.sum @@ -59,8 +59,8 @@ github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk= github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -98,26 +98,26 @@ github.com/metacubex/chacha v0.1.0 h1:tg9RSJ18NvL38cCWNyYH1eiG6qDCyyXIaTLQthon0s github.com/metacubex/chacha v0.1.0/go.mod h1:Djn9bPZxLTXbJFSeyo0/qzEzQI+gUSSzttuzZM75GH8= github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 h1:cjd4biTvOzK9ubNCCkQ+ldc4YSH/rILn53l/xGBFHHI= github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759/go.mod h1:UHOv2xu+RIgLwpXca7TLrXleEd4oR3sPatW6IF8wU88= -github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec h1:HxreOiFTUrJXJautEo8rnE1uKTVGY8wtZepY1Tii/Nc= -github.com/metacubex/gvisor v0.0.0-20240320004321-933faba989ec/go.mod h1:8BVmQ+3cxjqzWElafm24rb2Ae4jRI6vAXNXWqWjfrXw= -github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2 h1:1prpWzQnhN/LgGTMA6nz86MGcppDUOwfRkhxPOnrzAk= -github.com/metacubex/quic-go v0.48.2-0.20241105005628-a3e65bac65b2/go.mod h1:AiZ+UPgrkO1DTnmiAX4b+kRoV1Vfc65UkYD7RbFlIZA= +github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a h1:cZ6oNVrsmsi3SNlnSnRio4zOgtQq+/XidwsaNgKICcg= +github.com/metacubex/gvisor v0.0.0-20241126021258-5b028898cc5a/go.mod h1:xBw/SYJPgUMPQ1tklV/brGn2nxhfr3BnvBzNlyi4Nic= +github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da h1:Mq6cbHbPTLLTUfA9scrwBmOGkvl6y99E3WmtMIMqo30= +github.com/metacubex/quic-go v0.48.3-0.20241126053724-b69fea3888da/go.mod h1:AiZ+UPgrkO1DTnmiAX4b+kRoV1Vfc65UkYD7RbFlIZA= github.com/metacubex/randv2 v0.2.0 h1:uP38uBvV2SxYfLj53kuvAjbND4RUDfFJjwr4UigMiLs= github.com/metacubex/randv2 v0.2.0/go.mod h1:kFi2SzrQ5WuneuoLLCMkABtiBu6VRrMrWFqSPyj2cxY= -github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908 h1:cZYdGEQKfLsw//TI7dk9bdplz48zitpEDbDGusB9d40= -github.com/metacubex/sing v0.0.0-20241105005934-13bf5e941908/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000 h1:gUbMXcQXhXGj0vCpCVFTUyIH7TMpD1dpTcNv/MCS+ok= +github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4 h1:HobpULaPK6OoxrHMmgcwLkwwIduXVmwdcznwUfH1GQM= github.com/metacubex/sing-quic v0.0.0-20240827003841-cd97758ed8b4/go.mod h1:g7Mxj7b7zm7YVqD975mk/hSmrb0A0G4bVvIMr2MMzn8= github.com/metacubex/sing-shadowsocks v0.2.8 h1:wIhlaigswzjPw4hej75sEvWte3QR0+AJRafgwBHO5B4= github.com/metacubex/sing-shadowsocks v0.2.8/go.mod h1:X3x88XtJpBxG0W0/ECOJL6Ib0SJ3xdniAkU/6/RMWU0= github.com/metacubex/sing-shadowsocks2 v0.2.2 h1:eaf42uVx4Lr21S6MDYs0ZdTvGA0GEhDpb9no4+gdXPo= github.com/metacubex/sing-shadowsocks2 v0.2.2/go.mod h1:BhOug03a/RbI7y6hp6q+6ITM1dXjnLTmeWBHSTwvv2Q= -github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98 h1:vW0QDrzUc4k1yi3A76lDW064zonPj880QFcpTD58u7A= -github.com/metacubex/sing-tun v0.2.7-0.20241106120309-53606a70db98/go.mod h1:GRcrj7VnhvYFsS34cv0J2qTVm5h9DvQuGwliVyVLVvE= +github.com/metacubex/sing-tun v0.4.2 h1:fwrQp3P536Pswu6gR1FJ+8GH55e+t2+B8LHIjwRtWbc= +github.com/metacubex/sing-tun v0.4.2/go.mod h1:V0N4rr0dWPBEE20ESkTXdbtx2riQYcb6YtwC5w/9wl0= github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9 h1:OAXiCosqY8xKDp3pqTW3qbrCprZ1l6WkrXSFSCwyY4I= github.com/metacubex/sing-vmess v0.1.9-0.20240719134745-1df6fb20bbf9/go.mod h1:olVkD4FChQ5gKMHG4ZzuD7+fMkJY1G8vwOKpRehjrmY= -github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3 h1:xg71VmzLS6ByAzi/57phwDvjE+dLLs+ozH00k4DnOns= -github.com/metacubex/sing-wireguard v0.0.0-20240924052438-b0976fc59ea3/go.mod h1:6nitcmzPDL3MXnLdhu6Hm126Zk4S1fBbX3P7jxUxSFw= +github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589 h1:Z6bNy0HLTjx6BKIkV48sV/yia/GP8Bnyb5JQuGgSGzg= +github.com/metacubex/sing-wireguard v0.0.0-20241126021510-0827d417b589/go.mod h1:4NclTLIZuk+QkHVCGrP87rHi/y8YjgPytxTgApJNMhc= github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa h1:9mcjV+RGZVC3reJBNDjjNPyS8PmFG97zq56X7WNaFO4= github.com/metacubex/tfo-go v0.0.0-20241006021335-daedaf0ca7aa/go.mod h1:4tLB5c8U0CxpkFM+AJJB77jEaVDbLH5XQvy42vAGsWw= github.com/metacubex/utls v1.6.6 h1:3D12YKHTf2Z41UPhQU2dWerNWJ5TVQD9gKoQ+H+iLC8= @@ -223,8 +223,8 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= @@ -233,11 +233,11 @@ golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -254,14 +254,14 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index d0b444bde1..000aa4fe94 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -849,7 +849,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.12.1", + "itertools 0.10.5", "lazy_static", "lazycell", "log", @@ -4707,7 +4707,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -8534,9 +8534,9 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4307310e1d2c09ab110235834722e7c2b85099b683e1eb7342ab351b0be5ada3" +checksum = "0962c2b9210e43cd849790d33bdf3d28c0e50d9884493fb340835244a708b5ba" dependencies = [ "log", "raw-window-handle", @@ -8546,15 +8546,15 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", - "thiserror 1.0.69", + "thiserror 2.0.3", "url", ] [[package]] name = "tauri-plugin-fs" -version = "2.0.3" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba7d46e86db8c830d143ef90ab5a453328365b0cc834c24edea4267b16aba0" +checksum = "0cdaf6701ee5efc83161cf41004aa5aec4d255c9fb2d2b11fe518fe506acc588" dependencies = [ "anyhow", "dunce", @@ -8566,7 +8566,9 @@ dependencies = [ "serde_repr", "tauri", "tauri-plugin", - "thiserror 1.0.69", + "tauri-utils", + "thiserror 2.0.3", + "toml 0.8.19", "url", "uuid", ] diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index 4324a2977e..8f7d3086b6 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -52,14 +52,14 @@ "@csstools/normalize.css": "12.1.1", "@emotion/babel-plugin": "11.13.5", "@emotion/react": "11.13.5", - "@iconify/json": "2.2.278", + "@iconify/json": "2.2.279", "@monaco-editor/react": "4.6.0", - "@tanstack/react-router": "1.85.0", - "@tanstack/router-devtools": "1.85.0", - "@tanstack/router-plugin": "1.84.4", - "@tauri-apps/plugin-clipboard-manager": "2.0.0", + "@tanstack/react-router": "1.85.4", + "@tanstack/router-devtools": "1.85.4", + "@tanstack/router-plugin": "1.85.3", + "@tauri-apps/plugin-clipboard-manager": "2.0.1", "@tauri-apps/plugin-dialog": "2.0.1", - "@tauri-apps/plugin-fs": "2.0.2", + "@tauri-apps/plugin-fs": "2.0.3", "@tauri-apps/plugin-notification": "2.0.0", "@tauri-apps/plugin-os": "2.0.0", "@tauri-apps/plugin-process": "2.0.0", @@ -78,7 +78,7 @@ "meta-json-schema": "1.18.10", "monaco-yaml": "5.2.3", "nanoid": "5.0.9", - "sass": "1.81.0", + "sass": "1.81.1", "shiki": "1.24.0", "tailwindcss-textshadow": "2.1.3", "unplugin-auto-import": "0.18.6", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index edd5e18835..8ec33c06f6 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -42,7 +42,7 @@ "@types/d3-interpolate-path": "2.0.3", "clsx": "2.1.1", "d3-interpolate-path": "2.3.0", - "sass": "1.81.0", + "sass": "1.81.1", "tailwind-merge": "2.5.5", "typescript-plugin-css-modules": "5.1.0", "vite-plugin-dts": "4.3.0" diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index feb9e38631..1b8e4baf49 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -2,7 +2,7 @@ "manifest_version": 1, "latest": { "mihomo": "v1.18.10", - "mihomo_alpha": "alpha-9de9f1e", + "mihomo_alpha": "alpha-5a24efd", "clash_rs": "v0.7.2", "clash_premium": "2023-09-05-gdcc8d87", "clash_rs_alpha": "0.7.2-alpha+sha.866f844" @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2024-12-01T22:20:47.193Z" + "updated_at": "2024-12-02T22:21:14.102Z" } diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index eac4af90e2..0398e604a2 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -218,7 +218,7 @@ importers: version: link:../ui '@tanstack/router-zod-adapter': specifier: 1.81.5 - version: 1.81.5(@tanstack/react-router@1.85.0(@tanstack/router-generator@1.84.4)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8) + version: 1.81.5(@tanstack/react-router@1.85.4(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8) '@tauri-apps/api': specifier: 2.1.1 version: 2.1.1 @@ -305,29 +305,29 @@ importers: specifier: 11.13.5 version: 11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1) '@iconify/json': - specifier: 2.2.278 - version: 2.2.278 + specifier: 2.2.279 + version: 2.2.279 '@monaco-editor/react': specifier: 4.6.0 version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) '@tanstack/react-router': - specifier: 1.85.0 - version: 1.85.0(@tanstack/router-generator@1.84.4)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + specifier: 1.85.4 + version: 1.85.4(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) '@tanstack/router-devtools': - specifier: 1.85.0 - version: 1.85.0(@tanstack/react-router@1.85.0(@tanstack/router-generator@1.84.4)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + specifier: 1.85.4 + version: 1.85.4(@tanstack/react-router@1.85.4(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) '@tanstack/router-plugin': - specifier: 1.84.4 - version: 1.84.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + specifier: 1.85.3 + version: 1.85.3(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) '@tauri-apps/plugin-clipboard-manager': - specifier: 2.0.0 - version: 2.0.0 + specifier: 2.0.1 + version: 2.0.1 '@tauri-apps/plugin-dialog': specifier: 2.0.1 version: 2.0.1 '@tauri-apps/plugin-fs': - specifier: 2.0.2 - version: 2.0.2 + specifier: 2.0.3 + version: 2.0.3 '@tauri-apps/plugin-notification': specifier: 2.0.0 version: 2.0.0 @@ -354,13 +354,13 @@ importers: version: 13.12.2 '@vitejs/plugin-legacy': specifier: 6.0.0 - version: 6.0.0(terser@5.36.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 6.0.0(terser@5.36.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) '@vitejs/plugin-react': specifier: 4.3.4 - version: 4.3.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 4.3.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) '@vitejs/plugin-react-swc': specifier: 3.7.2 - version: 3.7.2(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 3.7.2(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) change-case: specifier: 5.4.4 version: 5.4.4 @@ -383,8 +383,8 @@ importers: specifier: 5.0.9 version: 5.0.9 sass: - specifier: 1.81.0 - version: 1.81.0 + specifier: 1.81.1 + version: 1.81.1 shiki: specifier: 1.24.0 version: 1.24.0 @@ -402,16 +402,16 @@ importers: version: 13.12.0 vite: specifier: 6.0.2 - version: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + version: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) vite-plugin-sass-dts: specifier: 1.3.29 - version: 1.3.29(postcss@8.4.49)(prettier@3.4.1)(sass-embedded@1.78.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 1.3.29(postcss@8.4.49)(prettier@3.4.1)(sass-embedded@1.78.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) vite-plugin-svgr: specifier: 4.3.0 - version: 4.3.0(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 4.3.0(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) vite-tsconfig-paths: specifier: 5.1.3 - version: 5.1.3(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 5.1.3(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) zod: specifier: 3.23.8 version: 3.23.8 @@ -447,7 +447,7 @@ importers: version: types-react@19.0.0-rc.1 '@vitejs/plugin-react': specifier: 4.3.4 - version: 4.3.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 4.3.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) ahooks: specifier: 3.8.1 version: 3.8.1(react@19.0.0-rc.1) @@ -474,10 +474,10 @@ importers: version: 17.5.1(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) vite: specifier: 6.0.2 - version: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + version: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) vite-tsconfig-paths: specifier: 5.1.3 - version: 5.1.3(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 5.1.3(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) devDependencies: '@emotion/react': specifier: 11.13.5 @@ -492,8 +492,8 @@ importers: specifier: 2.3.0 version: 2.3.0 sass: - specifier: 1.81.0 - version: 1.81.0 + specifier: 1.81.1 + version: 1.81.1 tailwind-merge: specifier: 2.5.5 version: 2.5.5 @@ -502,7 +502,7 @@ importers: version: 5.1.0(typescript@5.7.2) vite-plugin-dts: specifier: 4.3.0 - version: 4.3.0(@types/node@22.10.1)(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) + version: 4.3.0(@types/node@22.10.1)(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)) scripts: dependencies: @@ -1699,8 +1699,8 @@ packages: '@vue/compiler-sfc': optional: true - '@iconify/json@2.2.278': - resolution: {integrity: sha512-qlCSLKYt54GX3crtQ2tSvwukA0DswXkBI/XH4HFq49Mg7uyy1o9/AEWrUdN3csODJN6ge8QT38mvMiL9/XlodQ==} + '@iconify/json@2.2.279': + resolution: {integrity: sha512-9HJWOos32Qik+Mg0fTgP/FgoCpswQPAsFAJtGQv7PN3KQ3Dwta5DDfpEj/QSwdNB9xJ/gI+aFhSlULgeah7eFA==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -2640,19 +2640,19 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tanstack/history@1.81.9': - resolution: {integrity: sha512-9MPknhhnvZKifK4jSvva6NDqYQwsNaptrRzO4ejk6yCLyi4koVG4u3C4VCeClYZY5etLEQbO8wXU9knEFZpMeg==} + '@tanstack/history@1.85.3': + resolution: {integrity: sha512-62z1qXIILvjdkQyMTVPFQedHOc6kQgunz9GHV9jSy2z1ixsDqyI9GxNj3AWx8Ucmhjwd5/P+v3XN10bsb+FzRA==} engines: {node: '>=12'} '@tanstack/match-sorter-utils@8.19.4': resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} engines: {node: '>=12'} - '@tanstack/react-router@1.85.0': - resolution: {integrity: sha512-97v99aupSRajxM3jESPhJ4cq/Jxy1cdN4SYizS6eQu3106QCaOz6nciQGbcRJvwAhWyElKWhs9NYHYK4hc4PVA==} + '@tanstack/react-router@1.85.4': + resolution: {integrity: sha512-CmrgrMtIIVnXS/og5W3glP1noBlFSD3mRaBgP6nTEbkZZ25nN1s52C35dnsMNuAQayQsVJNlkuSNZv3elfrBmA==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-generator': 1.84.4 + '@tanstack/router-generator': 1.85.3 react: '>=18' react-dom: '>=18' peerDependenciesMeta: @@ -2678,20 +2678,20 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@tanstack/router-devtools@1.85.0': - resolution: {integrity: sha512-k0UgYCOpQaEdZBsXntGIcc8+WuNeUMPxqGaR4+iY/dsrFCf9fL5Z0pVU6MIiLAx0TlXInI4XJr1YILc9bg3pKg==} + '@tanstack/router-devtools@1.85.4': + resolution: {integrity: sha512-Io8qyv5WMYa+gk83/dQ0OlcOsvCxSY2PTNEYUQ4wHfbEV1RW3IjwOVL6/n7p7TDhjD5ou4eKufF9zDykdyFldQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.85.0 + '@tanstack/react-router': ^1.85.4 react: '>=18' react-dom: '>=18' - '@tanstack/router-generator@1.84.4': - resolution: {integrity: sha512-BpzFuJRY8AllyrNnXk/NFXXGsxmyfUhfvcYqmJ7GDcoEAyMuPJ89z5+nJm/OPh5aed14I/7mPB2yC40FnZ2rWA==} + '@tanstack/router-generator@1.85.3': + resolution: {integrity: sha512-ka3hO1EPgV4h2hhECUHi4PGyCCUoo70Masb1/idyL7zzkDX/OPZnRd7JxxyneuRGKJ+GI//YWevqjAemyYeg1A==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.84.4': - resolution: {integrity: sha512-tNT6NLb6Q2jdbWu+SriO/SnahRPbTfNZFrr8W5JhrK36Ul0Usfl2frxhN1zSOBCHkRBcpcy09qf3Vt/Hcyxegw==} + '@tanstack/router-plugin@1.85.3': + resolution: {integrity: sha512-se75j7NZ+I44dcbi6CayvWhfp0r/3pfqgHNYgEQ5BSSPTtXYDaZXxFm5eU6oNxej8IqkzEZS5CMSkq9iHRvaUA==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' @@ -2800,14 +2800,14 @@ packages: engines: {node: '>= 10'} hasBin: true - '@tauri-apps/plugin-clipboard-manager@2.0.0': - resolution: {integrity: sha512-V1sXmbjnwfXt/r48RJMwfUmDMSaP/8/YbH4CLNxt+/sf1eHlIP8PRFdFDQwLN0cNQKu2rqQVbG/Wc/Ps6cDUhw==} + '@tauri-apps/plugin-clipboard-manager@2.0.1': + resolution: {integrity: sha512-JDzqqhEnIAvt3HAsejgdvPfb74da1CagHfT+71qJL6Jip4Qzu+TzxaYXilIT5p5N8ZFwE7K1nJJ2aGsEUHvJtg==} '@tauri-apps/plugin-dialog@2.0.1': resolution: {integrity: sha512-fnUrNr6EfvTqdls/ufusU7h6UbNFzLKvHk/zTuOiBq01R3dTODqwctZlzakdbfSp/7pNwTKvgKTAgl/NAP/Z0Q==} - '@tauri-apps/plugin-fs@2.0.2': - resolution: {integrity: sha512-4YZaX2j7ta81M5/DL8aN10kTnpUkEpkPo1FTYPT8Dd0ImHe3azM8i8MrtjrDGoyBYLPO3zFv7df/mSCYF8oA0Q==} + '@tauri-apps/plugin-fs@2.0.3': + resolution: {integrity: sha512-3Xv9cg5krj/2gSo1HFn9GbKUE0keh+DMx7O+hQeSzg1T4yGY5Fv/+yBISmrPa2j9thi3qcjgPj8PnMH4rbl/Dw==} '@tauri-apps/plugin-notification@2.0.0': resolution: {integrity: sha512-6qEDYJS7mgXZWLXA0EFL+DVCJh8sJlzSoyw6B50pxhLPVFjc5Vr5DVzl5W3mUHaYhod5wsC984eQnlCCGqxYDA==} @@ -6731,8 +6731,8 @@ packages: engines: {node: '>=16.0.0'} hasBin: true - sass@1.81.0: - resolution: {integrity: sha512-Q4fOxRfhmv3sqCLoGfvrC9pRV8btc0UtqL9mN6Yrv6Qi9ScL55CVH1vlPP863ISLEEMNLLuu9P+enCeGHlnzhA==} + sass@1.81.1: + resolution: {integrity: sha512-VNLgf4FC5yFyKwAumAAwwNh8X4SevlVREq3Y8aDZIkm0lI/zO1feycMXQ4hn+eB6FVhRbleSQ1Yb/q8juSldTA==} engines: {node: '>=14.0.0'} hasBin: true @@ -9029,7 +9029,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/json@2.2.278': + '@iconify/json@2.2.279': dependencies: '@iconify/types': 2.0.0 pathe: 1.1.2 @@ -9943,15 +9943,15 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tanstack/history@1.81.9': {} + '@tanstack/history@1.85.3': {} '@tanstack/match-sorter-utils@8.19.4': dependencies: remove-accents: 0.5.0 - '@tanstack/react-router@1.85.0(@tanstack/router-generator@1.84.4)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': + '@tanstack/react-router@1.85.4(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': dependencies: - '@tanstack/history': 1.81.9 + '@tanstack/history': 1.85.3 '@tanstack/react-store': 0.6.1(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) jsesc: 3.0.2 react: 19.0.0-rc.1 @@ -9959,7 +9959,7 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 optionalDependencies: - '@tanstack/router-generator': 1.84.4 + '@tanstack/router-generator': 1.85.3 '@tanstack/react-store@0.6.1(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': dependencies: @@ -9980,9 +9980,9 @@ snapshots: react: 19.0.0-rc.1 react-dom: 19.0.0-rc.1(react@19.0.0-rc.1) - '@tanstack/router-devtools@1.85.0(@tanstack/react-router@1.85.0(@tanstack/router-generator@1.84.4)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': + '@tanstack/router-devtools@1.85.4(@tanstack/react-router@1.85.4(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)': dependencies: - '@tanstack/react-router': 1.85.0(@tanstack/router-generator@1.84.4)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + '@tanstack/react-router': 1.85.4(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) react: 19.0.0-rc.1 @@ -9990,14 +9990,14 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/router-generator@1.84.4': + '@tanstack/router-generator@1.85.3': dependencies: '@tanstack/virtual-file-routes': 1.81.9 prettier: 3.4.1 tsx: 4.19.2 zod: 3.23.8 - '@tanstack/router-plugin@1.84.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1))': + '@tanstack/router-plugin@1.85.3(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1))': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.2 @@ -10007,7 +10007,7 @@ snapshots: '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 - '@tanstack/router-generator': 1.84.4 + '@tanstack/router-generator': 1.85.3 '@tanstack/virtual-file-routes': 1.81.9 '@types/babel__core': 7.20.5 '@types/babel__generator': 7.6.8 @@ -10018,13 +10018,13 @@ snapshots: unplugin: 1.16.0 zod: 3.23.8 optionalDependencies: - vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) transitivePeerDependencies: - supports-color - '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.85.0(@tanstack/router-generator@1.84.4)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8)': + '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.85.4(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8)': dependencies: - '@tanstack/react-router': 1.85.0(@tanstack/router-generator@1.84.4)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) + '@tanstack/react-router': 1.85.4(@tanstack/router-generator@1.85.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1) zod: 3.23.8 '@tanstack/store@0.6.0': {} @@ -10086,7 +10086,7 @@ snapshots: '@tauri-apps/cli-win32-ia32-msvc': 2.1.0 '@tauri-apps/cli-win32-x64-msvc': 2.1.0 - '@tauri-apps/plugin-clipboard-manager@2.0.0': + '@tauri-apps/plugin-clipboard-manager@2.0.1': dependencies: '@tauri-apps/api': 2.1.1 @@ -10094,7 +10094,7 @@ snapshots: dependencies: '@tauri-apps/api': 2.1.1 - '@tauri-apps/plugin-fs@2.0.2': + '@tauri-apps/plugin-fs@2.0.3': dependencies: '@tauri-apps/api': 2.1.1 @@ -10466,7 +10466,7 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-legacy@6.0.0(terser@5.36.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1))': + '@vitejs/plugin-legacy@6.0.0(terser@5.36.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1))': dependencies: '@babel/core': 7.26.0 '@babel/preset-env': 7.26.0(@babel/core@7.26.0) @@ -10477,25 +10477,25 @@ snapshots: regenerator-runtime: 0.14.1 systemjs: 6.15.1 terser: 5.36.0 - vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react-swc@3.7.2(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1))': + '@vitejs/plugin-react-swc@3.7.2(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1))': dependencies: '@swc/core': 1.7.26 - vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.3.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1))': + '@vitejs/plugin-react@4.3.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) transitivePeerDependencies: - supports-color @@ -14406,7 +14406,7 @@ snapshots: sass-embedded-win32-ia32: 1.78.0 sass-embedded-win32-x64: 1.78.0 - sass@1.81.0: + sass@1.81.1: dependencies: chokidar: 4.0.0 immutable: 5.0.2 @@ -15098,7 +15098,7 @@ snapshots: postcss-modules-local-by-default: 4.0.5(postcss@8.4.47) postcss-modules-scope: 3.2.0(postcss@8.4.47) reserved-words: 0.1.2 - sass: 1.81.0 + sass: 1.81.1 source-map-js: 1.2.1 stylus: 0.62.0 tsconfig-paths: 4.2.0 @@ -15330,7 +15330,7 @@ snapshots: - rollup - supports-color - vite-plugin-dts@4.3.0(@types/node@22.10.1)(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)): + vite-plugin-dts@4.3.0(@types/node@22.10.1)(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)): dependencies: '@microsoft/api-extractor': 7.47.11(@types/node@22.10.1) '@rollup/pluginutils': 5.1.0(rollup@4.27.4) @@ -15343,43 +15343,43 @@ snapshots: magic-string: 0.30.11 typescript: 5.7.2 optionalDependencies: - vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-sass-dts@1.3.29(postcss@8.4.49)(prettier@3.4.1)(sass-embedded@1.78.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)): + vite-plugin-sass-dts@1.3.29(postcss@8.4.49)(prettier@3.4.1)(sass-embedded@1.78.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)): dependencies: postcss: 8.4.49 postcss-js: 4.0.1(postcss@8.4.49) prettier: 3.4.1 sass-embedded: 1.78.0 - vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) - vite-plugin-svgr@4.3.0(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)): + vite-plugin-svgr@4.3.0(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)): dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.27.4) '@svgr/core': 8.1.0(typescript@5.7.2) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.7.2)) - vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@5.1.3(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)): + vite-tsconfig-paths@5.1.3(typescript@5.7.2)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.7.2) optionalDependencies: - vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1) transitivePeerDependencies: - supports-color - typescript - vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1): + vite@6.0.2(@types/node@22.10.1)(jiti@2.4.0)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.1)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.5.1): dependencies: esbuild: 0.24.0 postcss: 8.4.49 @@ -15389,7 +15389,7 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.0 less: 4.2.0 - sass: 1.81.0 + sass: 1.81.1 sass-embedded: 1.78.0 stylus: 0.62.0 terser: 5.36.0 diff --git a/filebrowser/frontend/package-lock.json b/filebrowser/frontend/package-lock.json index 5dc0c1e573..ba2f143630 100644 --- a/filebrowser/frontend/package-lock.json +++ b/filebrowser/frontend/package-lock.json @@ -31,7 +31,7 @@ "videojs-mobile-ui": "^1.1.1", "vue": "^3.4.21", "vue-final-modal": "^4.5.4", - "vue-i18n": "^9.10.2", + "vue-i18n": "^9.14.2", "vue-lazyload": "^3.0.0", "vue-reader": "^1.2.14", "vue-router": "^4.3.0", @@ -2337,12 +2337,12 @@ } }, "node_modules/@intlify/core-base": { - "version": "9.10.2", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.10.2.tgz", - "integrity": "sha512-HGStVnKobsJL0DoYIyRCGXBH63DMQqEZxDUGrkNI05FuTcruYUtOAxyL3zoAZu/uDGO6mcUvm3VXBaHG2GdZCg==", + "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.2.tgz", + "integrity": "sha512-DZyQ4Hk22sC81MP4qiCDuU+LdaYW91A6lCjq8AWPvY3+mGMzhGDfOCzvyR6YBQxtlPjFqMoFk9ylnNYRAQwXtQ==", "dependencies": { - "@intlify/message-compiler": "9.10.2", - "@intlify/shared": "9.10.2" + "@intlify/message-compiler": "9.14.2", + "@intlify/shared": "9.14.2" }, "engines": { "node": ">= 16" @@ -2352,11 +2352,11 @@ } }, "node_modules/@intlify/message-compiler": { - "version": "9.10.2", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.10.2.tgz", - "integrity": "sha512-ntY/kfBwQRtX5Zh6wL8cSATujPzWW2ZQd1QwKyWwAy5fMqJyyixHMeovN4fmEyCqSu+hFfYOE63nU94evsy4YA==", + "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.2.tgz", + "integrity": "sha512-YsKKuV4Qv4wrLNsvgWbTf0E40uRv+Qiw1BeLQ0LAxifQuhiMe+hfTIzOMdWj/ZpnTDj4RSZtkXjJM7JDiiB5LQ==", "dependencies": { - "@intlify/shared": "9.10.2", + "@intlify/shared": "9.14.2", "source-map-js": "^1.0.2" }, "engines": { @@ -2367,9 +2367,9 @@ } }, "node_modules/@intlify/shared": { - "version": "9.10.2", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.10.2.tgz", - "integrity": "sha512-ttHCAJkRy7R5W2S9RVnN9KYQYPIpV2+GiS79T4EE37nrPyH6/1SrOh3bmdCRC1T3ocL8qCDx7x2lBJ0xaITU7Q==", + "version": "9.14.2", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.2.tgz", + "integrity": "sha512-uRAHAxYPeF+G5DBIboKpPgC/Waecd4Jz8ihtkpJQD5ycb5PwXp0k/+hBGl5dAjwF7w+l74kz/PKA8r8OK//RUw==", "engines": { "node": ">= 16" }, @@ -7587,12 +7587,12 @@ } }, "node_modules/vue-i18n": { - "version": "9.10.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.10.2.tgz", - "integrity": "sha512-ECJ8RIFd+3c1d3m1pctQ6ywG5Yj8Efy1oYoAKQ9neRdkLbuKLVeW4gaY5HPkD/9ssf1pOnUrmIFjx2/gkGxmEw==", + "version": "9.14.2", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.2.tgz", + "integrity": "sha512-JK9Pm80OqssGJU2Y6F7DcM8RFHqVG4WkuCqOZTVsXkEzZME7ABejAUqUdA931zEBedc4thBgSUWxeQh4uocJAQ==", "dependencies": { - "@intlify/core-base": "9.10.2", - "@intlify/shared": "9.10.2", + "@intlify/core-base": "9.14.2", + "@intlify/shared": "9.14.2", "@vue/devtools-api": "^6.5.0" }, "engines": { diff --git a/filebrowser/frontend/package.json b/filebrowser/frontend/package.json index a369a933d7..8322aada97 100644 --- a/filebrowser/frontend/package.json +++ b/filebrowser/frontend/package.json @@ -41,7 +41,7 @@ "videojs-mobile-ui": "^1.1.1", "vue": "^3.4.21", "vue-final-modal": "^4.5.4", - "vue-i18n": "^9.10.2", + "vue-i18n": "^9.14.2", "vue-lazyload": "^3.0.0", "vue-reader": "^1.2.14", "vue-router": "^4.3.0", diff --git a/lede/README.md b/lede/README.md index 8461a5751e..9bebaaf333 100644 --- a/lede/README.md +++ b/lede/README.md @@ -8,7 +8,7 @@ I18N: [English](README_EN.md) | [简体中文](README.md) | [日本語](README_J 如有技术问题需要讨论或者交流,欢迎加入以下群: -1. QQ 讨论群:Op 固件技术研究群,号码 891659613,加群链接:[点击加入](https://jq.qq.com/?_wv=1027&k=XL8SK5aC "Op固件技术研究群") +1. QQ 讨论群:Op 固件技术研究群,号码 891659613,加群链接:[点击加入](https://qm.qq.com/q/IMa6Yf2SgC "Op固件技术研究群") 2. TG 讨论群:OP 编译官方大群,加群链接:[点击加入](https://t.me/JhKgAA6Hx1 "OP 编译官方大群") ## 软路由 ArmSoM Sige 系列介绍 @@ -39,8 +39,8 @@ ArmSoM-Sige 系列:软路由、单板计算机、小型服务器与智能家 sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \ bzip2 ccache clang cmake cpio curl device-tree-compiler flex gawk gettext gcc-multilib g++-multilib \ git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev \ - libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \ - libssl-dev libtool llvm lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python3 \ + libltdl-dev libmpc-dev libmpfr-dev libncurses-dev libncurses-dev libpython3-dev libreadline-dev \ + libssl-dev libtool llvm lrzsz genisoimage msmtp ninja-build p7zip p7zip-full patch pkgconf python3 \ python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \ uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev ``` @@ -63,7 +63,7 @@ ArmSoM-Sige 系列:软路由、单板计算机、小型服务器与智能家 make V=s -j1 ``` -本套代码保证肯定可以编译成功。里面包括了 R23 所有源代码,包括 IPK 的。 +本套代码保证肯定可以编译成功。里面包括了 R24 所有源代码,包括 IPK 的。 你可以自由使用,但源码编译二次发布请注明我的 GitHub 仓库链接。谢谢合作! diff --git a/lede/include/meson.mk b/lede/include/meson.mk index 7d67dcf298..62dc7bd5de 100644 --- a/lede/include/meson.mk +++ b/lede/include/meson.mk @@ -55,8 +55,14 @@ else MESON_CPU:="$(CPU_TYPE)$(if $(CPU_SUBTYPE),+$(CPU_SUBTYPE))" endif +ifeq ($(MESON_USE_STAGING_PYTHON),) +PYTHON_BIN:=$(STAGING_DIR_HOST)/bin/$(PYTHON) +else +PYTHON_BIN:=$(STAGING_DIR_HOSTPKG)/bin/$(PYTHON) +endif + define Meson - $(2) $(STAGING_DIR_HOST)/bin/$(PYTHON) $(STAGING_DIR_HOST)/bin/meson.py $(1) + $(2) $(PYTHON_BIN) $(STAGING_DIR_HOST)/bin/meson.py $(1) endef define Meson/CreateNativeFile @@ -65,7 +71,7 @@ define Meson/CreateNativeFile -e "s|@CXX@|$(foreach BIN,$(HOSTCXX),'$(BIN)',)|" \ -e "s|@PKGCONFIG@|$(PKG_CONFIG)|" \ -e "s|@CMAKE@|$(STAGING_DIR_HOST)/bin/cmake|" \ - -e "s|@PYTHON@|$(STAGING_DIR_HOST)/bin/python3|" \ + -e "s|@PYTHON@|$(PYTHON_BIN)|" \ -e "s|@CFLAGS@|$(foreach FLAG,$(HOST_CFLAGS) $(HOST_CPPFLAGS),'$(FLAG)',)|" \ -e "s|@CXXFLAGS@|$(foreach FLAG,$(HOST_CXXFLAGS) $(HOST_CPPFLAGS),'$(FLAG)',)|" \ -e "s|@LDFLAGS@|$(foreach FLAG,$(HOST_LDFLAGS),'$(FLAG)',)|" \ @@ -78,12 +84,13 @@ define Meson/CreateCrossFile $(STAGING_DIR_HOST)/bin/sed \ -e "s|@CC@|$(foreach BIN,$(TARGET_CC),'$(BIN)',)|" \ -e "s|@CXX@|$(foreach BIN,$(TARGET_CXX),'$(BIN)',)|" \ + -e "s|@LD@|$(foreach FLAG,$(TARGET_LINKER),'$(FLAG)',)|" \ -e "s|@AR@|$(TARGET_AR)|" \ -e "s|@STRIP@|$(TARGET_CROSS)strip|" \ -e "s|@NM@|$(TARGET_NM)|" \ -e "s|@PKGCONFIG@|$(PKG_CONFIG)|" \ -e "s|@CMAKE@|$(STAGING_DIR_HOST)/bin/cmake|" \ - -e "s|@PYTHON@|$(STAGING_DIR_HOST)/bin/python3|" \ + -e "s|@PYTHON@|$(PYTHON_BIN)|" \ -e "s|@CFLAGS@|$(foreach FLAG,$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS),'$(FLAG)',)|" \ -e "s|@CXXFLAGS@|$(foreach FLAG,$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS),'$(FLAG)',)|" \ -e "s|@LDFLAGS@|$(foreach FLAG,$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS),'$(FLAG)',)|" \ @@ -97,7 +104,9 @@ endef define Host/Configure/Meson $(call Meson/CreateNativeFile,$(HOST_BUILD_DIR)/openwrt-native.txt) $(call Meson, \ + setup \ --native-file $(HOST_BUILD_DIR)/openwrt-native.txt \ + -Ddefault_library=static \ $(MESON_HOST_ARGS) \ $(MESON_HOST_BUILD_DIR) \ $(MESON_HOST_BUILD_DIR)/.., \ @@ -105,7 +114,7 @@ define Host/Configure/Meson endef define Host/Compile/Meson - +$(NINJA) -C $(MESON_HOST_BUILD_DIR) $(1) + +$(MESON_HOST_VARS) $(NINJA) -C $(MESON_HOST_BUILD_DIR) $(1) endef define Host/Install/Meson @@ -120,9 +129,11 @@ define Build/Configure/Meson $(call Meson/CreateNativeFile,$(PKG_BUILD_DIR)/openwrt-native.txt) $(call Meson/CreateCrossFile,$(PKG_BUILD_DIR)/openwrt-cross.txt) $(call Meson, \ - --buildtype plain \ + setup \ + --buildtype $(if $(CONFIG_DEBUG),debug,plain) \ --native-file $(PKG_BUILD_DIR)/openwrt-native.txt \ --cross-file $(PKG_BUILD_DIR)/openwrt-cross.txt \ + -Ddefault_library=both \ $(MESON_ARGS) \ $(MESON_BUILD_DIR) \ $(MESON_BUILD_DIR)/.., \ @@ -130,7 +141,7 @@ define Build/Configure/Meson endef define Build/Compile/Meson - +$(NINJA) -C $(MESON_BUILD_DIR) $(1) + +$(MESON_VARS) $(NINJA) -C $(MESON_BUILD_DIR) $(1) endef define Build/Install/Meson diff --git a/lede/include/target.mk b/lede/include/target.mk index f59661f628..64d0f39438 100644 --- a/lede/include/target.mk +++ b/lede/include/target.mk @@ -53,7 +53,7 @@ DEFAULT_PACKAGES.nas:=\ mdadm # For router targets DEFAULT_PACKAGES.router:=\ - dnsmasq-full firewall iptables ppp ppp-mod-pppoe odhcp6c odhcpd-ipv6only \ + dnsmasq-full firewall iptables ppp ppp-mod-pppoe odhcp6c odhcpd-ipv6only ip6tables libip6tc kmod-ipt-nat6 \ block-mount coremark kmod-nf-nathelper kmod-nf-nathelper-extra kmod-ipt-raw kmod-tun \ iptables-mod-tproxy iptables-mod-extra ipset ip-full default-settings luci luci-proto-ipv6 \ ddns-scripts_aliyun ddns-scripts_dnspod luci-app-ddns luci-app-upnp luci-app-autoreboot \ diff --git a/lede/package/lean/autosamba/Makefile b/lede/package/lean/autosamba/Makefile index e0867d94ea..a30743f3a1 100644 --- a/lede/package/lean/autosamba/Makefile +++ b/lede/package/lean/autosamba/Makefile @@ -9,21 +9,43 @@ include $(TOPDIR)/rules.mk PKG_NAME:=autosamba PKG_VERSION:=1 -PKG_RELEASE:=13 +PKG_RELEASE:=15 PKG_ARCH:=all +PKG_CONFIG_DEPENDS:= \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_KSMBD \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_SAMBA3 \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_SAMBA4 \ + include $(INCLUDE_DIR)/package.mk define Package/autosamba TITLE:=Samba autoconfig hotplug script. MAINTAINER:=Lean - DEPENDS:=+luci-app-samba4 +wsdd2 + DEPENDS:=+wsdd2 +PACKAGE_$(PKG_NAME)_INCLUDE_KSMBD:luci-app-ksmbd +PACKAGE_$(PKG_NAME)_INCLUDE_SAMBA3:luci-app-samba +PACKAGE_$(PKG_NAME)_INCLUDE_SAMBA4:luci-app-samba4 endef define Package/autosamba/description A hotplug script to config Samba share automatically. endef +define Package/$(PKG_NAME)/config +choice + prompt "Samba Server Selection" + default PACKAGE_$(PKG_NAME)_INCLUDE_KSMBD + + config PACKAGE_$(PKG_NAME)_INCLUDE_KSMBD + bool "KSMBD" + + config PACKAGE_$(PKG_NAME)_INCLUDE_SAMBA3 + bool "SAMBA 3" + + config PACKAGE_$(PKG_NAME)_INCLUDE_SAMBA4 + bool "SAMBA 4" +endchoice + +endef + define Build/Compile endef diff --git a/lede/package/libs/elfutils/Makefile b/lede/package/libs/elfutils/Makefile index 94b01d73b2..a32dd7046a 100644 --- a/lede/package/libs/elfutils/Makefile +++ b/lede/package/libs/elfutils/Makefile @@ -7,12 +7,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=elfutils -PKG_VERSION:=0.188 +PKG_VERSION:=0.192 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 -PKG_SOURCE_URL:=https://sourceware.org/$(PKG_NAME)/ftp/$(PKG_VERSION) -PKG_HASH:=fb8b0e8d0802005b9a309c60c1d8de32dd2951b56f0c3a3cb56d21ce01595dff +PKG_SOURCE_URL:=https://sourceware.org/$(PKG_NAME)/ftp/$(PKG_VERSION) \ + https://mirrors.kernel.org/sourceware/$(PKG_NAME)/$(PKG_VERSION) +PKG_HASH:=616099beae24aba11f9b63d86ca6cc8d566d968b802391334c91df54eab416b4 PKG_MAINTAINER:=Luiz Angelo Daros de Luca PKG_LICENSE:=GPL-3.0-or-later @@ -65,6 +66,7 @@ HOST_CONFIGURE_ARGS += \ --disable-nls \ --disable-debuginfod \ --disable-libdebuginfod \ + --without-bzlib \ --without-lzma \ --without-zstd @@ -72,6 +74,7 @@ CONFIGURE_ARGS += \ --program-prefix=eu- \ --disable-debuginfod \ --disable-libdebuginfod \ + --without-bzlib \ --without-lzma \ --without-zstd @@ -81,7 +84,10 @@ HOST_CONFIGURE_VARS += \ CONFIGURE_VARS += \ ac_cv_search__obstack_free=yes -TARGET_CFLAGS += -D_GNU_SOURCE -Wno-unused-result -Wno-format-nonliteral +TARGET_CFLAGS += \ + -D_GNU_SOURCE \ + -Wno-unused-result \ + -Wno-format-nonliteral ifneq ($(filter $(GCC_MAJOR_VERSION),12 13),) TARGET_CFLAGS += \ diff --git a/lede/package/libs/elfutils/patches/003-libintl-compatibility.patch b/lede/package/libs/elfutils/patches/003-libintl-compatibility.patch index ce71602d77..eda9f2204a 100644 --- a/lede/package/libs/elfutils/patches/003-libintl-compatibility.patch +++ b/lede/package/libs/elfutils/patches/003-libintl-compatibility.patch @@ -8,10 +8,10 @@ +Libs: -L${libdir} -lelf @intl_LDFLAGS@ Cflags: -I${includedir} - Requires.private: zlib + Requires.private: zlib @LIBZSTD@ --- a/configure.ac +++ b/configure.ac -@@ -652,6 +652,9 @@ dnl AM_GNU_GETTEXT_REQUIRE_VERSION suppo +@@ -728,6 +728,9 @@ dnl AM_GNU_GETTEXT_REQUIRE_VERSION suppo AM_GNU_GETTEXT_VERSION([0.19.6]) AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6]) diff --git a/lede/package/libs/elfutils/patches/005-build_only_libs.patch b/lede/package/libs/elfutils/patches/005-build_only_libs.patch index 304b85c47a..177ac659e6 100644 --- a/lede/package/libs/elfutils/patches/005-build_only_libs.patch +++ b/lede/package/libs/elfutils/patches/005-build_only_libs.patch @@ -7,5 +7,5 @@ - libasm debuginfod src po doc tests + libasm - EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING \ - COPYING COPYING-GPLV2 COPYING-LGPLV3 + EXTRA_DIST = elfutils.spec GPG-KEY NOTES CONTRIBUTING SECURITY \ + COPYING COPYING-GPLV2 COPYING-LGPLV3 CONDUCT diff --git a/lede/package/libs/elfutils/patches/006-Fix-build-on-aarch64-musl.patch b/lede/package/libs/elfutils/patches/006-Fix-build-on-aarch64-musl.patch index d8066c5ca7..a7786ed2c0 100644 --- a/lede/package/libs/elfutils/patches/006-Fix-build-on-aarch64-musl.patch +++ b/lede/package/libs/elfutils/patches/006-Fix-build-on-aarch64-musl.patch @@ -32,8 +32,8 @@ Signed-off-by: Hongxu Jia +# include # include # include - /* Deal with old glibc defining user_pt_regs instead of user_regs_struct. */ -@@ -82,7 +82,7 @@ aarch64_set_initial_registers_tid (pid_t + # include +@@ -94,7 +94,7 @@ aarch64_set_initial_registers_tid (pid_t Dwarf_Word dwarf_fregs[32]; for (int r = 0; r < 32; r++) diff --git a/lede/package/libs/elfutils/patches/007-add-libeu-symbols-to-libelf.patch b/lede/package/libs/elfutils/patches/007-add-libeu-symbols-to-libelf.patch new file mode 100644 index 0000000000..23489b5625 --- /dev/null +++ b/lede/package/libs/elfutils/patches/007-add-libeu-symbols-to-libelf.patch @@ -0,0 +1,31 @@ +From f5d6e088f84dd05278c4698a21cbf1ff4569978d Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Tue, 22 Oct 2024 15:03:42 +0200 +Subject: [PATCH] libelf: Add libeu objects to libelf.a static archive + +libelf might use some symbols from libeu.a, specifically the eu-search +wrappers. But we don't ship libeu.a separately. So include the libeu +objects in the libelf.a archive to facilitate static linking. + + * libelf/Makefile.am (libeu_objects): New variable. + (libelf_a_LIBADD): New, add libeu_objects. + +https://sourceware.org/bugzilla/show_bug.cgi?id=32293 + +Signed-off-by: Mark Wielaard +--- + libelf/Makefile.am | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/libelf/Makefile.am ++++ b/libelf/Makefile.am +@@ -122,6 +122,9 @@ libelf.so: $(srcdir)/libelf.map $(libelf + @$(textrel_check) + $(AM_V_at)ln -fs $@ $@.$(VERSION) + ++libeu_objects = $(shell $(AR) t ../lib/libeu.a) ++libelf_a_LIBADD = $(addprefix ../lib/,$(libeu_objects)) ++ + install: install-am libelf.so + $(mkinstalldirs) $(DESTDIR)$(libdir) + $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so diff --git a/lede/package/libs/elfutils/patches/008-fix-autoconf-ENABLE_IMA_VERIFICATION.patch b/lede/package/libs/elfutils/patches/008-fix-autoconf-ENABLE_IMA_VERIFICATION.patch new file mode 100644 index 0000000000..e5732d2b08 --- /dev/null +++ b/lede/package/libs/elfutils/patches/008-fix-autoconf-ENABLE_IMA_VERIFICATION.patch @@ -0,0 +1,24 @@ +From f3c664d069d81a4872a1ec8241ee709f37c53e9c Mon Sep 17 00:00:00 2001 +From: Aaron Merey +Date: Tue, 29 Oct 2024 14:16:57 -0400 +Subject: [PATCH] configure.ac: Fix ENABLE_IMA_VERIFICATION conditional + +Fix test statement for ENABLE_IMA_VERIFICATION always evalutating to +false due to a missing 'x'. + +Signed-off-by: Aaron Merey +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/configure.ac ++++ b/configure.ac +@@ -895,7 +895,7 @@ AS_IF([test "x$enable_debuginfod" != "xn + AM_CONDITIONAL([DEBUGINFOD],[test "x$enable_debuginfod" = "xyes"]) + AS_IF([test "x$enable_debuginfod_ima_verification" = "xyes"],AC_DEFINE([ENABLE_IMA_VERIFICATION],[1],[Build IMA verification])) + AS_IF([test "x$have_libarchive" = "xyes"],AC_DEFINE([HAVE_LIBARCHIVE],[1],[Define to 1 if libarchive is available])) +-AM_CONDITIONAL([ENABLE_IMA_VERIFICATION],[test "$enable_debuginfod_ima_verification" = "xyes"]) ++AM_CONDITIONAL([ENABLE_IMA_VERIFICATION],[test "x$enable_debuginfod_ima_verification" = "xyes"]) + AM_CONDITIONAL([OLD_LIBMICROHTTPD],[test "x$old_libmicrohttpd" = "xyes"]) + + dnl for /etc/profile.d/elfutils.{csh,sh} diff --git a/lede/package/libs/elfutils/patches/009-fix-null-dereference-with-lto.patch b/lede/package/libs/elfutils/patches/009-fix-null-dereference-with-lto.patch new file mode 100644 index 0000000000..1179a1e1a0 --- /dev/null +++ b/lede/package/libs/elfutils/patches/009-fix-null-dereference-with-lto.patch @@ -0,0 +1,193 @@ +From 8707194a9f2f0b13e53041b03ebfdbdbd2942e43 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Tue, 5 Nov 2024 23:31:14 +0100 +Subject: [PATCH 1/1] libelf: Only fetch shdr once in elf_compress[_gnu] + +Some compilers assume the second call to elf[32|64]_getshdr can fail +and produce error: potential null pointer dereference. Just store the +result of the first call and reuse (when not NULL). + + * libelf/elf_compress.c (elf_compress): Store getshdr result in + a shdr union var. + * libelf/elf_compress_gnu.c (): Likewise + +https://sourceware.org/bugzilla/show_bug.cgi?id=32311 + +Signed-off-by: Mark Wielaard +--- + libelf/elf_compress.c | 55 +++++++++++++++++++++------------------ + libelf/elf_compress_gnu.c | 45 ++++++++++++++------------------ + 2 files changed, 48 insertions(+), 52 deletions(-) + +--- a/libelf/elf_compress.c ++++ b/libelf/elf_compress.c +@@ -584,25 +584,30 @@ elf_compress (Elf_Scn *scn, int type, un + Elf64_Xword sh_flags; + Elf64_Word sh_type; + Elf64_Xword sh_addralign; ++ union shdr ++ { ++ Elf32_Shdr *s32; ++ Elf64_Shdr *s64; ++ } shdr; + if (elfclass == ELFCLASS32) + { +- Elf32_Shdr *shdr = elf32_getshdr (scn); +- if (shdr == NULL) ++ shdr.s32 = elf32_getshdr (scn); ++ if (shdr.s32 == NULL) + return -1; + +- sh_flags = shdr->sh_flags; +- sh_type = shdr->sh_type; +- sh_addralign = shdr->sh_addralign; ++ sh_flags = shdr.s32->sh_flags; ++ sh_type = shdr.s32->sh_type; ++ sh_addralign = shdr.s32->sh_addralign; + } + else + { +- Elf64_Shdr *shdr = elf64_getshdr (scn); +- if (shdr == NULL) ++ shdr.s64 = elf64_getshdr (scn); ++ if (shdr.s64 == NULL) + return -1; + +- sh_flags = shdr->sh_flags; +- sh_type = shdr->sh_type; +- sh_addralign = shdr->sh_addralign; ++ sh_flags = shdr.s64->sh_flags; ++ sh_type = shdr.s64->sh_type; ++ sh_addralign = shdr.s64->sh_addralign; + } + + if ((sh_flags & SHF_ALLOC) != 0) +@@ -679,17 +684,17 @@ elf_compress (Elf_Scn *scn, int type, un + correctly and ignored when SHF_COMPRESSED is set. */ + if (elfclass == ELFCLASS32) + { +- Elf32_Shdr *shdr = elf32_getshdr (scn); +- shdr->sh_size = new_size; +- shdr->sh_addralign = __libelf_type_align (ELFCLASS32, ELF_T_CHDR); +- shdr->sh_flags |= SHF_COMPRESSED; ++ shdr.s32->sh_size = new_size; ++ shdr.s32->sh_addralign = __libelf_type_align (ELFCLASS32, ++ ELF_T_CHDR); ++ shdr.s32->sh_flags |= SHF_COMPRESSED; + } + else + { +- Elf64_Shdr *shdr = elf64_getshdr (scn); +- shdr->sh_size = new_size; +- shdr->sh_addralign = __libelf_type_align (ELFCLASS64, ELF_T_CHDR); +- shdr->sh_flags |= SHF_COMPRESSED; ++ shdr.s64->sh_size = new_size; ++ shdr.s64->sh_addralign = __libelf_type_align (ELFCLASS64, ++ ELF_T_CHDR); ++ shdr.s64->sh_flags |= SHF_COMPRESSED; + } + + __libelf_reset_rawdata (scn, out_buf, new_size, 1, ELF_T_CHDR); +@@ -731,17 +736,15 @@ elf_compress (Elf_Scn *scn, int type, un + correctly and ignored when SHF_COMPRESSED is set. */ + if (elfclass == ELFCLASS32) + { +- Elf32_Shdr *shdr = elf32_getshdr (scn); +- shdr->sh_size = scn->zdata_size; +- shdr->sh_addralign = scn->zdata_align; +- shdr->sh_flags &= ~SHF_COMPRESSED; ++ shdr.s32->sh_size = scn->zdata_size; ++ shdr.s32->sh_addralign = scn->zdata_align; ++ shdr.s32->sh_flags &= ~SHF_COMPRESSED; + } + else + { +- Elf64_Shdr *shdr = elf64_getshdr (scn); +- shdr->sh_size = scn->zdata_size; +- shdr->sh_addralign = scn->zdata_align; +- shdr->sh_flags &= ~SHF_COMPRESSED; ++ shdr.s64->sh_size = scn->zdata_size; ++ shdr.s64->sh_addralign = scn->zdata_align; ++ shdr.s64->sh_flags &= ~SHF_COMPRESSED; + } + + __libelf_reset_rawdata (scn, scn->zdata_base, +--- a/libelf/elf_compress_gnu.c ++++ b/libelf/elf_compress_gnu.c +@@ -59,25 +59,30 @@ elf_compress_gnu (Elf_Scn *scn, int infl + Elf64_Xword sh_flags; + Elf64_Word sh_type; + Elf64_Xword sh_addralign; ++ union shdr ++ { ++ Elf32_Shdr *s32; ++ Elf64_Shdr *s64; ++ } shdr; + if (elfclass == ELFCLASS32) + { +- Elf32_Shdr *shdr = elf32_getshdr (scn); +- if (shdr == NULL) ++ shdr.s32 = elf32_getshdr (scn); ++ if (shdr.s32 == NULL) + return -1; + +- sh_flags = shdr->sh_flags; +- sh_type = shdr->sh_type; +- sh_addralign = shdr->sh_addralign; ++ sh_flags = shdr.s32->sh_flags; ++ sh_type = shdr.s32->sh_type; ++ sh_addralign = shdr.s32->sh_addralign; + } + else + { +- Elf64_Shdr *shdr = elf64_getshdr (scn); +- if (shdr == NULL) ++ shdr.s64 = elf64_getshdr (scn); ++ if (shdr.s64 == NULL) + return -1; + +- sh_flags = shdr->sh_flags; +- sh_type = shdr->sh_type; +- sh_addralign = shdr->sh_addralign; ++ sh_flags = shdr.s64->sh_flags; ++ sh_type = shdr.s64->sh_type; ++ sh_addralign = shdr.s64->sh_addralign; + } + + /* Allocated sections, or sections that are already are compressed +@@ -122,15 +127,9 @@ elf_compress_gnu (Elf_Scn *scn, int infl + sh_flags won't have a SHF_COMPRESSED hint in the GNU format. + Just adjust the sh_size. */ + if (elfclass == ELFCLASS32) +- { +- Elf32_Shdr *shdr = elf32_getshdr (scn); +- shdr->sh_size = new_size; +- } ++ shdr.s32->sh_size = new_size; + else +- { +- Elf64_Shdr *shdr = elf64_getshdr (scn); +- shdr->sh_size = new_size; +- } ++ shdr.s64->sh_size = new_size; + + __libelf_reset_rawdata (scn, out_buf, new_size, 1, ELF_T_BYTE); + +@@ -187,15 +186,9 @@ elf_compress_gnu (Elf_Scn *scn, int infl + sh_flags won't have a SHF_COMPRESSED hint in the GNU format. + Just adjust the sh_size. */ + if (elfclass == ELFCLASS32) +- { +- Elf32_Shdr *shdr = elf32_getshdr (scn); +- shdr->sh_size = size; +- } ++ shdr.s32->sh_size = size; + else +- { +- Elf64_Shdr *shdr = elf64_getshdr (scn); +- shdr->sh_size = size; +- } ++ shdr.s64->sh_size = size; + + __libelf_reset_rawdata (scn, buf_out, size, sh_addralign, + __libelf_data_type (&ehdr, sh_type, diff --git a/lede/package/libs/elfutils/patches/102-fix-potential-deref-of-null-error.patch b/lede/package/libs/elfutils/patches/102-fix-potential-deref-of-null-error.patch new file mode 100644 index 0000000000..6710e4ef9c --- /dev/null +++ b/lede/package/libs/elfutils/patches/102-fix-potential-deref-of-null-error.patch @@ -0,0 +1,55 @@ +strip.c: Pointer `arhdr` created at strip.c:2741 and then dereferenced without NULL-check. +The same situation for the `arhdr` pointer at the objdump.c:313 and +the `h` pointer at the readelf.c:13545. + +Triggers found by static analyzer Svace. + +Signed-off-by: Maks Mishin +--- + src/objdump.c | 5 +++++ + src/readelf.c | 5 +++++ + src/strip.c | 5 +++++ + 3 files changed, 15 insertions(+) + +--- a/src/objdump.c ++++ b/src/objdump.c +@@ -311,6 +311,11 @@ handle_ar (int fd, Elf *elf, const char + { + /* The the header for this element. */ + Elf_Arhdr *arhdr = elf_getarhdr (subelf); ++ if (arhdr == NULL) ++ { ++ printf ("cannot get arhdr: %s\n", elf_errmsg (-1)); ++ exit (1); ++ } + + /* Skip over the index entries. */ + if (strcmp (arhdr->ar_name, "/") != 0 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -13543,6 +13543,11 @@ dump_archive_index (Elf *elf, const char + as_off, fname, elf_errmsg (-1)); + + const Elf_Arhdr *h = elf_getarhdr (subelf); ++ if (h == NULL) ++ { ++ printf ("cannot get arhdr: %s\n", elf_errmsg (-1)); ++ exit (1); ++ } + + printf (_("Archive member '%s' contains:\n"), h->ar_name); + +--- a/src/strip.c ++++ b/src/strip.c +@@ -2739,6 +2739,11 @@ handle_ar (int fd, Elf *elf, const char + { + /* The the header for this element. */ + Elf_Arhdr *arhdr = elf_getarhdr (subelf); ++ if (arhdr == NULL) ++ { ++ printf ("cannot get arhdr: %s\n", elf_errmsg (-1)); ++ exit (1); ++ } + + if (elf_kind (subelf) == ELF_K_ELF) + result |= handle_elf (fd, subelf, new_prefix, arhdr->ar_name, 0, NULL); diff --git a/lede/package/libs/libubox/Makefile b/lede/package/libs/libubox/Makefile index e19a97cbba..e77dfd9874 100644 --- a/lede/package/libs/libubox/Makefile +++ b/lede/package/libs/libubox/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/libubox.git -PKG_MIRROR_HASH:=400bef38b8c0f382e4e595a50bb52dfbdb8da820eb80f3447b9bd7be3f5499a5 -PKG_SOURCE_DATE:=2022-09-27 -PKG_SOURCE_VERSION:=ea56013409d5823001b47a9bba6f74055a6d76a5 +PKG_MIRROR_HASH:=242e33eca235124c7e005d25fbc8f8bf08a324335343e60278d4535c91157ba4 +PKG_SOURCE_DATE:=2024-03-29 +PKG_SOURCE_VERSION:=eb9bcb64185ac155c02cc1a604692c4b00368324 PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE)) CMAKE_INSTALL:=1 @@ -105,6 +105,14 @@ CMAKE_HOST_OPTIONS += \ -DCMAKE_MACOSX_RPATH=1 \ -DCMAKE_INSTALL_RPATH="${STAGING_DIR_HOST}/lib" \ +ifeq ($(HOST_OS),Darwin) + define Host/Install + $(Host/Install/Default) + $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/lib + cd "$(STAGING_DIR_HOSTPKG)/lib" && ln -sf ../../host/lib/libubox.* . + endef +endif + $(eval $(call BuildPackage,libubox)) $(eval $(call BuildPackage,libblobmsg-json)) $(eval $(call BuildPackage,jshn)) diff --git a/lede/package/system/procd/patches/001-use-standard-POSIX-header-for-basename.patch b/lede/package/system/procd/patches/001-use-standard-POSIX-header-for-basename.patch new file mode 100644 index 0000000000..c5e0e70caa --- /dev/null +++ b/lede/package/system/procd/patches/001-use-standard-POSIX-header-for-basename.patch @@ -0,0 +1,13 @@ +diff --git a/trace/trace.c b/trace/trace.c +index 6fd321f..e257d89 100644 +--- a/trace/trace.c ++++ b/trace/trace.c +@@ -23,7 +23,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + diff --git a/lede/package/system/ubus/Makefile b/lede/package/system/ubus/Makefile index c70defcafa..40dafd68f6 100644 --- a/lede/package/system/ubus/Makefile +++ b/lede/package/system/ubus/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/ubus.git -PKG_SOURCE_DATE:=2022-06-01 -PKG_SOURCE_VERSION:=2bebf93cd3343fe49f22a05ef935e460d2d44f67 -PKG_MIRROR_HASH:=4efd873928089c086bbac02f3ca5bae55904500b6e6f1c4c377181a00b67147f +PKG_SOURCE_DATE:=2024-10-20 +PKG_SOURCE_VERSION:=252a9b0c1774790fb9c25735d5a09c27dba895db +PKG_MIRROR_HASH:=475d96cc267370eb2e6ec808fc88285267cece1c5956d3966a060932d8b95175 PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE)) CMAKE_INSTALL:=1 @@ -15,6 +15,7 @@ PKG_LICENSE:=LGPL-2.1 PKG_LICENSE_FILES:= PKG_MAINTAINER:=Felix Fietkau +PKG_BUILD_FLAGS:=lto PKG_ASLR_PIE_REGULAR:=1 include $(INCLUDE_DIR)/package.mk @@ -50,8 +51,7 @@ define Package/libubus-lua TITLE:=Lua binding for the OpenWrt RPC client endef -TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include -flto -TARGET_LDFLAGS += -flto +TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include CMAKE_OPTIONS += \ -DLUAPATH=/usr/lib/lua \ diff --git a/lede/toolchain/gcc/Config.in b/lede/toolchain/gcc/Config.in index 3e7a0e152f..714620dbbd 100644 --- a/lede/toolchain/gcc/Config.in +++ b/lede/toolchain/gcc/Config.in @@ -3,8 +3,7 @@ choice prompt "GCC compiler Version" if TOOLCHAINOPTS default GCC_USE_VERSION_8 if mips || mipsel || mips64 || mips64el - default GCC_USE_VERSION_13 if loongarch64 - default GCC_USE_VERSION_11 + default GCC_USE_VERSION_13 help Select the version of gcc you wish to use. diff --git a/lede/toolchain/gcc/Config.version b/lede/toolchain/gcc/Config.version index 9ffe340663..83d07717b1 100644 --- a/lede/toolchain/gcc/Config.version +++ b/lede/toolchain/gcc/Config.version @@ -3,18 +3,17 @@ config GCC_VERSION_8 default y if mips || mipsel || mips64 || mips64el bool +config GCC_VERSION_11 + default y if GCC_USE_VERSION_11 + bool + config GCC_VERSION_12 default y if GCC_USE_VERSION_12 bool -config GCC_VERSION_13 - default y if GCC_USE_VERSION_13 - default y if loongarch64 - bool - config GCC_VERSION string default "8.4.0" if GCC_VERSION_8 + default "11.3.0" if GCC_VERSION_11 default "12.2.0" if GCC_VERSION_12 - default "13.3.0" if GCC_VERSION_13 - default "11.3.0" + default "13.3.0" diff --git a/lede/toolchain/gcc/patches-13.x/020-Include-safe-ctype.h-after-C-standard-headers-to-avo.patch b/lede/toolchain/gcc/patches-13.x/020-Include-safe-ctype.h-after-C-standard-headers-to-avo.patch deleted file mode 100644 index 986d19057f..0000000000 --- a/lede/toolchain/gcc/patches-13.x/020-Include-safe-ctype.h-after-C-standard-headers-to-avo.patch +++ /dev/null @@ -1,139 +0,0 @@ -From 9970b576b7e4ae337af1268395ff221348c4b34a Mon Sep 17 00:00:00 2001 -From: Francois-Xavier Coudert -Date: Thu, 7 Mar 2024 14:36:03 +0100 -Subject: [PATCH] Include safe-ctype.h after C++ standard headers, to avoid - over-poisoning - -When building gcc's C++ sources against recent libc++, the poisoning of -the ctype macros due to including safe-ctype.h before including C++ -standard headers such as , , etc, causes many compilation -errors, similar to: - - In file included from /home/dim/src/gcc/master/gcc/gensupport.cc:23: - In file included from /home/dim/src/gcc/master/gcc/system.h:233: - In file included from /usr/include/c++/v1/vector:321: - In file included from - /usr/include/c++/v1/__format/formatter_bool.h:20: - In file included from - /usr/include/c++/v1/__format/formatter_integral.h:32: - In file included from /usr/include/c++/v1/locale:202: - /usr/include/c++/v1/__locale:546:5: error: '__abi_tag__' attribute - only applies to structs, variables, functions, and namespaces - 546 | _LIBCPP_INLINE_VISIBILITY - | ^ - /usr/include/c++/v1/__config:813:37: note: expanded from macro - '_LIBCPP_INLINE_VISIBILITY' - 813 | # define _LIBCPP_INLINE_VISIBILITY _LIBCPP_HIDE_FROM_ABI - | ^ - /usr/include/c++/v1/__config:792:26: note: expanded from macro - '_LIBCPP_HIDE_FROM_ABI' - 792 | - __attribute__((__abi_tag__(_LIBCPP_TOSTRING( - _LIBCPP_VERSIONED_IDENTIFIER)))) - | ^ - In file included from /home/dim/src/gcc/master/gcc/gensupport.cc:23: - In file included from /home/dim/src/gcc/master/gcc/system.h:233: - In file included from /usr/include/c++/v1/vector:321: - In file included from - /usr/include/c++/v1/__format/formatter_bool.h:20: - In file included from - /usr/include/c++/v1/__format/formatter_integral.h:32: - In file included from /usr/include/c++/v1/locale:202: - /usr/include/c++/v1/__locale:547:37: error: expected ';' at end of - declaration list - 547 | char_type toupper(char_type __c) const - | ^ - /usr/include/c++/v1/__locale:553:48: error: too many arguments - provided to function-like macro invocation - 553 | const char_type* toupper(char_type* __low, const - char_type* __high) const - | ^ - /home/dim/src/gcc/master/gcc/../include/safe-ctype.h:146:9: note: - macro 'toupper' defined here - 146 | #define toupper(c) do_not_use_toupper_with_safe_ctype - | ^ - -This is because libc++ uses different transitive includes than -libstdc++, and some of those transitive includes pull in various ctype -declarations (typically via ). - -There was already a special case for including before -safe-ctype.h, so move the rest of the C++ standard header includes to -the same location, to fix the problem. - -gcc/ChangeLog: - - * system.h: Include safe-ctype.h after C++ standard headers. - -Signed-off-by: Dimitry Andric ---- - gcc/system.h | 39 ++++++++++++++++++--------------------- - 1 file changed, 18 insertions(+), 21 deletions(-) - -diff --git a/gcc/system.h b/gcc/system.h -index b0edab02885..ab29fc19776 100644 ---- a/gcc/system.h -+++ b/gcc/system.h -@@ -194,27 +194,8 @@ extern int fprintf_unlocked (FILE *, const char *, ...); - #undef fread_unlocked - #undef fwrite_unlocked - --/* Include before "safe-ctype.h" to avoid GCC poisoning -- the ctype macros through safe-ctype.h */ -- --#ifdef __cplusplus --#ifdef INCLUDE_STRING --# include --#endif --#endif -- --/* There are an extraordinary number of issues with . -- The last straw is that it varies with the locale. Use libiberty's -- replacement instead. */ --#include "safe-ctype.h" -- --#include -- --#include -- --#if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO --extern int errno; --#endif -+/* Include C++ standard headers before "safe-ctype.h" to avoid GCC -+ poisoning the ctype macros through safe-ctype.h */ - - #ifdef __cplusplus - #if defined (INCLUDE_ALGORITHM) || !defined (HAVE_SWAP_IN_UTILITY) -@@ -229,6 +210,9 @@ extern int errno; - #ifdef INCLUDE_SET - # include - #endif -+#ifdef INCLUDE_STRING -+# include -+#endif - #ifdef INCLUDE_VECTOR - # include - #endif -@@ -245,6 +229,19 @@ extern int errno; - # include - #endif - -+/* There are an extraordinary number of issues with . -+ The last straw is that it varies with the locale. Use libiberty's -+ replacement instead. */ -+#include "safe-ctype.h" -+ -+#include -+ -+#include -+ -+#if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO -+extern int errno; -+#endif -+ - /* Some of glibc's string inlines cause warnings. Plus we'd rather - rely on (and therefore test) GCC's string builtins. */ - #define __NO_STRING_INLINES --- -2.39.3 - diff --git a/lede/toolchain/gcc/patches-13.x/021-libcc1-fix-vector-include.patch b/lede/toolchain/gcc/patches-13.x/021-libcc1-fix-vector-include.patch deleted file mode 100644 index b6b15cd1c6..0000000000 --- a/lede/toolchain/gcc/patches-13.x/021-libcc1-fix-vector-include.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 5213047b1d50af63dfabb5e5649821a6cb157e33 Mon Sep 17 00:00:00 2001 -From: Francois-Xavier Coudert -Date: Sat, 16 Mar 2024 09:50:00 +0100 -Subject: [PATCH] libcc1: fix include - -Use INCLUDE_VECTOR before including system.h, instead of directly -including , to avoid running into poisoned identifiers. - -Signed-off-by: Dimitry Andric - -libcc1/ChangeLog: - - PR middle-end/111632 - * libcc1plugin.cc: Fix include. - * libcp1plugin.cc: Fix include. ---- - libcc1/libcc1plugin.cc | 3 +-- - libcc1/libcp1plugin.cc | 3 +-- - 2 files changed, 2 insertions(+), 4 deletions(-) - -diff --git a/libcc1/libcc1plugin.cc b/libcc1/libcc1plugin.cc -index 72d17c3b81c..e64847466f4 100644 ---- a/libcc1/libcc1plugin.cc -+++ b/libcc1/libcc1plugin.cc -@@ -32,6 +32,7 @@ - #undef PACKAGE_VERSION - - #define INCLUDE_MEMORY -+#define INCLUDE_VECTOR - #include "gcc-plugin.h" - #include "system.h" - #include "coretypes.h" -@@ -69,8 +70,6 @@ - #include "gcc-c-interface.h" - #include "context.hh" - --#include -- - using namespace cc1_plugin; - - -diff --git a/libcc1/libcp1plugin.cc b/libcc1/libcp1plugin.cc -index 0eff7c68d29..da68c5d0ac1 100644 ---- a/libcc1/libcp1plugin.cc -+++ b/libcc1/libcp1plugin.cc -@@ -33,6 +33,7 @@ - #undef PACKAGE_VERSION - - #define INCLUDE_MEMORY -+#define INCLUDE_VECTOR - #include "gcc-plugin.h" - #include "system.h" - #include "coretypes.h" -@@ -71,8 +72,6 @@ - #include "rpc.hh" - #include "context.hh" - --#include -- - using namespace cc1_plugin; - - --- -2.39.3 - diff --git a/lede/toolchain/musl/common.mk b/lede/toolchain/musl/common.mk index 94444eaf75..35bdfd184b 100644 --- a/lede/toolchain/musl/common.mk +++ b/lede/toolchain/musl/common.mk @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/target.mk PKG_NAME:=musl -PKG_VERSION:=1.2.4 +PKG_VERSION:=1.2.5 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://musl.libc.org/releases/ -PKG_HASH:=7a35eae33d5372a7c0da1188de798726f68825513b7ae3ebe97aaaa52114f039 +PKG_HASH:=a9a118bbe84d8764da0ea0d28b3ab3fae8477fc7e4085d90102b8596fc7c75e4 PKG_CPE_ID:=cpe:/a:musl-libc:musl LIBC_SO_VERSION:=$(PKG_VERSION) diff --git a/lede/toolchain/musl/patches/400-fix-loongarch64-ldso-file-name.patch b/lede/toolchain/musl/patches/400-fix-loongarch64-ldso-file-name.patch new file mode 100644 index 0000000000..a19ceb4583 --- /dev/null +++ b/lede/toolchain/musl/patches/400-fix-loongarch64-ldso-file-name.patch @@ -0,0 +1,10 @@ +--- a/Makefile ++++ b/Makefile +@@ -218,6 +218,7 @@ $(DESTDIR)$(includedir)/%: $(srcdir)/inc + + $(DESTDIR)$(LDSO_PATHNAME): $(DESTDIR)$(libdir)/libc.so + $(INSTALL) -D -l libc.so $@ || true ++ $(if $(filter loongarch64,$(ARCH)$(SUBARCH)),$(INSTALL) -D -l libc.so $(subst $(ARCH)$(SUBARCH).so.1,loongarch-lp64d.so.1,$@) || true) + + install-libs: $(ALL_LIBS:lib/%=$(DESTDIR)$(libdir)/%) $(if $(SHARED_LIBS),$(DESTDIR)$(LDSO_PATHNAME),) + diff --git a/lede/toolchain/musl/patches/900-iconv_size_hack.patch b/lede/toolchain/musl/patches/900-iconv_size_hack.patch index 461a204a4c..ad1dc4b109 100644 --- a/lede/toolchain/musl/patches/900-iconv_size_hack.patch +++ b/lede/toolchain/musl/patches/900-iconv_size_hack.patch @@ -6,7 +6,7 @@ "ucs2\0\0\314" +#ifdef FULL_ICONV "eucjp\0\0\320" - "shiftjis\0sjis\0\0\321" + "shiftjis\0sjis\0cp932\0\0\321" "iso2022jp\0\0\322" @@ -56,6 +57,7 @@ static const unsigned char charmaps[] = "gb2312\0\0\332" diff --git a/lede/toolchain/musl/patches/990-add_loongarch64_support.patch b/lede/toolchain/musl/patches/990-add_loongarch64_support.patch deleted file mode 100644 index fc6fa6913f..0000000000 --- a/lede/toolchain/musl/patches/990-add_loongarch64_support.patch +++ /dev/null @@ -1,1404 +0,0 @@ ->From 2d5f9717fda5c16f10d805ce8a26f1e78de440ea Mon Sep 17 00:00:00 2001 -From: wanghongliang -Date: Wed, 15 Nov 2023 01:31:51 +0800 -Subject: [PATCH] add loongarch64 port v9. - -Author: Xiaojuan Zhai -Author: Meidan Li -Author: Guoqi Chen -Author: Xiaolin Zhao -Author: Fan peng -Author: Jiantao Shan -Author: Xuhui Qiang -Author: Jingyun Hua -Author: Liu xue -Author: Hongliang Wang - -Signed-off-by: wanghongliang ---- - arch/loongarch64/atomic_arch.h | 53 ++++ - arch/loongarch64/bits/alltypes.h.in | 18 ++ - arch/loongarch64/bits/fenv.h | 20 ++ - arch/loongarch64/bits/float.h | 16 ++ - arch/loongarch64/bits/posix.h | 2 + - arch/loongarch64/bits/ptrace.h | 4 + - arch/loongarch64/bits/reg.h | 2 + - arch/loongarch64/bits/setjmp.h | 1 + - arch/loongarch64/bits/signal.h | 92 +++++++ - arch/loongarch64/bits/stat.h | 18 ++ - arch/loongarch64/bits/stdint.h | 20 ++ - arch/loongarch64/bits/syscall.h.in | 303 +++++++++++++++++++++ - arch/loongarch64/bits/user.h | 5 + - arch/loongarch64/crt_arch.h | 13 + - arch/loongarch64/pthread_arch.h | 11 + - arch/loongarch64/reloc.h | 29 ++ - arch/loongarch64/syscall_arch.h | 137 ++++++++++ - configure | 15 + - include/elf.h | 104 ++++++- - src/fenv/loongarch64/fenv.S | 78 ++++++ - src/ldso/loongarch64/dlsym.s | 7 + - src/setjmp/loongarch64/longjmp.S | 32 +++ - src/setjmp/loongarch64/setjmp.S | 34 +++ - src/signal/loongarch64/restore.s | 10 + - src/signal/loongarch64/sigsetjmp.s | 25 ++ - src/thread/loongarch64/__set_thread_area.s | 7 + - src/thread/loongarch64/__unmapself.s | 7 + - src/thread/loongarch64/clone.s | 28 ++ - src/thread/loongarch64/syscall_cp.s | 29 ++ - 29 files changed, 1119 insertions(+), 1 deletion(-) - create mode 100644 arch/loongarch64/atomic_arch.h - create mode 100644 arch/loongarch64/bits/alltypes.h.in - create mode 100644 arch/loongarch64/bits/fenv.h - create mode 100644 arch/loongarch64/bits/float.h - create mode 100644 arch/loongarch64/bits/posix.h - create mode 100644 arch/loongarch64/bits/ptrace.h - create mode 100644 arch/loongarch64/bits/reg.h - create mode 100644 arch/loongarch64/bits/setjmp.h - create mode 100644 arch/loongarch64/bits/signal.h - create mode 100644 arch/loongarch64/bits/stat.h - create mode 100644 arch/loongarch64/bits/stdint.h - create mode 100644 arch/loongarch64/bits/syscall.h.in - create mode 100644 arch/loongarch64/bits/user.h - create mode 100644 arch/loongarch64/crt_arch.h - create mode 100644 arch/loongarch64/pthread_arch.h - create mode 100644 arch/loongarch64/reloc.h - create mode 100644 arch/loongarch64/syscall_arch.h - create mode 100644 src/fenv/loongarch64/fenv.S - create mode 100644 src/ldso/loongarch64/dlsym.s - create mode 100644 src/setjmp/loongarch64/longjmp.S - create mode 100644 src/setjmp/loongarch64/setjmp.S - create mode 100644 src/signal/loongarch64/restore.s - create mode 100644 src/signal/loongarch64/sigsetjmp.s - create mode 100644 src/thread/loongarch64/__set_thread_area.s - create mode 100644 src/thread/loongarch64/__unmapself.s - create mode 100644 src/thread/loongarch64/clone.s - create mode 100644 src/thread/loongarch64/syscall_cp.s - -diff --git a/arch/loongarch64/atomic_arch.h b/arch/loongarch64/atomic_arch.h -new file mode 100644 -index 00000000..2225d027 ---- /dev/null -+++ b/arch/loongarch64/atomic_arch.h -@@ -0,0 +1,53 @@ -+#define a_ll a_ll -+static inline int a_ll(volatile int *p) -+{ -+ int v; -+ __asm__ __volatile__ ( -+ "ll.w %0, %1" -+ : "=r"(v) -+ : "ZC"(*p)); -+ return v; -+} -+ -+#define a_sc a_sc -+static inline int a_sc(volatile int *p, int v) -+{ -+ int r; -+ __asm__ __volatile__ ( -+ "sc.w %0, %1" -+ : "=r"(r), "=ZC"(*p) -+ : "0"(v) : "memory"); -+ return r; -+} -+ -+#define a_ll_p a_ll_p -+static inline void *a_ll_p(volatile void *p) -+{ -+ void *v; -+ __asm__ __volatile__ ( -+ "ll.d %0, %1" -+ : "=r"(v) -+ : "ZC"(*(void *volatile *)p)); -+ return v; -+} -+ -+#define a_sc_p a_sc_p -+static inline int a_sc_p(volatile void *p, void *v) -+{ -+ long r; -+ __asm__ __volatile__ ( -+ "sc.d %0, %1" -+ : "=r"(r), "=ZC"(*(void *volatile *)p) -+ : "0"(v) -+ : "memory"); -+ return r; -+} -+ -+#define a_barrier a_barrier -+static inline void a_barrier() -+{ -+ __asm__ __volatile__ ("dbar 0" : : : "memory"); -+} -+ -+#define a_pre_llsc a_barrier -+#define a_post_llsc a_barrier -diff --git a/arch/loongarch64/bits/alltypes.h.in b/arch/loongarch64/bits/alltypes.h.in -new file mode 100644 -index 00000000..06db4096 ---- /dev/null -+++ b/arch/loongarch64/bits/alltypes.h.in -@@ -0,0 +1,18 @@ -+#define _Addr long -+#define _Int64 long -+#define _Reg long -+ -+#define __BYTE_ORDER 1234 -+#define __LONG_MAX 0x7fffffffffffffffL -+ -+#ifndef __cplusplus -+TYPEDEF int wchar_t; -+#endif -+ -+TYPEDEF float float_t; -+TYPEDEF double double_t; -+ -+TYPEDEF struct { long long __ll; long double __ld; } max_align_t; -+ -+TYPEDEF unsigned nlink_t; -+TYPEDEF int blksize_t; -diff --git a/arch/loongarch64/bits/fenv.h b/arch/loongarch64/bits/fenv.h -new file mode 100644 -index 00000000..99e916e1 ---- /dev/null -+++ b/arch/loongarch64/bits/fenv.h -@@ -0,0 +1,20 @@ -+#define FE_INEXACT 0x010000 -+#define FE_UNDERFLOW 0x020000 -+#define FE_OVERFLOW 0x040000 -+#define FE_DIVBYZERO 0x080000 -+#define FE_INVALID 0x100000 -+ -+#define FE_ALL_EXCEPT 0x1F0000 -+ -+#define FE_TONEAREST 0x000 -+#define FE_TOWARDZERO 0x100 -+#define FE_UPWARD 0x200 -+#define FE_DOWNWARD 0x300 -+ -+typedef unsigned fexcept_t; -+ -+typedef struct { -+ unsigned int __cw; -+} fenv_t; -+ -+#define FE_DFL_ENV ((const fenv_t *) -1) -diff --git a/arch/loongarch64/bits/float.h b/arch/loongarch64/bits/float.h -new file mode 100644 -index 00000000..63e86d44 ---- /dev/null -+++ b/arch/loongarch64/bits/float.h -@@ -0,0 +1,16 @@ -+#define FLT_EVAL_METHOD 0 -+ -+#define LDBL_TRUE_MIN 6.47517511943802511092443895822764655e-4966L -+#define LDBL_MIN 3.36210314311209350626267781732175260e-4932L -+#define LDBL_MAX 1.18973149535723176508575932662800702e+4932L -+#define LDBL_EPSILON 1.92592994438723585305597794258492732e-34L -+ -+#define LDBL_MANT_DIG 113 -+#define LDBL_MIN_EXP (-16381) -+#define LDBL_MAX_EXP 16384 -+ -+#define LDBL_DIG 33 -+#define LDBL_MIN_10_EXP (-4931) -+#define LDBL_MAX_10_EXP 4932 -+ -+#define DECIMAL_DIG 36 -diff --git a/arch/loongarch64/bits/posix.h b/arch/loongarch64/bits/posix.h -new file mode 100644 -index 00000000..c37b94c1 ---- /dev/null -+++ b/arch/loongarch64/bits/posix.h -@@ -0,0 +1,2 @@ -+#define _POSIX_V6_LP64_OFF64 1 -+#define _POSIX_V7_LP64_OFF64 1 -diff --git a/arch/loongarch64/bits/ptrace.h b/arch/loongarch64/bits/ptrace.h -new file mode 100644 -index 00000000..dce2fa51 ---- /dev/null -+++ b/arch/loongarch64/bits/ptrace.h -@@ -0,0 +1,4 @@ -+#define PTRACE_GET_THREAD_AREA 25 -+#define PTRACE_SET_THREAD_AREA 26 -+#define PTRACE_GET_WATCH_REGS 0xd0 -+#define PTRACE_SET_WATCH_REGS 0xd1 -diff --git a/arch/loongarch64/bits/reg.h b/arch/loongarch64/bits/reg.h -new file mode 100644 -index 00000000..2633f39d ---- /dev/null -+++ b/arch/loongarch64/bits/reg.h -@@ -0,0 +1,2 @@ -+#undef __WORDSIZE -+#define __WORDSIZE 64 -diff --git a/arch/loongarch64/bits/setjmp.h b/arch/loongarch64/bits/setjmp.h -new file mode 100644 -index 00000000..4bfa374d ---- /dev/null -+++ b/arch/loongarch64/bits/setjmp.h -@@ -0,0 +1 @@ -+typedef unsigned long __jmp_buf[23]; -diff --git a/arch/loongarch64/bits/signal.h b/arch/loongarch64/bits/signal.h -new file mode 100644 -index 00000000..e1d256e7 ---- /dev/null -+++ b/arch/loongarch64/bits/signal.h -@@ -0,0 +1,92 @@ -+#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ -+ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) -+ -+#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) -+#define MINSIGSTKSZ 4096 -+#define SIGSTKSZ 16384 -+#endif -+ -+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) -+typedef unsigned long greg_t, gregset_t[32]; -+ -+struct sigcontext { -+ unsigned long sc_pc; -+ unsigned long sc_regs[32]; -+ unsigned int sc_flags; -+ unsigned long sc_extcontext[] __attribute__((__aligned__(16))); -+}; -+ -+typedef struct { -+ unsigned long __pc; -+ unsigned long __gregs[32]; -+ unsigned int __flags; -+ unsigned long __extcontext[] __attribute__((__aligned__(16))); -+} mcontext_t; -+#else -+typedef struct { -+ unsigned long __space[34]; -+} mcontext_t; -+#endif -+ -+struct sigaltstack { -+ void *ss_sp; -+ int ss_flags; -+ size_t ss_size; -+}; -+ -+typedef struct __ucontext -+{ -+ unsigned long __uc_flags; -+ struct __ucontext *uc_link; -+ stack_t uc_stack; -+ sigset_t uc_sigmask; -+ long __uc_pad; -+ mcontext_t uc_mcontext; -+} ucontext_t; -+ -+#define SA_NOCLDSTOP 1 -+#define SA_NOCLDWAIT 2 -+#define SA_SIGINFO 4 -+#define SA_ONSTACK 0x08000000 -+#define SA_RESTART 0x10000000 -+#define SA_NODEFER 0x40000000 -+#define SA_RESETHAND 0x80000000 -+#define SA_RESTORER 0x0 -+ -+#endif -+ -+#define SIGHUP 1 -+#define SIGINT 2 -+#define SIGQUIT 3 -+#define SIGILL 4 -+#define SIGTRAP 5 -+#define SIGABRT 6 -+#define SIGIOT SIGABRT -+#define SIGBUS 7 -+#define SIGFPE 8 -+#define SIGKILL 9 -+#define SIGUSR1 10 -+#define SIGSEGV 11 -+#define SIGUSR2 12 -+#define SIGPIPE 13 -+#define SIGALRM 14 -+#define SIGTERM 15 -+#define SIGSTKFLT 16 -+#define SIGCHLD 17 -+#define SIGCONT 18 -+#define SIGSTOP 19 -+#define SIGTSTP 20 -+#define SIGTTIN 21 -+#define SIGTTOU 22 -+#define SIGURG 23 -+#define SIGXCPU 24 -+#define SIGXFSZ 25 -+#define SIGVTALRM 26 -+#define SIGPROF 27 -+#define SIGWINCH 28 -+#define SIGIO 29 -+#define SIGPOLL SIGIO -+#define SIGPWR 30 -+#define SIGSYS 31 -+#define SIGUNUSED SIGSYS -+#define _NSIG 65 -diff --git a/arch/loongarch64/bits/stat.h b/arch/loongarch64/bits/stat.h -new file mode 100644 -index 00000000..b7f4221b ---- /dev/null -+++ b/arch/loongarch64/bits/stat.h -@@ -0,0 +1,18 @@ -+struct stat { -+ dev_t st_dev; -+ ino_t st_ino; -+ mode_t st_mode; -+ nlink_t st_nlink; -+ uid_t st_uid; -+ gid_t st_gid; -+ dev_t st_rdev; -+ unsigned long __pad; -+ off_t st_size; -+ blksize_t st_blksize; -+ int __pad2; -+ blkcnt_t st_blocks; -+ struct timespec st_atim; -+ struct timespec st_mtim; -+ struct timespec st_ctim; -+ unsigned __unused[2]; -+}; -diff --git a/arch/loongarch64/bits/stdint.h b/arch/loongarch64/bits/stdint.h -new file mode 100644 -index 00000000..60c12499 ---- /dev/null -+++ b/arch/loongarch64/bits/stdint.h -@@ -0,0 +1,20 @@ -+typedef int32_t int_fast16_t; -+typedef int32_t int_fast32_t; -+typedef uint32_t uint_fast16_t; -+typedef uint32_t uint_fast32_t; -+ -+#define INT_FAST16_MIN INT32_MIN -+#define INT_FAST32_MIN INT32_MIN -+ -+#define INT_FAST16_MAX INT32_MAX -+#define INT_FAST32_MAX INT32_MAX -+ -+#define UINT_FAST16_MAX UINT32_MAX -+#define UINT_FAST32_MAX UINT32_MAX -+ -+#define INTPTR_MIN INT64_MIN -+#define INTPTR_MAX INT64_MAX -+#define UINTPTR_MAX UINT64_MAX -+#define PTRDIFF_MIN INT64_MIN -+#define PTRDIFF_MAX INT64_MAX -+#define SIZE_MAX UINT64_MAX -diff --git a/arch/loongarch64/bits/syscall.h.in b/arch/loongarch64/bits/syscall.h.in -new file mode 100644 -index 00000000..0980e533 ---- /dev/null -+++ b/arch/loongarch64/bits/syscall.h.in -@@ -0,0 +1,303 @@ -+#define __NR_io_setup 0 -+#define __NR_io_destroy 1 -+#define __NR_io_submit 2 -+#define __NR_io_cancel 3 -+#define __NR_io_getevents 4 -+#define __NR_setxattr 5 -+#define __NR_lsetxattr 6 -+#define __NR_fsetxattr 7 -+#define __NR_getxattr 8 -+#define __NR_lgetxattr 9 -+#define __NR_fgetxattr 10 -+#define __NR_listxattr 11 -+#define __NR_llistxattr 12 -+#define __NR_flistxattr 13 -+#define __NR_removexattr 14 -+#define __NR_lremovexattr 15 -+#define __NR_fremovexattr 16 -+#define __NR_getcwd 17 -+#define __NR_lookup_dcookie 18 -+#define __NR_eventfd2 19 -+#define __NR_epoll_create1 20 -+#define __NR_epoll_ctl 21 -+#define __NR_epoll_pwait 22 -+#define __NR_dup 23 -+#define __NR_dup3 24 -+#define __NR3264_fcntl 25 -+#define __NR_inotify_init1 26 -+#define __NR_inotify_add_watch 27 -+#define __NR_inotify_rm_watch 28 -+#define __NR_ioctl 29 -+#define __NR_ioprio_set 30 -+#define __NR_ioprio_get 31 -+#define __NR_flock 32 -+#define __NR_mknodat 33 -+#define __NR_mkdirat 34 -+#define __NR_unlinkat 35 -+#define __NR_symlinkat 36 -+#define __NR_linkat 37 -+#define __NR_umount2 39 -+#define __NR_mount 40 -+#define __NR_pivot_root 41 -+#define __NR_nfsservctl 42 -+#define __NR3264_statfs 43 -+#define __NR3264_fstatfs 44 -+#define __NR3264_truncate 45 -+#define __NR3264_ftruncate 46 -+#define __NR_fallocate 47 -+#define __NR_faccessat 48 -+#define __NR_chdir 49 -+#define __NR_fchdir 50 -+#define __NR_chroot 51 -+#define __NR_fchmod 52 -+#define __NR_fchmodat 53 -+#define __NR_fchownat 54 -+#define __NR_fchown 55 -+#define __NR_openat 56 -+#define __NR_close 57 -+#define __NR_vhangup 58 -+#define __NR_pipe2 59 -+#define __NR_quotactl 60 -+#define __NR_getdents64 61 -+#define __NR3264_lseek 62 -+#define __NR_read 63 -+#define __NR_write 64 -+#define __NR_readv 65 -+#define __NR_writev 66 -+#define __NR_pread64 67 -+#define __NR_pwrite64 68 -+#define __NR_preadv 69 -+#define __NR_pwritev 70 -+#define __NR3264_sendfile 71 -+#define __NR_pselect6 72 -+#define __NR_ppoll 73 -+#define __NR_signalfd4 74 -+#define __NR_vmsplice 75 -+#define __NR_splice 76 -+#define __NR_tee 77 -+#define __NR_readlinkat 78 -+#define __NR_sync 81 -+#define __NR_fsync 82 -+#define __NR_fdatasync 83 -+#define __NR_sync_file_range 84 -+#define __NR_timerfd_create 85 -+#define __NR_timerfd_settime 86 -+#define __NR_timerfd_gettime 87 -+#define __NR_utimensat 88 -+#define __NR_acct 89 -+#define __NR_capget 90 -+#define __NR_capset 91 -+#define __NR_personality 92 -+#define __NR_exit 93 -+#define __NR_exit_group 94 -+#define __NR_waitid 95 -+#define __NR_set_tid_address 96 -+#define __NR_unshare 97 -+#define __NR_futex 98 -+#define __NR_set_robust_list 99 -+#define __NR_get_robust_list 100 -+#define __NR_nanosleep 101 -+#define __NR_getitimer 102 -+#define __NR_setitimer 103 -+#define __NR_kexec_load 104 -+#define __NR_init_module 105 -+#define __NR_delete_module 106 -+#define __NR_timer_create 107 -+#define __NR_timer_gettime 108 -+#define __NR_timer_getoverrun 109 -+#define __NR_timer_settime 110 -+#define __NR_timer_delete 111 -+#define __NR_clock_settime 112 -+#define __NR_clock_gettime 113 -+#define __NR_clock_getres 114 -+#define __NR_clock_nanosleep 115 -+#define __NR_syslog 116 -+#define __NR_ptrace 117 -+#define __NR_sched_setparam 118 -+#define __NR_sched_setscheduler 119 -+#define __NR_sched_getscheduler 120 -+#define __NR_sched_getparam 121 -+#define __NR_sched_setaffinity 122 -+#define __NR_sched_getaffinity 123 -+#define __NR_sched_yield 124 -+#define __NR_sched_get_priority_max 125 -+#define __NR_sched_get_priority_min 126 -+#define __NR_sched_rr_get_interval 127 -+#define __NR_restart_syscall 128 -+#define __NR_kill 129 -+#define __NR_tkill 130 -+#define __NR_tgkill 131 -+#define __NR_sigaltstack 132 -+#define __NR_rt_sigsuspend 133 -+#define __NR_rt_sigaction 134 -+#define __NR_rt_sigprocmask 135 -+#define __NR_rt_sigpending 136 -+#define __NR_rt_sigtimedwait 137 -+#define __NR_rt_sigqueueinfo 138 -+#define __NR_rt_sigreturn 139 -+#define __NR_setpriority 140 -+#define __NR_getpriority 141 -+#define __NR_reboot 142 -+#define __NR_setregid 143 -+#define __NR_setgid 144 -+#define __NR_setreuid 145 -+#define __NR_setuid 146 -+#define __NR_setresuid 147 -+#define __NR_getresuid 148 -+#define __NR_setresgid 149 -+#define __NR_getresgid 150 -+#define __NR_setfsuid 151 -+#define __NR_setfsgid 152 -+#define __NR_times 153 -+#define __NR_setpgid 154 -+#define __NR_getpgid 155 -+#define __NR_getsid 156 -+#define __NR_setsid 157 -+#define __NR_getgroups 158 -+#define __NR_setgroups 159 -+#define __NR_uname 160 -+#define __NR_sethostname 161 -+#define __NR_setdomainname 162 -+#define __NR_getrlimit 163 -+#define __NR_setrlimit 164 -+#define __NR_getrusage 165 -+#define __NR_umask 166 -+#define __NR_prctl 167 -+#define __NR_getcpu 168 -+#define __NR_gettimeofday 169 -+#define __NR_settimeofday 170 -+#define __NR_adjtimex 171 -+#define __NR_getpid 172 -+#define __NR_getppid 173 -+#define __NR_getuid 174 -+#define __NR_geteuid 175 -+#define __NR_getgid 176 -+#define __NR_getegid 177 -+#define __NR_gettid 178 -+#define __NR_sysinfo 179 -+#define __NR_mq_open 180 -+#define __NR_mq_unlink 181 -+#define __NR_mq_timedsend 182 -+#define __NR_mq_timedreceive 183 -+#define __NR_mq_notify 184 -+#define __NR_mq_getsetattr 185 -+#define __NR_msgget 186 -+#define __NR_msgctl 187 -+#define __NR_msgrcv 188 -+#define __NR_msgsnd 189 -+#define __NR_semget 190 -+#define __NR_semctl 191 -+#define __NR_semtimedop 192 -+#define __NR_semop 193 -+#define __NR_shmget 194 -+#define __NR_shmctl 195 -+#define __NR_shmat 196 -+#define __NR_shmdt 197 -+#define __NR_socket 198 -+#define __NR_socketpair 199 -+#define __NR_bind 200 -+#define __NR_listen 201 -+#define __NR_accept 202 -+#define __NR_connect 203 -+#define __NR_getsockname 204 -+#define __NR_getpeername 205 -+#define __NR_sendto 206 -+#define __NR_recvfrom 207 -+#define __NR_setsockopt 208 -+#define __NR_getsockopt 209 -+#define __NR_shutdown 210 -+#define __NR_sendmsg 211 -+#define __NR_recvmsg 212 -+#define __NR_readahead 213 -+#define __NR_brk 214 -+#define __NR_munmap 215 -+#define __NR_mremap 216 -+#define __NR_add_key 217 -+#define __NR_request_key 218 -+#define __NR_keyctl 219 -+#define __NR_clone 220 -+#define __NR_execve 221 -+#define __NR3264_mmap 222 -+#define __NR3264_fadvise64 223 -+#define __NR_swapon 224 -+#define __NR_swapoff 225 -+#define __NR_mprotect 226 -+#define __NR_msync 227 -+#define __NR_mlock 228 -+#define __NR_munlock 229 -+#define __NR_mlockall 230 -+#define __NR_munlockall 231 -+#define __NR_mincore 232 -+#define __NR_madvise 233 -+#define __NR_remap_file_pages 234 -+#define __NR_mbind 235 -+#define __NR_get_mempolicy 236 -+#define __NR_set_mempolicy 237 -+#define __NR_migrate_pages 238 -+#define __NR_move_pages 239 -+#define __NR_rt_tgsigqueueinfo 240 -+#define __NR_perf_event_open 241 -+#define __NR_accept4 242 -+#define __NR_recvmmsg 243 -+#define __NR_arch_specific_syscall 244 -+#define __NR_wait4 260 -+#define __NR_prlimit64 261 -+#define __NR_fanotify_init 262 -+#define __NR_fanotify_mark 263 -+#define __NR_name_to_handle_at 264 -+#define __NR_open_by_handle_at 265 -+#define __NR_clock_adjtime 266 -+#define __NR_syncfs 267 -+#define __NR_setns 268 -+#define __NR_sendmmsg 269 -+#define __NR_process_vm_readv 270 -+#define __NR_process_vm_writev 271 -+#define __NR_kcmp 272 -+#define __NR_finit_module 273 -+#define __NR_sched_setattr 274 -+#define __NR_sched_getattr 275 -+#define __NR_renameat2 276 -+#define __NR_seccomp 277 -+#define __NR_getrandom 278 -+#define __NR_memfd_create 279 -+#define __NR_bpf 280 -+#define __NR_execveat 281 -+#define __NR_userfaultfd 282 -+#define __NR_membarrier 283 -+#define __NR_mlock2 284 -+#define __NR_copy_file_range 285 -+#define __NR_preadv2 286 -+#define __NR_pwritev2 287 -+#define __NR_pkey_mprotect 288 -+#define __NR_pkey_alloc 289 -+#define __NR_pkey_free 290 -+#define __NR_statx 291 -+#define __NR_io_pgetevents 292 -+#define __NR_rseq 293 -+#define __NR_kexec_file_load 294 -+#define __NR_pidfd_send_signal 424 -+#define __NR_io_uring_setup 425 -+#define __NR_io_uring_enter 426 -+#define __NR_io_uring_register 427 -+#define __NR_open_tree 428 -+#define __NR_move_mount 429 -+#define __NR_fsopen 430 -+#define __NR_fsconfig 431 -+#define __NR_fsmount 432 -+#define __NR_fspick 433 -+#define __NR_pidfd_open 434 -+#define __NR_clone3 435 -+#define __NR_close_range 436 -+#define __NR_openat2 437 -+#define __NR_pidfd_getfd 438 -+#define __NR_faccessat2 439 -+#define __NR_process_madvise 440 -+#define __NR_fcntl __NR3264_fcntl -+#define __NR_statfs __NR3264_statfs -+#define __NR_fstatfs __NR3264_fstatfs -+#define __NR_truncate __NR3264_truncate -+#define __NR_ftruncate __NR3264_ftruncate -+#define __NR_lseek __NR3264_lseek -+#define __NR_sendfile __NR3264_sendfile -+#define __NR_mmap __NR3264_mmap -+#define __NR_fadvise64 __NR3264_fadvise64 -diff --git a/arch/loongarch64/bits/user.h b/arch/loongarch64/bits/user.h -new file mode 100644 -index 00000000..5a71d132 ---- /dev/null -+++ b/arch/loongarch64/bits/user.h -@@ -0,0 +1,5 @@ -+#define ELF_NGREG 45 -+#define ELF_NFPREG 33 -+ -+typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; -+typedef double elf_fpreg_t, elf_fpregset_t[ELF_NFPREG]; -diff --git a/arch/loongarch64/crt_arch.h b/arch/loongarch64/crt_arch.h -new file mode 100644 -index 00000000..e0760d9e ---- /dev/null -+++ b/arch/loongarch64/crt_arch.h -@@ -0,0 +1,13 @@ -+__asm__( -+".text \n" -+".global " START "\n" -+".type " START ", @function\n" -+START ":\n" -+" move $fp, $zero\n" -+" move $a0, $sp\n" -+".weak _DYNAMIC\n" -+".hidden _DYNAMIC\n" -+" la.local $a1, _DYNAMIC\n" -+" bstrins.d $sp, $zero, 3, 0\n" -+" b " START "_c\n" -+); -diff --git a/arch/loongarch64/pthread_arch.h b/arch/loongarch64/pthread_arch.h -new file mode 100644 -index 00000000..28fbfcd1 ---- /dev/null -+++ b/arch/loongarch64/pthread_arch.h -@@ -0,0 +1,11 @@ -+static inline uintptr_t __get_tp() -+{ -+ uintptr_t tp; -+ __asm__ __volatile__("move %0, $tp" : "=r"(tp)); -+ return tp; -+} -+ -+#define TLS_ABOVE_TP -+#define GAP_ABOVE_TP 0 -+#define DTP_OFFSET 0 -+#define MC_PC __pc -diff --git a/arch/loongarch64/reloc.h b/arch/loongarch64/reloc.h -new file mode 100644 -index 00000000..6907de8e ---- /dev/null -+++ b/arch/loongarch64/reloc.h -@@ -0,0 +1,29 @@ -+#if defined __loongarch_double_float -+#define FP_SUFFIX "-lp64d" -+#elif defined __loongarch_single_float -+#define FP_SUFFIX "-lp64f" -+#elif defined __loongarch_soft_float -+#define FP_SUFFIX "-lp64s" -+#endif -+ -+#define LDSO_ARCH "loongarch64" FP_SUFFIX -+ -+#define TPOFF_K 0 -+ -+#define REL_PLT R_LARCH_JUMP_SLOT -+#define REL_COPY R_LARCH_COPY -+#define REL_DTPMOD R_LARCH_TLS_DTPMOD64 -+#define REL_DTPOFF R_LARCH_TLS_DTPREL64 -+#define REL_TPOFF R_LARCH_TLS_TPREL64 -+#define REL_RELATIVE R_LARCH_RELATIVE -+#define REL_SYMBOLIC R_LARCH_64 -+ -+#define CRTJMP(pc,sp) __asm__ __volatile__( \ -+ "move $sp, %1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" ) -+ -+#define GETFUNCSYM(fp, sym, got) __asm__ ( \ -+ ".hidden " #sym "\n" \ -+ ".align 8 \n" \ -+ " la.local $t1, "#sym" \n" \ -+ " move %0, $t1 \n" \ -+ : "=r"(*(fp)) : : "memory" ) -diff --git a/arch/loongarch64/syscall_arch.h b/arch/loongarch64/syscall_arch.h -new file mode 100644 -index 00000000..4d5e1885 ---- /dev/null -+++ b/arch/loongarch64/syscall_arch.h -@@ -0,0 +1,137 @@ -+#define __SYSCALL_LL_E(x) (x) -+#define __SYSCALL_LL_O(x) (x) -+ -+#define SYSCALL_CLOBBERLIST \ -+ "$t0", "$t1", "$t2", "$t3", \ -+ "$t4", "$t5", "$t6", "$t7", "$t8", "memory" -+ -+static inline long __syscall0(long n) -+{ -+ register long a7 __asm__("$a7") = n; -+ register long a0 __asm__("$a0"); -+ -+ __asm__ __volatile__ ( -+ "syscall 0" -+ : "=r"(a0) -+ : "r"(a7) -+ : SYSCALL_CLOBBERLIST); -+ return a0; -+} -+ -+static inline long __syscall1(long n, long a) -+{ -+ register long a7 __asm__("$a7") = n; -+ register long a0 __asm__("$a0") = a; -+ -+ __asm__ __volatile__ ( -+ "syscall 0" -+ : "+r"(a0) -+ : "r"(a7) -+ : SYSCALL_CLOBBERLIST); -+ return a0; -+} -+ -+static inline long __syscall2(long n, long a, long b) -+{ -+ register long a7 __asm__("$a7") = n; -+ register long a0 __asm__("$a0") = a; -+ register long a1 __asm__("$a1") = b; -+ -+ __asm__ __volatile__ ( -+ "syscall 0" -+ : "+r"(a0) -+ : "r"(a7), "r"(a1) -+ : SYSCALL_CLOBBERLIST); -+ return a0; -+} -+ -+static inline long __syscall3(long n, long a, long b, long c) -+{ -+ register long a7 __asm__("$a7") = n; -+ register long a0 __asm__("$a0") = a; -+ register long a1 __asm__("$a1") = b; -+ register long a2 __asm__("$a2") = c; -+ -+ __asm__ __volatile__ ( -+ "syscall 0" -+ : "+r"(a0) -+ : "r"(a7), "r"(a1), "r"(a2) -+ : SYSCALL_CLOBBERLIST); -+ return a0; -+} -+ -+static inline long __syscall4(long n, long a, long b, long c, long d) -+{ -+ register long a7 __asm__("$a7") = n; -+ register long a0 __asm__("$a0") = a; -+ register long a1 __asm__("$a1") = b; -+ register long a2 __asm__("$a2") = c; -+ register long a3 __asm__("$a3") = d; -+ -+ __asm__ __volatile__ ( -+ "syscall 0" -+ : "+r"(a0) -+ : "r"(a7), "r"(a1), "r"(a2), "r"(a3) -+ : SYSCALL_CLOBBERLIST); -+ return a0; -+} -+ -+static inline long __syscall5(long n, long a, long b, long c, long d, long e) -+{ -+ register long a7 __asm__("$a7") = n; -+ register long a0 __asm__("$a0") = a; -+ register long a1 __asm__("$a1") = b; -+ register long a2 __asm__("$a2") = c; -+ register long a3 __asm__("$a3") = d; -+ register long a4 __asm__("$a4") = e; -+ -+ __asm__ __volatile__ ( -+ "syscall 0" -+ : "+r"(a0) -+ : "r"(a7), "r"(a1), "r"(a2), "r"(a3), "r"(a4) -+ : SYSCALL_CLOBBERLIST); -+ return a0; -+} -+ -+static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) -+{ -+ register long a7 __asm__("$a7") = n; -+ register long a0 __asm__("$a0") = a; -+ register long a1 __asm__("$a1") = b; -+ register long a2 __asm__("$a2") = c; -+ register long a3 __asm__("$a3") = d; -+ register long a4 __asm__("$a4") = e; -+ register long a5 __asm__("$a5") = f; -+ -+ __asm__ __volatile__ ( -+ "syscall 0" -+ : "+r"(a0) -+ : "r"(a7), "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5) -+ : SYSCALL_CLOBBERLIST); -+ return a0; -+} -+ -+static inline long __syscall7(long n, long a, long b, long c, long d, long e, long f, long g) -+{ -+ register long a7 __asm__("$a7") = n; -+ register long a0 __asm__("$a0") = a; -+ register long a1 __asm__("$a1") = b; -+ register long a2 __asm__("$a2") = c; -+ register long a3 __asm__("$a3") = d; -+ register long a4 __asm__("$a4") = e; -+ register long a5 __asm__("$a5") = f; -+ register long a6 __asm__("$a6") = g; -+ -+ __asm__ __volatile__ ( -+ "syscall 0" -+ : "+r"(a0) -+ : "r"(a7), "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5), "r"(a6) -+ : SYSCALL_CLOBBERLIST); -+ return a0; -+} -+ -+#define VDSO_USEFUL -+#define VDSO_CGT_SYM "__vdso_clock_gettime" -+#define VDSO_CGT_VER "LINUX_5.10" -+ -+#define IPC_64 0 -diff --git a/configure b/configure -index 0b966ede..93b06287 100755 ---- a/configure -+++ b/configure -@@ -328,6 +328,7 @@ i?86*) ARCH=i386 ;; - x86_64-x32*|x32*|x86_64*x32) ARCH=x32 ;; - x86_64-nt64*) ARCH=nt64 ;; - x86_64*) ARCH=x86_64 ;; -+loongarch64*) ARCH=loongarch64 ;; - m68k*) ARCH=m68k ;; - mips64*|mipsisa64*) ARCH=mips64 ;; - mips*) ARCH=mips ;; -@@ -671,6 +672,20 @@ if test "$ARCH" = "aarch64" ; then - trycppif __AARCH64EB__ "$t" && SUBARCH=${SUBARCH}_be - fi - -+if test "$ARCH" = "loongarch64" ; then -+trycppif __loongarch_double_float "$t" && SUBARCH=${SUBARCH}-lp64d -+trycppif __loongarch_single_float "$t" && SUBARCH=${SUBARCH}-lp64f -+trycppif __loongarch_soft_float "$t" && SUBARCH=${SUBARCH}-lp64s -+printf "checking whether compiler support FCSRs... " -+echo "__asm__(\"movfcsr2gr \$t0,\$fcsr0\");" > "$tmpc" -+if $CC -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then -+printf "yes\n" -+else -+printf "no\n" -+CFLAGS_AUTO="$CFLAGS_AUTO -DBROKEN_LOONGARCH_FCSR_ASM" -+fi -+fi -+ - if test "$ARCH" = "m68k" ; then - if trycppif "__HAVE_68881__" ; then : ; - elif trycppif "__mcffpu__" ; then SUBARCH="-fp64" -diff --git a/include/elf.h b/include/elf.h -index 23f2c4bc..7114f262 100644 ---- a/include/elf.h -+++ b/include/elf.h -@@ -315,7 +315,8 @@ typedef struct { - #define EM_RISCV 243 - #define EM_BPF 247 - #define EM_CSKY 252 --#define EM_NUM 253 -+#define EM_LOONGARCH 258 -+#define EM_NUM 259 - - #define EM_ALPHA 0x9026 - -@@ -699,6 +700,11 @@ typedef struct { - #define NT_MIPS_FP_MODE 0x801 - #define NT_MIPS_MSA 0x802 - #define NT_VERSION 1 -+#define NT_LOONGARCH_CPUCFG 0xa00 -+#define NT_LOONGARCH_CSR 0xa01 -+#define NT_LOONGARCH_LSX 0xa02 -+#define NT_LOONGARCH_LASX 0xa03 -+#define NT_LOONGARCH_LBT 0xa04 - - - -@@ -3293,6 +3299,102 @@ enum - #define R_RISCV_SET32 56 - #define R_RISCV_32_PCREL 57 - -+#define EF_LARCH_ABI_MODIFIER_MASK 0x07 -+#define EF_LARCH_ABI_SOFT_FLOAT 0x01 -+#define EF_LARCH_ABI_SINGLE_FLOAT 0x02 -+#define EF_LARCH_ABI_DOUBLE_FLOAT 0x03 -+#define EF_LARCH_OBJABI_V1 0x40 -+ -+#define R_LARCH_NONE 0 -+#define R_LARCH_32 1 -+#define R_LARCH_64 2 -+#define R_LARCH_RELATIVE 3 -+#define R_LARCH_COPY 4 -+#define R_LARCH_JUMP_SLOT 5 -+#define R_LARCH_TLS_DTPMOD32 6 -+#define R_LARCH_TLS_DTPMOD64 7 -+#define R_LARCH_TLS_DTPREL32 8 -+#define R_LARCH_TLS_DTPREL64 9 -+#define R_LARCH_TLS_TPREL32 10 -+#define R_LARCH_TLS_TPREL64 11 -+#define R_LARCH_IRELATIVE 12 -+#define R_LARCH_MARK_LA 20 -+#define R_LARCH_MARK_PCREL 21 -+#define R_LARCH_SOP_PUSH_PCREL 22 -+#define R_LARCH_SOP_PUSH_ABSOLUTE 23 -+#define R_LARCH_SOP_PUSH_DUP 24 -+#define R_LARCH_SOP_PUSH_GPREL 25 -+#define R_LARCH_SOP_PUSH_TLS_TPREL 26 -+#define R_LARCH_SOP_PUSH_TLS_GOT 27 -+#define R_LARCH_SOP_PUSH_TLS_GD 28 -+#define R_LARCH_SOP_PUSH_PLT_PCREL 29 -+#define R_LARCH_SOP_ASSERT 30 -+#define R_LARCH_SOP_NOT 31 -+#define R_LARCH_SOP_SUB 32 -+#define R_LARCH_SOP_SL 33 -+#define R_LARCH_SOP_SR 34 -+#define R_LARCH_SOP_ADD 35 -+#define R_LARCH_SOP_AND 36 -+#define R_LARCH_SOP_IF_ELSE 37 -+#define R_LARCH_SOP_POP_32_S_10_5 38 -+#define R_LARCH_SOP_POP_32_U_10_12 39 -+#define R_LARCH_SOP_POP_32_S_10_12 40 -+#define R_LARCH_SOP_POP_32_S_10_16 41 -+#define R_LARCH_SOP_POP_32_S_10_16_S2 42 -+#define R_LARCH_SOP_POP_32_S_5_20 43 -+#define R_LARCH_SOP_POP_32_S_0_5_10_16_S2 44 -+#define R_LARCH_SOP_POP_32_S_0_10_10_16_S2 45 -+#define R_LARCH_SOP_POP_32_U 46 -+#define R_LARCH_ADD8 47 -+#define R_LARCH_ADD16 48 -+#define R_LARCH_ADD24 49 -+#define R_LARCH_ADD32 50 -+#define R_LARCH_ADD64 51 -+#define R_LARCH_SUB8 52 -+#define R_LARCH_SUB16 53 -+#define R_LARCH_SUB24 54 -+#define R_LARCH_SUB32 55 -+#define R_LARCH_SUB64 56 -+#define R_LARCH_GNU_VTINHERIT 57 -+#define R_LARCH_GNU_VTENTRY 58 -+#define R_LARCH_B16 64 -+#define R_LARCH_B21 65 -+#define R_LARCH_B26 66 -+#define R_LARCH_ABS_HI20 67 -+#define R_LARCH_ABS_LO12 68 -+#define R_LARCH_ABS64_LO20 69 -+#define R_LARCH_ABS64_HI12 70 -+#define R_LARCH_PCALA_HI20 71 -+#define R_LARCH_PCALA_LO12 72 -+#define R_LARCH_PCALA64_LO20 73 -+#define R_LARCH_PCALA64_HI12 74 -+#define R_LARCH_GOT_PC_HI20 75 -+#define R_LARCH_GOT_PC_LO12 76 -+#define R_LARCH_GOT64_PC_LO20 77 -+#define R_LARCH_GOT64_PC_HI12 78 -+#define R_LARCH_GOT_HI20 79 -+#define R_LARCH_GOT_LO12 80 -+#define R_LARCH_GOT64_LO20 81 -+#define R_LARCH_GOT64_HI12 82 -+#define R_LARCH_TLS_LE_HI20 83 -+#define R_LARCH_TLS_LE_LO12 84 -+#define R_LARCH_TLS_LE64_LO20 85 -+#define R_LARCH_TLS_LE64_HI12 86 -+#define R_LARCH_TLS_IE_PC_HI20 87 -+#define R_LARCH_TLS_IE_PC_LO12 88 -+#define R_LARCH_TLS_IE64_PC_LO20 89 -+#define R_LARCH_TLS_IE64_PC_HI12 90 -+#define R_LARCH_TLS_IE_HI20 91 -+#define R_LARCH_TLS_IE_LO12 92 -+#define R_LARCH_TLS_IE64_LO20 93 -+#define R_LARCH_TLS_IE64_HI12 94 -+#define R_LARCH_TLS_LD_PC_HI20 95 -+#define R_LARCH_TLS_LD_HI20 96 -+#define R_LARCH_TLS_GD_PC_HI20 97 -+#define R_LARCH_TLS_GD_HI20 98 -+#define R_LARCH_32_PCREL 99 -+#define R_LARCH_RELAX 100 -+ - #ifdef __cplusplus - } - #endif -diff --git a/src/fenv/loongarch64/fenv.S b/src/fenv/loongarch64/fenv.S -new file mode 100644 -index 00000000..54064e01 ---- /dev/null -+++ b/src/fenv/loongarch64/fenv.S -@@ -0,0 +1,78 @@ -+#ifndef __loongarch_soft_float -+ -+#ifdef BROKEN_LOONGARCH_FCSR_ASM -+#define FCSR $r0 -+#else -+#define FCSR $fcsr0 -+#endif -+ -+.global feclearexcept -+.type feclearexcept,@function -+feclearexcept: -+ li.w $t0, 0x1f0000 -+ and $a0, $a0, $t0 -+ movfcsr2gr $t1, FCSR -+ andn $t1, $t1, $a0 -+ movgr2fcsr FCSR, $t1 -+ li.w $a0, 0 -+ jr $ra -+ -+.global feraiseexcept -+.type feraiseexcept,@function -+feraiseexcept: -+ li.w $t0, 0x1f0000 -+ and $a0, $a0, $t0 -+ movfcsr2gr $t1, FCSR -+ or $t1, $t1, $a0 -+ movgr2fcsr FCSR, $t1 -+ li.w $a0, 0 -+ jr $ra -+ -+.global fetestexcept -+.type fetestexcept,@function -+fetestexcept: -+ li.w $t0, 0x1f0000 -+ and $a0, $a0, $t0 -+ movfcsr2gr $t1, FCSR -+ and $a0, $t1, $a0 -+ jr $ra -+ -+.global fegetround -+.type fegetround,@function -+fegetround: -+ movfcsr2gr $t0, FCSR -+ andi $a0, $t0, 0x300 -+ jr $ra -+ -+.global __fesetround -+.hidden __fesetround -+.type __fesetround,@function -+__fesetround: -+ li.w $t0, 0x300 -+ and $a0, $a0, $t0 -+ movfcsr2gr $t1, FCSR -+ andn $t1, $t1, $t0 -+ or $t1, $t1, $a0 -+ movgr2fcsr FCSR, $t1 -+ li.w $a0, 0 -+ jr $ra -+ -+.global fegetenv -+.type fegetenv,@function -+fegetenv: -+ movfcsr2gr $t0, FCSR -+ st.w $t0, $a0, 0 -+ li.w $a0, 0 -+ jr $ra -+ -+.global fesetenv -+.type fesetenv,@function -+fesetenv: -+ addi.d $t0, $a0, 1 -+ beq $t0, $r0, 1f -+ ld.w $t0, $a0, 0 -+1: movgr2fcsr FCSR, $t0 -+ li.w $a0, 0 -+ jr $ra -+ -+#endif -diff --git a/src/ldso/loongarch64/dlsym.s b/src/ldso/loongarch64/dlsym.s -new file mode 100644 -index 00000000..26fabcdb ---- /dev/null -+++ b/src/ldso/loongarch64/dlsym.s -@@ -0,0 +1,7 @@ -+.global dlsym -+.hidden __dlsym -+.type dlsym,@function -+dlsym: -+ move $a2, $ra -+ la.global $t0, __dlsym -+ jr $t0 -diff --git a/src/setjmp/loongarch64/longjmp.S b/src/setjmp/loongarch64/longjmp.S -new file mode 100644 -index 00000000..896d2e26 ---- /dev/null -+++ b/src/setjmp/loongarch64/longjmp.S -@@ -0,0 +1,32 @@ -+.global _longjmp -+.global longjmp -+.type _longjmp,@function -+.type longjmp,@function -+_longjmp: -+longjmp: -+ ld.d $ra, $a0, 0 -+ ld.d $sp, $a0, 8 -+ ld.d $r21,$a0, 16 -+ ld.d $fp, $a0, 24 -+ ld.d $s0, $a0, 32 -+ ld.d $s1, $a0, 40 -+ ld.d $s2, $a0, 48 -+ ld.d $s3, $a0, 56 -+ ld.d $s4, $a0, 64 -+ ld.d $s5, $a0, 72 -+ ld.d $s6, $a0, 80 -+ ld.d $s7, $a0, 88 -+ ld.d $s8, $a0, 96 -+#ifndef __loongarch_soft_float -+ fld.d $fs0, $a0, 104 -+ fld.d $fs1, $a0, 112 -+ fld.d $fs2, $a0, 120 -+ fld.d $fs3, $a0, 128 -+ fld.d $fs4, $a0, 136 -+ fld.d $fs5, $a0, 144 -+ fld.d $fs6, $a0, 152 -+ fld.d $fs7, $a0, 160 -+#endif -+ sltui $a0, $a1, 1 -+ add.d $a0, $a0, $a1 -+ jr $ra -diff --git a/src/setjmp/loongarch64/setjmp.S b/src/setjmp/loongarch64/setjmp.S -new file mode 100644 -index 00000000..d158a3d2 ---- /dev/null -+++ b/src/setjmp/loongarch64/setjmp.S -@@ -0,0 +1,34 @@ -+.global __setjmp -+.global _setjmp -+.global setjmp -+.type __setjmp,@function -+.type _setjmp,@function -+.type setjmp,@function -+__setjmp: -+_setjmp: -+setjmp: -+ st.d $ra, $a0, 0 -+ st.d $sp, $a0, 8 -+ st.d $r21,$a0, 16 -+ st.d $fp, $a0, 24 -+ st.d $s0, $a0, 32 -+ st.d $s1, $a0, 40 -+ st.d $s2, $a0, 48 -+ st.d $s3, $a0, 56 -+ st.d $s4, $a0, 64 -+ st.d $s5, $a0, 72 -+ st.d $s6, $a0, 80 -+ st.d $s7, $a0, 88 -+ st.d $s8, $a0, 96 -+#ifndef __loongarch_soft_float -+ fst.d $fs0, $a0, 104 -+ fst.d $fs1, $a0, 112 -+ fst.d $fs2, $a0, 120 -+ fst.d $fs3, $a0, 128 -+ fst.d $fs4, $a0, 136 -+ fst.d $fs5, $a0, 144 -+ fst.d $fs6, $a0, 152 -+ fst.d $fs7, $a0, 160 -+#endif -+ move $a0, $zero -+ jr $ra -diff --git a/src/signal/loongarch64/restore.s b/src/signal/loongarch64/restore.s -new file mode 100644 -index 00000000..f8e6daeb ---- /dev/null -+++ b/src/signal/loongarch64/restore.s -@@ -0,0 +1,10 @@ -+.global __restore_rt -+.global __restore -+.hidden __restore_rt -+.hidden __restore -+.type __restore_rt,@function -+.type __restore,@function -+__restore_rt: -+__restore: -+ li.w $a7, 139 -+ syscall 0 -diff --git a/src/signal/loongarch64/sigsetjmp.s b/src/signal/loongarch64/sigsetjmp.s -new file mode 100644 -index 00000000..992ab1a4 ---- /dev/null -+++ b/src/signal/loongarch64/sigsetjmp.s -@@ -0,0 +1,25 @@ -+.global sigsetjmp -+.global __sigsetjmp -+.type sigsetjmp,@function -+.type __sigsetjmp,@function -+sigsetjmp: -+__sigsetjmp: -+ beq $a1, $zero, 1f -+ st.d $ra, $a0, 168 -+ st.d $s0, $a0, 176 -+ move $s0, $a0 -+ -+ la.global $t0, setjmp -+ jirl $ra, $t0, 0 -+ -+ move $a1, $a0 # Return from 'setjmp' or 'longjmp' -+ move $a0, $s0 -+ ld.d $ra, $a0, 168 -+ ld.d $s0, $a0, 176 -+ -+.hidden __sigsetjmp_tail -+ la.global $t0, __sigsetjmp_tail -+ jr $t0 -+1: -+ la.global $t0, setjmp -+ jr $t0 -diff --git a/src/thread/loongarch64/__set_thread_area.s b/src/thread/loongarch64/__set_thread_area.s -new file mode 100644 -index 00000000..ffdd52f1 ---- /dev/null -+++ b/src/thread/loongarch64/__set_thread_area.s -@@ -0,0 +1,7 @@ -+.global __set_thread_area -+.hidden __set_thread_area -+.type __set_thread_area,@function -+__set_thread_area: -+ move $tp, $a0 -+ move $a0, $zero -+ jr $ra -diff --git a/src/thread/loongarch64/__unmapself.s b/src/thread/loongarch64/__unmapself.s -new file mode 100644 -index 00000000..1de334af ---- /dev/null -+++ b/src/thread/loongarch64/__unmapself.s -@@ -0,0 +1,7 @@ -+.global __unmapself -+.type __unmapself, @function -+__unmapself: -+ li.d $a7, 215 # call munmap -+ syscall 0 -+ li.d $a7, 93 # call exit -+ syscall 0 -diff --git a/src/thread/loongarch64/clone.s b/src/thread/loongarch64/clone.s -new file mode 100644 -index 00000000..db9015e6 ---- /dev/null -+++ b/src/thread/loongarch64/clone.s -@@ -0,0 +1,28 @@ -+#__clone(func, stack, flags, arg, ptid, tls, ctid) -+# a0, a1, a2, a3, a4, a5, a6 -+# sys_clone(flags, stack, ptid, ctid, tls) -+# a0, a1, a2, a3, a4 -+ -+.global __clone -+.hidden __clone -+.type __clone,@function -+__clone: -+ # Save function pointer and argument pointer on new thread stack -+ addi.d $a1, $a1, -16 -+ st.d $a0, $a1, 0 # save function pointer -+ st.d $a3, $a1, 8 # save argument pointer -+ or $a0, $a2, $zero -+ or $a2, $a4, $zero -+ or $a3, $a6, $zero -+ or $a4, $a5, $zero -+ ori $a7, $zero, 220 -+ syscall 0 # call clone -+ -+ beqz $a0, 1f # whether child process -+ jirl $zero, $ra, 0 # parent process return -+1: -+ ld.d $t8, $sp, 0 # function pointer -+ ld.d $a0, $sp, 8 # argument pointer -+ jirl $ra, $t8, 0 # call the user's function -+ ori $a7, $zero, 93 -+ syscall 0 # child process exit -diff --git a/src/thread/loongarch64/syscall_cp.s b/src/thread/loongarch64/syscall_cp.s -new file mode 100644 -index 00000000..0fbc7a47 ---- /dev/null -+++ b/src/thread/loongarch64/syscall_cp.s -@@ -0,0 +1,29 @@ -+.global __cp_begin -+.hidden __cp_begin -+.global __cp_end -+.hidden __cp_end -+.global __cp_cancel -+.hidden __cp_cancel -+.hidden __cancel -+.global __syscall_cp_asm -+.hidden __syscall_cp_asm -+.type __syscall_cp_asm,@function -+ -+__syscall_cp_asm: -+__cp_begin: -+ ld.w $a0, $a0, 0 -+ bnez $a0, __cp_cancel -+ move $t8, $a1 # reserve system call number -+ move $a0, $a2 -+ move $a1, $a3 -+ move $a2, $a4 -+ move $a3, $a5 -+ move $a4, $a6 -+ move $a5, $a7 -+ move $a7, $t8 -+ syscall 0 -+__cp_end: -+ jr $ra -+__cp_cancel: -+ la.local $t8, __cancel -+ jr $t8 --- -2.37.1 - diff --git a/mieru/Makefile b/mieru/Makefile index 3ff84e1339..1aba56a1cb 100644 --- a/mieru/Makefile +++ b/mieru/Makefile @@ -32,7 +32,7 @@ PROJECT_NAME=$(shell basename "${ROOT}") # - pkg/version/current.go # # Use `tools/bump_version.sh` script to change all those files at one shot. -VERSION="3.8.0" +VERSION="3.8.1" # Build binaries and installation packages. .PHONY: build diff --git a/mieru/build/package/mieru/amd64/debian/DEBIAN/control b/mieru/build/package/mieru/amd64/debian/DEBIAN/control index 3f8a86ef02..7f94f50e4d 100755 --- a/mieru/build/package/mieru/amd64/debian/DEBIAN/control +++ b/mieru/build/package/mieru/amd64/debian/DEBIAN/control @@ -1,5 +1,5 @@ Package: mieru -Version: 3.8.0 +Version: 3.8.1 Section: net Priority: optional Architecture: amd64 diff --git a/mieru/build/package/mieru/amd64/rpm/mieru.spec b/mieru/build/package/mieru/amd64/rpm/mieru.spec index 86768378fd..02f6d6c22c 100644 --- a/mieru/build/package/mieru/amd64/rpm/mieru.spec +++ b/mieru/build/package/mieru/amd64/rpm/mieru.spec @@ -1,5 +1,5 @@ Name: mieru -Version: 3.8.0 +Version: 3.8.1 Release: 1%{?dist} Summary: Mieru proxy client License: GPLv3+ diff --git a/mieru/build/package/mieru/arm64/debian/DEBIAN/control b/mieru/build/package/mieru/arm64/debian/DEBIAN/control index 9de9c81b6b..dd9c8fce95 100755 --- a/mieru/build/package/mieru/arm64/debian/DEBIAN/control +++ b/mieru/build/package/mieru/arm64/debian/DEBIAN/control @@ -1,5 +1,5 @@ Package: mieru -Version: 3.8.0 +Version: 3.8.1 Section: net Priority: optional Architecture: arm64 diff --git a/mieru/build/package/mieru/arm64/rpm/mieru.spec b/mieru/build/package/mieru/arm64/rpm/mieru.spec index 86768378fd..02f6d6c22c 100644 --- a/mieru/build/package/mieru/arm64/rpm/mieru.spec +++ b/mieru/build/package/mieru/arm64/rpm/mieru.spec @@ -1,5 +1,5 @@ Name: mieru -Version: 3.8.0 +Version: 3.8.1 Release: 1%{?dist} Summary: Mieru proxy client License: GPLv3+ diff --git a/mieru/build/package/mita/amd64/debian/DEBIAN/control b/mieru/build/package/mita/amd64/debian/DEBIAN/control index b57783b2a0..945ae5bdf8 100755 --- a/mieru/build/package/mita/amd64/debian/DEBIAN/control +++ b/mieru/build/package/mita/amd64/debian/DEBIAN/control @@ -1,5 +1,5 @@ Package: mita -Version: 3.8.0 +Version: 3.8.1 Section: net Priority: optional Architecture: amd64 diff --git a/mieru/build/package/mita/amd64/rpm/mita.spec b/mieru/build/package/mita/amd64/rpm/mita.spec index 4c6accbeed..7fe0192d06 100644 --- a/mieru/build/package/mita/amd64/rpm/mita.spec +++ b/mieru/build/package/mita/amd64/rpm/mita.spec @@ -1,5 +1,5 @@ Name: mita -Version: 3.8.0 +Version: 3.8.1 Release: 1%{?dist} Summary: Mieru proxy server License: GPLv3+ diff --git a/mieru/build/package/mita/arm64/debian/DEBIAN/control b/mieru/build/package/mita/arm64/debian/DEBIAN/control index 8932173abd..1fcf607f1a 100755 --- a/mieru/build/package/mita/arm64/debian/DEBIAN/control +++ b/mieru/build/package/mita/arm64/debian/DEBIAN/control @@ -1,5 +1,5 @@ Package: mita -Version: 3.8.0 +Version: 3.8.1 Section: net Priority: optional Architecture: arm64 diff --git a/mieru/build/package/mita/arm64/rpm/mita.spec b/mieru/build/package/mita/arm64/rpm/mita.spec index 03f068c081..9c6ca9d557 100644 --- a/mieru/build/package/mita/arm64/rpm/mita.spec +++ b/mieru/build/package/mita/arm64/rpm/mita.spec @@ -1,5 +1,5 @@ Name: mita -Version: 3.8.0 +Version: 3.8.1 Release: 1%{?dist} Summary: Mieru proxy server License: GPLv3+ diff --git a/mieru/docs/server-install.md b/mieru/docs/server-install.md index 971fdaf98b..a785ca5e14 100644 --- a/mieru/docs/server-install.md +++ b/mieru/docs/server-install.md @@ -8,32 +8,32 @@ Before installation and configuration, connect to the server via SSH and then ex ```sh # Debian / Ubuntu - X86_64 -curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.0/mita_3.8.0_amd64.deb +curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.1/mita_3.8.1_amd64.deb # Debian / Ubuntu - ARM 64 -curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.0/mita_3.8.0_arm64.deb +curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.1/mita_3.8.1_arm64.deb # RedHat / CentOS / Rocky Linux - X86_64 -curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.0/mita-3.8.0-1.x86_64.rpm +curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.1/mita-3.8.1-1.x86_64.rpm # RedHat / CentOS / Rocky Linux - ARM 64 -curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.0/mita-3.8.0-1.aarch64.rpm +curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.1/mita-3.8.1-1.aarch64.rpm ``` ## Install mita package ```sh # Debian / Ubuntu - X86_64 -sudo dpkg -i mita_3.8.0_amd64.deb +sudo dpkg -i mita_3.8.1_amd64.deb # Debian / Ubuntu - ARM 64 -sudo dpkg -i mita_3.8.0_arm64.deb +sudo dpkg -i mita_3.8.1_arm64.deb # RedHat / CentOS / Rocky Linux - X86_64 -sudo rpm -Uvh --force mita-3.8.0-1.x86_64.rpm +sudo rpm -Uvh --force mita-3.8.1-1.x86_64.rpm # RedHat / CentOS / Rocky Linux - ARM 64 -sudo rpm -Uvh --force mita-3.8.0-1.aarch64.rpm +sudo rpm -Uvh --force mita-3.8.1-1.aarch64.rpm ``` Those instructions can also be used to upgrade the version of mita software package. diff --git a/mieru/docs/server-install.zh_CN.md b/mieru/docs/server-install.zh_CN.md index 57314689e3..a8ab82651b 100644 --- a/mieru/docs/server-install.zh_CN.md +++ b/mieru/docs/server-install.zh_CN.md @@ -8,32 +8,32 @@ ```sh # Debian / Ubuntu - X86_64 -curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.0/mita_3.8.0_amd64.deb +curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.1/mita_3.8.1_amd64.deb # Debian / Ubuntu - ARM 64 -curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.0/mita_3.8.0_arm64.deb +curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.1/mita_3.8.1_arm64.deb # RedHat / CentOS / Rocky Linux - X86_64 -curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.0/mita-3.8.0-1.x86_64.rpm +curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.1/mita-3.8.1-1.x86_64.rpm # RedHat / CentOS / Rocky Linux - ARM 64 -curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.0/mita-3.8.0-1.aarch64.rpm +curl -LSO https://github.com/enfein/mieru/releases/download/v3.8.1/mita-3.8.1-1.aarch64.rpm ``` ## 安装 mita 软件包 ```sh # Debian / Ubuntu - X86_64 -sudo dpkg -i mita_3.8.0_amd64.deb +sudo dpkg -i mita_3.8.1_amd64.deb # Debian / Ubuntu - ARM 64 -sudo dpkg -i mita_3.8.0_arm64.deb +sudo dpkg -i mita_3.8.1_arm64.deb # RedHat / CentOS / Rocky Linux - X86_64 -sudo rpm -Uvh --force mita-3.8.0-1.x86_64.rpm +sudo rpm -Uvh --force mita-3.8.1-1.x86_64.rpm # RedHat / CentOS / Rocky Linux - ARM 64 -sudo rpm -Uvh --force mita-3.8.0-1.aarch64.rpm +sudo rpm -Uvh --force mita-3.8.1-1.aarch64.rpm ``` 上述指令也可以用来升级 mita 软件包的版本。 diff --git a/mieru/pkg/version/current.go b/mieru/pkg/version/current.go index 89b43cee15..4f798223b3 100644 --- a/mieru/pkg/version/current.go +++ b/mieru/pkg/version/current.go @@ -16,5 +16,5 @@ package version const ( - AppVersion = "3.8.0" + AppVersion = "3.8.1" ) diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua index 4c5ce1c2fc..09372825ad 100644 --- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua +++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua @@ -175,12 +175,18 @@ o.default = 2 o:depends("week_update", "8") o.rmempty = true +o = s:option(ListValue, "access_mode", translate("Subscribe URL Access Method")) +o.default = "" +o:value("", translate("Auto")) +o:value("direct", translate("Direct Connection")) +o:value("proxy", translate("Proxy")) + o = s:option(Value, "user_agent", translate("User-Agent")) o.default = "v2rayN/9.99" o:value("curl", "Curl") o:value("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0", "Edge for Linux") o:value("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0", "Edge for Windows") o:value("Passwall/OpenWrt", "PassWall") -o:value("v2rayN/9.99", "V2rayN") +o:value("v2rayN/9.99", "v2rayN") return m diff --git a/openwrt-passwall/luci-app-passwall/luasrc/passwall/api.lua b/openwrt-passwall/luci-app-passwall/luasrc/passwall/api.lua index 61565e9e9a..5d67e767c3 100644 --- a/openwrt-passwall/luci-app-passwall/luasrc/passwall/api.lua +++ b/openwrt-passwall/luci-app-passwall/luasrc/passwall/api.lua @@ -63,6 +63,29 @@ function base64Decode(text) end end +--提取URL中的域名和端口(no ip) +function get_domain_port_from_url(url) + local scheme, domain, port = string.match(url, "^(https?)://([%w%.%-]+):?(%d*)") + if not domain then + scheme, domain, port = string.match(url, "^(https?)://(%b[])([^:/]*)/?") + end + if not domain then return nil, nil end + if domain:sub(1, 1) == "[" then domain = domain:sub(2, -2) end + port = port ~= "" and tonumber(port) or (scheme == "https" and 443 or 80) + if datatypes.ipaddr(domain) or datatypes.ip6addr(domain) then return nil, nil end + return domain, port +end + +--解析域名 +function domainToIPv4(domain, dns) + local Dns = dns or "223.5.5.5" + local IPs = luci.sys.exec('nslookup %s %s | awk \'/^Name:/{getline; if ($1 == "Address:") print $2}\'' % { domain, Dns }) + for IP in string.gmatch(IPs, "%S+") do + if datatypes.ipaddr(IP) and not datatypes.ip6addr(IP) then return IP end + end + return nil +end + function curl_base(url, file, args) if not args then args = {} end if file then @@ -92,6 +115,28 @@ function curl_logic(url, file, args) return return_code, result end +function curl_direct(url, file, args) + --直连访问 + if not args then args = {} end + local tmp_args = clone(args) + local domain, port = get_domain_port_from_url(url) + if domain then + local ip = domainToIPv4(domain) + if ip then + tmp_args[#tmp_args + 1] = "--resolve " .. domain .. ":" .. port .. ":" .. ip + end + end + return curl_base(url, file, tmp_args) +end + +function curl_auto(url, file, args) + local return_code, result = curl_proxy(url, file, args) + if not return_code or return_code ~= 0 then + return_code, result = curl_direct(url, file, args) + end + return return_code, result +end + function url(...) local url = string.format("admin/services/%s", appname) local args = { ... } diff --git a/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po b/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po index d15e8206a8..12c1c894e3 100644 --- a/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po +++ b/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po @@ -1009,6 +1009,9 @@ msgstr "订阅备注(机场)" msgid "Subscribe URL" msgstr "订阅网址" +msgid "Subscribe URL Access Method" +msgstr "订阅网址访问方式" + msgid "Please input the subscription url first, save and submit before manual subscription." msgstr "请输入订阅网址保存应用后再手动订阅。" diff --git a/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/subscribe.lua index 1dbc3c224a..49b5fc2b5a 100755 --- a/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -1216,12 +1216,19 @@ local function processData(szType, content, add_mode, add_from) return result end -local function curl(url, file, ua) +local function curl(url, file, ua, mode) local curl_args = api.clone(api.curl_args) if ua and ua ~= "" and ua ~= "curl" then table.insert(curl_args, '--user-agent "' .. ua .. '"') end - local return_code, result = api.curl_logic(url, file, curl_args) + local return_code + if mode == "direct" then + return_code = api.curl_direct(url, file, curl_args) + elseif mode == "proxy" then + return_code = api.curl_proxy(url, file, curl_args) + else + return_code = api.curl_auto(url, file, curl_args) + end return return_code end @@ -1610,8 +1617,10 @@ local execute = function() domain_strategy_node = domain_strategy_default end local ua = value.user_agent - log('正在订阅:【' .. remark .. '】' .. url) - local raw = curl(url, "/tmp/" .. cfgid, ua) + local access_mode = value.access_mode + local result = (not access_mode) and "自动" or (access_mode == "direct" and "直连访问" or (access_mode == "proxy" and "通过代理" or "自动")) + log('正在订阅:【' .. remark .. '】' .. url .. ' [' .. result .. ']') + local raw = curl(url, "/tmp/" .. cfgid, ua, access_mode) if raw == 0 then local f = io.open("/tmp/" .. cfgid, "r") local stdout = f:read("*all") diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index 9aec55d441..e98ad96cf6 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -7,6 +7,7 @@ if not api.finded_com("xray") then end local appname = api.appname +local jsonc = api.jsonc local uci = api.uci local type_name = "Xray" @@ -393,7 +394,7 @@ o:depends({ [option_name("tls")] = true, [option_name("utls")] = true }) o:depends({ [option_name("tls")] = true, [option_name("reality")] = true }) o = s:option(ListValue, option_name("transport"), translate("Transport")) -o:value("raw", "RAW") +o:value("raw", "RAW (TCP)") o:value("mkcp", "mKCP") o:value("ws", "WebSocket") o:value("h2", "HTTP/2") @@ -401,7 +402,7 @@ o:value("ds", "DomainSocket") o:value("quic", "QUIC") o:value("grpc", "gRPC") o:value("httpupgrade", "HttpUpgrade") -o:value("xhttp", "XHTTP") +o:value("xhttp", "XHTTP (SplitHTTP)") o:depends({ [option_name("protocol")] = "vmess" }) o:depends({ [option_name("protocol")] = "vless" }) o:depends({ [option_name("protocol")] = "socks" }) @@ -494,6 +495,10 @@ o = s:option(Value, option_name("ws_path"), translate("WebSocket Path")) o.placeholder = "/" o:depends({ [option_name("transport")] = "ws" }) +o = s:option(Value, option_name("ws_heartbeatPeriod"), translate("HeartbeatPeriod(second)")) +o.datatype = "integer" +o:depends({ [option_name("transport")] = "ws" }) + -- [[ HTTP/2部分 ]]-- o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host")) o:depends({ [option_name("transport")] = "h2" }) @@ -568,6 +573,14 @@ o.placeholder = "/" o:depends({ [option_name("transport")] = "httpupgrade" }) -- [[ XHTTP部分 ]]-- +o = s:option(ListValue, option_name("xhttp_mode"), "XHTTP " .. translate("Mode")) +o:depends({ [option_name("transport")] = "xhttp" }) +o.default = "auto" +o:value("auto") +o:value("packet-up") +o:value("stream-up") +o:value("stream-one") + o = s:option(Value, option_name("xhttp_host"), translate("XHTTP Host")) o:depends({ [option_name("transport")] = "xhttp" }) @@ -575,104 +588,34 @@ o = s:option(Value, option_name("xhttp_path"), translate("XHTTP Path")) o.placeholder = "/" o:depends({ [option_name("transport")] = "xhttp" }) --- XHTTP XMUX -o = s:option(Flag, option_name("xhttp_xmux"), "XMUX", translate("Enable XHTTP XMUX. It's not recommended to enable Mux.Cool at the same time.")) +o = s:option(TextValue, option_name("xhttp_extra"), translate("XHTTP Extra"), translate("An XHTTP extra object in raw json")) o:depends({ [option_name("transport")] = "xhttp" }) +o.rows = 15 +o.wrap = "off" +o.custom_write = function(self, section, value) -o = s:option(Value, option_name("maxConcurrency"), translate("XMUX Max Concurrency")) -o:depends({ [option_name("xhttp_xmux")] = true }) + m:set(section, self.option:sub(1 + #option_prefix), value) -o = s:option(Value, option_name("maxConnections"), translate("XMUX Max Connections")) -o:depends({ [option_name("xhttp_xmux")] = true }) - -o = s:option(Value, option_name("cMaxReuseTimes"), translate("XMUX Connection Max Reuse Times")) -o:depends({ [option_name("xhttp_xmux")] = true }) - -o = s:option(Value, option_name("cMaxLifetimeMs"), translate("XMUX Connection Max Lifetime (ms)")) -o:depends({ [option_name("xhttp_xmux")] = true }) - --- XHTTP 下行 -o = s:option(Flag, option_name("xhttp_download"), string.format('%s', translate("XHTTP download splitting"))) -o:depends({ [option_name("transport")] = "xhttp" }) - -o = s:option(Value, option_name("xhttp_download_address"), string.format('%s', translate("Address"))) -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Value, option_name("xhttp_download_port"), string.format('%s', translate("Port"))) -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Value, option_name("xhttp_download_host"), string.format('%s', "XHTTP Host")) -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Value, option_name("xhttp_download_path"), string.format('%s', "XHTTP Path"), translate("Must be the same as upload path.")) -o.placeholder = "/" -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Flag, option_name("xhttp_download_tls"), string.format('%s', "TLS")) -o:depends({ [option_name("xhttp_download")] = true }) -o.default = 0 - -o = s:option(Flag, option_name("xhttp_download_reality"), string.format('%s', "REALITY")) -o.default = 0 -o:depends({ [option_name("xhttp_download_tls")] = true }) - -o = s:option(ListValue, option_name("xhttp_download_alpn"), string.format('%s', "alpn")) -o.default = "default" -o:value("default", translate("Default")) -o:value("h3") -o:value("h2") -o:value("h3,h2") -o:value("http/1.1") -o:value("h2,http/1.1") -o:value("h3,h2,http/1.1") -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = false }) - -o = s:option(Value, option_name("xhttp_download_tls_serverName"), string.format('%s', translate("Domain"))) -o:depends({ [option_name("xhttp_download_tls")] = true }) - -o = s:option(Value, option_name("xhttp_download_reality_publicKey"), string.format('%s', translate("Public Key"))) -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = true }) - -o = s:option(Value, option_name("xhttp_download_reality_shortId"), string.format('%s', translate("Short Id"))) -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = true }) - -o = s:option(Value, option_name("xhttp_download_reality_spiderX"), string.format('%s', "Spider X")) -o.placeholder = "/" -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = true }) - -o = s:option(Flag, option_name("xhttp_download_utls"), string.format('%s', "uTLS")) -o.default = "0" -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = false }) - -o = s:option(ListValue, option_name("xhttp_download_fingerprint"), string.format('%s', translate("Finger Print"))) -o:value("chrome") -o:value("firefox") -o:value("edge") -o:value("safari") -o:value("360") -o:value("qq") -o:value("ios") -o:value("android") -o:value("random") -o:value("randomized") -o.default = "chrome" -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_utls")] = true }) -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = true }) - -o = s:option(Flag, option_name("xhttp_download_xmux"), string.format('%s', "XMUX"), translate("Enable XHTTP XMUX. It's not recommended to enable Mux.Cool at the same time.")) -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Value, option_name("download_maxConcurrency"), string.format('%s', translate("XMUX Max Concurrency"))) -o:depends({ [option_name("xhttp_download_xmux")] = true }) - -o = s:option(Value, option_name("download_maxConnections"), string.format('%s', translate("XMUX Max Connections"))) -o:depends({ [option_name("xhttp_download_xmux")] = true }) - -o = s:option(Value, option_name("download_cMaxReuseTimes"), string.format('%s', translate("XMUX Connection Max Reuse Times"))) -o:depends({ [option_name("xhttp_download_xmux")] = true }) - -o = s:option(Value, option_name("download_cMaxLifetimeMs"), string.format('%s', translate("XMUX Connection Max Lifetime (ms)"))) -o:depends({ [option_name("xhttp_download_xmux")] = true }) + local success, data = pcall(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 + m:del(section, "download_address") + 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 + return value +end -- [[ Mux.Cool ]]-- o = s:option(Flag, option_name("mux"), "Mux", translate("Enable Mux.Cool")) diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua index 16fa181f2c..6db3a0272a 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua @@ -1069,11 +1069,16 @@ function luci_types(id, m, s, type_name, option_prefix) end s.fields[key].write = function(self, section, value) if s.fields["type"]:formvalue(id) == type_name then - if self.rewrite_option then - m:set(section, self.rewrite_option, value) + -- 添加自定义 custom_write 属性,如果有自定义的 custom_write 函数,则使用自定义的 write 逻辑 + if self.custom_write then + self:custom_write(section, value) else - if self.option:find(option_prefix) == 1 then - m:set(section, self.option:sub(1 + #option_prefix), value) + if self.rewrite_option then + m:set(section, self.rewrite_option, value) + else + if self.option:find(option_prefix) == 1 then + m:set(section, self.option:sub(1 + #option_prefix), value) + end end end end diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua index 1aa130cb74..4f0eb3b87c 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua @@ -110,15 +110,6 @@ function gen_outbound(flag, node, tag, proxy_table) end end - if node.type == "Xray" and node.transport == "xhttp" then - if node.xhttp_download_tls and node.xhttp_download_tls == "1" then - node.xhttp_download_stream_security = "tls" - if node.xhttp_download_reality and node.xhttp_download_reality == "1" then - node.xhttp_download_stream_security = "reality" - end - end - end - if node.protocol == "wireguard" and node.wireguard_reserved then local bytes = {} if not node.wireguard_reserved:match("[^%d,]+") then @@ -195,7 +186,8 @@ function gen_outbound(flag, node, tag, proxy_table) headers = (node.ws_host ~= nil) and {Host = node.ws_host} or nil, maxEarlyData = tonumber(node.ws_maxEarlyData) or nil, - earlyDataHeaderName = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil + earlyDataHeaderName = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil, + heartbeatPeriod = tonumber(node.ws_heartbeatPeriod) or nil } or nil, httpSettings = (node.transport == "h2") and { path = node.h2_path or "/", @@ -223,34 +215,18 @@ function gen_outbound(flag, node, tag, proxy_table) host = node.httpupgrade_host } or nil, xhttpSettings = (node.transport == "xhttp" or node.transport == "splithttp") and { + mode = node.xhttp_mode or "auto", path = node.xhttp_path or node.splithttp_path or "/", host = node.xhttp_host or node.splithttp_host, - downloadSettings = (node.xhttp_download == "1") and { - address = node.xhttp_download_address, - port = tonumber(node.xhttp_download_port), - network = "xhttp", - xhttpSettings = { - path = node.xhttp_download_path, - host = node.xhttp_download_host, - }, - security = node.xhttp_download_stream_security, - tlsSettings = (node.xhttp_download_stream_security == "tls") and { - serverName = node.xhttp_download_tls_serverName, - allowInsecure = false, - fingerprint = (node.xhttp_download_utls == "1" and - node.xhttp_download_fingerprint and - node.xhttp_download_fingerprint ~= "") and node.xhttp_download_fingerprint or nil - } or nil, - realitySettings = (node.xhttp_download_stream_security == "reality") and { - serverName = node.xhttp_download_tls_serverName, - publicKey = node.xhttp_download_reality_publicKey, - shortId = node.xhttp_download_reality_shortId or "", - spiderX = node.xhttp_download_reality_spiderX or "/", - fingerprint = ( - node.xhttp_download_fingerprint and - node.xhttp_download_fingerprint ~= "") and node.xhttp_download_fingerprint or nil - } or nil, - } or nil + -- 如果包含 "extra" 节,取 "extra" 内的内容,否则直接赋值给 extra + extra = node.xhttp_extra and (function() + local success, parsed = pcall(jsonc.parse, node.xhttp_extra) + if success then + return parsed.extra or parsed + else + return nil + end + end)() or nil } or nil, } or nil, settings = { @@ -317,40 +293,6 @@ function gen_outbound(flag, node, tag, proxy_table) end end - local alpn_download = {} - if node.xhttp_download_alpn and node.xhttp_download_alpn ~= "default" then - string.gsub(node.xhttp_download_alpn, '[^' .. "," .. ']+', function(w) - table.insert(alpn_download, w) - end) - end - if alpn_download and #alpn_download > 0 then - if result.streamSettings.xhttpSettings.downloadSettings.tlsSettings then - result.streamSettings.xhttpSettings.downloadSettings.tlsSettings.alpn = alpn_download - end - end - - local xmux = {} - if (node.xhttp_xmux == "1") then - xmux.maxConcurrency = node.maxConcurrency and (string.find(node.maxConcurrency, "-") and node.maxConcurrency or tonumber(node.maxConcurrency)) or 0 - xmux.maxConnections = node.maxConnections and (string.find(node.maxConnections, "-") and node.maxConnections or tonumber(node.maxConnections)) or 0 - xmux.cMaxReuseTimes = node.cMaxReuseTimes and (string.find(node.cMaxReuseTimes, "-") and node.cMaxReuseTimes or tonumber(node.cMaxReuseTimes)) or 0 - xmux.cMaxLifetimeMs = node.cMaxLifetimeMs and (string.find(node.cMaxLifetimeMs, "-") and node.cMaxLifetimeMs or tonumber(node.cMaxLifetimeMs)) or 0 - if result.streamSettings.xhttpSettings then - result.streamSettings.xhttpSettings.xmux = xmux - end - end - - local xmux_download = {} - if (node.xhttp_download_xmux == "1") then - xmux_download.maxConcurrency = node.download_maxConcurrency and (string.find(node.download_maxConcurrency, "-") and node.download_maxConcurrency or tonumber(node.download_maxConcurrency)) or 0 - xmux_download.maxConnections = node.download_maxConnections and (string.find(node.download_maxConnections, "-") and node.download_maxConnections or tonumber(node.download_maxConnections)) or 0 - xmux_download.cMaxReuseTimes = node.download_cMaxReuseTimes and (string.find(node.download_cMaxReuseTimes, "-") and node.download_cMaxReuseTimes or tonumber(node.download_cMaxReuseTimes)) or 0 - xmux_download.cMaxLifetimeMs = node.download_cMaxLifetimeMs and (string.find(node.download_cMaxLifetimeMs, "-") and node.download_cMaxLifetimeMs or tonumber(node.download_cMaxLifetimeMs)) or 0 - if result.streamSettings.xhttpSettings.downloadSettings.xhttpSettings then - result.streamSettings.xhttpSettings.downloadSettings.xhttpSettings.xmux = xmux_download - end - end - end return result end diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm index 2922632680..ae9fceeee8 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm @@ -367,6 +367,8 @@ local api = require "luci.passwall2.api" } else if (v_transport === "xhttp") { params += opt.query("host", dom_prefix + "xhttp_host"); params += opt.query("path", dom_prefix + "xhttp_path"); + params += opt.query("mode", dom_prefix + "xhttp_mode"); + params += opt.query("extra", dom_prefix + "xhttp_extra"); } params += "&type=" + v_transport; @@ -1154,6 +1156,8 @@ local api = require "luci.passwall2.api" } else if (queryParam.type === "xhttp" || queryParam.type === "splithttp") { opt.set(dom_prefix + 'xhttp_host', queryParam.host || ""); opt.set(dom_prefix + 'xhttp_path', queryParam.path || ""); + opt.set(dom_prefix + 'xhttp_mode', queryParam.mode || "auto"); + opt.set(dom_prefix + 'xhttp_extra', queryParam.extra || ""); } if (m.hash) { diff --git a/openwrt-passwall2/luci-app-passwall2/po/zh-cn/passwall2.po b/openwrt-passwall2/luci-app-passwall2/po/zh-cn/passwall2.po index f255d4dd0b..9f8004f1e1 100644 --- a/openwrt-passwall2/luci-app-passwall2/po/zh-cn/passwall2.po +++ b/openwrt-passwall2/luci-app-passwall2/po/zh-cn/passwall2.po @@ -1381,26 +1381,8 @@ msgstr "客户端文件不适合当前设备。" msgid "Can't move new file to path: %s" msgstr "无法移动新文件到:%s" -msgid "XHTTP download splitting" -msgstr "XHTTP 下行分离" - -msgid "Must be the same as upload path." -msgstr "必须与上行 path 相同。" - -msgid "Enable XHTTP XMUX. It's not recommended to enable Mux.Cool at the same time." -msgstr "启用 XHTTP XMUX。不建议与 Mux.Cool 同时启用。" - -msgid "XMUX Max Concurrency" -msgstr "XMUX 连接最大复用流数" - -msgid "XMUX Max Connections" -msgstr "XMUX 最大连接数" - -msgid "XMUX Connection Max Reuse Times" -msgstr "XMUX 连接最多复用次数" - -msgid "XMUX Connection Max Lifetime (ms)" -msgstr "XMUX 连接最大存活时间(ms)" +msgid "An XHTTP extra object in raw json" +msgstr "一个 json 格式的 XHTTP extra object" msgid "Enable Mux.Cool" msgstr "启用 Mux.Cool" @@ -1480,6 +1462,9 @@ msgstr "端口跳跃时间 " msgid "Additional ports for hysteria hop" msgstr "端口跳跃额外端口" +msgid "HeartbeatPeriod(second)" +msgstr "心跳周期(单位:秒)" + msgid "Remove resource files" msgstr "删除资源文件" diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.sh b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.sh index 0e2f598ae8..470ab1e6ca 100755 --- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.sh +++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.sh @@ -100,7 +100,7 @@ add() { } #始终用国内DNS解析节点域名 - servers=$(uci show "${CONFIG}" | grep ".address=" | cut -d "'" -f 2) + servers=$(uci show "${CONFIG}" | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2) hosts_foreach "servers" host_from_url | grep '[a-zA-Z]$' | sort -u | grep -v "engage.cloudflareclient.com" | gen_items settype="${set_type}" setnames="${setflag_4}passwall2_vpslist,${setflag_6}passwall2_vpslist6" dnss="${LOCAL_DNS:-${DEFAULT_DNS}}" outf="${TMP_DNSMASQ_PATH}/10-vpslist_host.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" echolog " - [$?]节点列表中的域名(vpslist):${DEFAULT_DNS:-默认}" diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/iptables.sh b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/iptables.sh index 5a76b1127b..7fc8e023c7 100755 --- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/iptables.sh +++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/iptables.sh @@ -458,6 +458,8 @@ filter_haproxy() { filter_vpsip() { uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R + uci show $CONFIG | grep ".download_address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R + uci show $CONFIG | grep ".download_address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R echolog "加入所有节点到ipset[$IPSET_VPSLIST]直连完成" } diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/nftables.sh b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/nftables.sh index 78c45cbff8..d2ccda9a9f 100755 --- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/nftables.sh +++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/nftables.sh @@ -517,6 +517,8 @@ filter_vps_addr() { filter_vpsip() { insert_nftset $NFTSET_VPSLIST "-1" $(uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d") insert_nftset $NFTSET_VPSLIST6 "-1" $(uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d") + insert_nftset $NFTSET_VPSLIST "-1" $(uci show $CONFIG | grep ".download_address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d") + insert_nftset $NFTSET_VPSLIST6 "-1" $(uci show $CONFIG | grep ".download_address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d") echolog "加入所有节点到nftset[$NFTSET_VPSLIST]直连完成" } @@ -686,6 +688,7 @@ add_firewall_rule() { filter_haproxy > /dev/null 2>&1 & # Prevent some conditions filter_vps_addr $(config_n_get $NODE address) > /dev/null 2>&1 & + filter_vps_addr $(config_n_get $NODE download_address) > /dev/null 2>&1 & accept_icmp=$(config_t_get global_forwarding accept_icmp 0) accept_icmpv6=$(config_t_get global_forwarding accept_icmpv6 0) diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index e1db556001..cfc8779d8c 100755 --- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -488,6 +488,16 @@ local function processData(szType, content, add_mode, add_from) if info.net == 'xhttp' or info.net == 'splithttp' then result.xhttp_host = info.host result.xhttp_path = info.path + result.xhttp_mode = params.mode or "auto" + result.xhttp_extra = params.extra + local success, Data = pcall(jsonParse, params.extra) + 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) + result.download_address = address and address ~= "" and address or nil + else + result.download_address = nil + end end if not info.security then result.security = "auto" end if info.tls == "tls" or info.tls == "1" then diff --git a/shadowsocks-rust/Cargo.lock b/shadowsocks-rust/Cargo.lock index e3b30e8b33..bd04c92f2d 100644 --- a/shadowsocks-rust/Cargo.lock +++ b/shadowsocks-rust/Cargo.lock @@ -283,12 +283,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - [[package]] name = "bitflags" version = "1.3.2" @@ -350,11 +344,10 @@ dependencies = [ [[package]] name = "bloomfilter" -version = "2.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9ee97b815938a5cbb3a0d487d8006fec4859e46c3cd9d1edb1f81090dab14ac" +checksum = "1f6d7f06817e48ea4e17532fa61bc4e8b9a101437f0623f69d2ea54284f3a817" dependencies = [ - "bit-vec", "getrandom", "siphasher", ] @@ -3305,7 +3298,7 @@ dependencies = [ "tokio-native-tls", "tokio-rustls", "trait-variant", - "tun2", + "tun", "webpki-roots", "windows-sys 0.59.0", "zstd", @@ -3651,9 +3644,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -3674,9 +3667,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -3709,9 +3702,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -3880,10 +3873,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "tun2" -version = "4.0.0" +name = "tun" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21afe73d3d42581a7400fbf5aec057a646ffe3f8bb5ae3f61d88c7e7f4ac77be" +checksum = "f3c3f82bccbec181c56278683da7d915cf875a6cf8a450b3bcf1367de222775e" dependencies = [ "bytes", "cfg-if", @@ -3893,7 +3886,7 @@ dependencies = [ "libc", "log", "nix", - "thiserror 1.0.69", + "thiserror 2.0.3", "tokio", "tokio-util", "windows-sys 0.59.0", diff --git a/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml b/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml index 714521441e..c27fa095cb 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml +++ b/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml @@ -96,7 +96,7 @@ local-tunnel = ["local"] # Enable socks4 protocol for sslocal local-socks4 = ["local"] # Enable Tun interface protocol for sslocal -local-tun = ["local", "etherparse", "tun2", "smoltcp"] +local-tun = ["local", "etherparse", "tun", "smoltcp"] # Enable Fake DNS local-fake-dns = ["local", "trust-dns", "sled", "bson"] # sslocal support online URL (SIP008 Online Configuration Delivery) @@ -195,9 +195,7 @@ flate2 = { version = "1.0", optional = true } brotli = { version = "7.0", optional = true } zstd = { version = "0.13", optional = true } -tun2 = { version = "4.0", optional = true, default-features = false, features = [ - "async", -] } +tun = { version = "0.7", optional = true, features = ["async"] } etherparse = { version = "0.16", optional = true } smoltcp = { version = "0.12", optional = true, default-features = false, features = [ "std", diff --git a/shadowsocks-rust/crates/shadowsocks-service/src/local/tun/fake_tun.rs b/shadowsocks-rust/crates/shadowsocks-service/src/local/tun/fake_tun.rs index 0e563f3e5b..a936cf5375 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/src/local/tun/fake_tun.rs +++ b/shadowsocks-rust/crates/shadowsocks-service/src/local/tun/fake_tun.rs @@ -9,7 +9,7 @@ use std::{ }; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; -use tun2::{AbstractDevice, Configuration, Error as TunError}; +use tun::{AbstractDevice, Configuration, Error as TunError}; pub struct FakeQueue; @@ -32,55 +32,59 @@ impl Write for FakeQueue { pub struct FakeDevice; impl AbstractDevice for FakeDevice { - fn tun_name(&self) -> tun2::Result { + fn tun_name(&self) -> tun::Result { Err(TunError::NotImplemented) } - fn set_tun_name(&mut self, _: &str) -> tun2::Result<()> { + fn tun_index(&self) -> tun::Result { Err(TunError::NotImplemented) } - fn enabled(&mut self, _: bool) -> tun2::Result<()> { + fn set_tun_name(&mut self, _: &str) -> tun::Result<()> { Err(TunError::NotImplemented) } - fn address(&self) -> tun2::Result { + fn enabled(&mut self, _: bool) -> tun::Result<()> { Err(TunError::NotImplemented) } - fn set_address(&mut self, _: IpAddr) -> tun2::Result<()> { + fn address(&self) -> tun::Result { Err(TunError::NotImplemented) } - fn destination(&self) -> tun2::Result { + fn set_address(&mut self, _: IpAddr) -> tun::Result<()> { Err(TunError::NotImplemented) } - fn set_destination(&mut self, _: IpAddr) -> tun2::Result<()> { + fn destination(&self) -> tun::Result { Err(TunError::NotImplemented) } - fn broadcast(&self) -> tun2::Result { + fn set_destination(&mut self, _: IpAddr) -> tun::Result<()> { Err(TunError::NotImplemented) } - fn set_broadcast(&mut self, _: IpAddr) -> tun2::Result<()> { + fn broadcast(&self) -> tun::Result { Err(TunError::NotImplemented) } - fn netmask(&self) -> tun2::Result { + fn set_broadcast(&mut self, _: IpAddr) -> tun::Result<()> { Err(TunError::NotImplemented) } - fn set_netmask(&mut self, _: IpAddr) -> tun2::Result<()> { + fn netmask(&self) -> tun::Result { Err(TunError::NotImplemented) } - fn mtu(&self) -> tun2::Result { + fn set_netmask(&mut self, _: IpAddr) -> tun::Result<()> { Err(TunError::NotImplemented) } - fn set_mtu(&mut self, _: u16) -> tun2::Result<()> { + fn mtu(&self) -> tun::Result { + Err(TunError::NotImplemented) + } + + fn set_mtu(&mut self, _: u16) -> tun::Result<()> { Err(TunError::NotImplemented) } diff --git a/shadowsocks-rust/crates/shadowsocks-service/src/local/tun/mod.rs b/shadowsocks-rust/crates/shadowsocks-service/src/local/tun/mod.rs index a60b089f47..03536e7808 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/src/local/tun/mod.rs +++ b/shadowsocks-rust/crates/shadowsocks-service/src/local/tun/mod.rs @@ -28,11 +28,11 @@ cfg_if! { target_os = "android", target_os = "windows", target_os = "freebsd"))] { - use tun2::{ + use tun::{ create_as_async, AsyncDevice, Configuration as TunConfiguration, AbstractDevice, Error as TunError, Layer, }; } else { - use tun2::{AbstractDevice, Configuration as TunConfiguration, Error as TunError, Layer}; + use tun::{AbstractDevice, Configuration as TunConfiguration, Error as TunError, Layer}; mod fake_tun; use self::fake_tun::{create_as_async, AsyncDevice}; diff --git a/shadowsocks-rust/crates/shadowsocks/Cargo.toml b/shadowsocks-rust/crates/shadowsocks/Cargo.toml index b4382d7ae2..7c8ea5434c 100644 --- a/shadowsocks-rust/crates/shadowsocks/Cargo.toml +++ b/shadowsocks-rust/crates/shadowsocks/Cargo.toml @@ -60,7 +60,7 @@ url = "2.5" once_cell = "1.17" spin = { version = "0.9", features = ["std"] } pin-project = "1.1" -bloomfilter = { version = "2.0.0", optional = true } +bloomfilter = { version = "3.0.0", optional = true } thiserror = "2.0" rand = { version = "0.8", optional = true } lru_time_cache = { version = "0.11", optional = true } diff --git a/shadowsocks-rust/crates/shadowsocks/src/security/replay/ppbloom.rs b/shadowsocks-rust/crates/shadowsocks/src/security/replay/ppbloom.rs index 50490ccba7..88dfa20d16 100644 --- a/shadowsocks-rust/crates/shadowsocks/src/security/replay/ppbloom.rs +++ b/shadowsocks-rust/crates/shadowsocks/src/security/replay/ppbloom.rs @@ -47,8 +47,8 @@ impl PingPongBloom { PingPongBloom { blooms: [ - Bloom::new_for_fp_rate(item_count, fp_p), - Bloom::new_for_fp_rate(item_count, fp_p), + Bloom::new_for_fp_rate(item_count, fp_p).expect("BloomFilter1"), + Bloom::new_for_fp_rate(item_count, fp_p).expect("BloomFilter2"), ], bloom_count: [0, 0], item_count, diff --git a/shadowsocks-rust/deny.toml b/shadowsocks-rust/deny.toml index 2a928df0fc..e1c1b51c2c 100644 --- a/shadowsocks-rust/deny.toml +++ b/shadowsocks-rust/deny.toml @@ -118,7 +118,7 @@ exceptions = [ # Each entry is the crate and version constraint, and its specific allow # list #{ allow = ["Zlib"], crate = "adler32" }, - { allow = ["WTFPL"], crate = "tun2" }, + { allow = ["WTFPL"], crate = "tun" }, { allow = ["LicenseRef-ring"], crate = "ring" }, ] diff --git a/shadowsocks-rust/tests/tunnel.rs b/shadowsocks-rust/tests/tunnel.rs index 508d7c1ae3..435b7ac9d3 100644 --- a/shadowsocks-rust/tests/tunnel.rs +++ b/shadowsocks-rust/tests/tunnel.rs @@ -89,11 +89,13 @@ async fn tcp_tunnel() { async fn udp_tunnel() { let _ = env_logger::try_init(); - // A UDP echo server - tokio::spawn(async { - let socket = UdpSocket::bind("127.0.0.1:9230").await.unwrap(); + let socket = UdpSocket::bind("127.0.0.1:0").await.unwrap(); + let socket_local_addr = socket.local_addr().unwrap(); + let echo_server_port = socket_local_addr.port(); - debug!("UDP echo server listening on 127.0.0.1:9230"); + // A UDP echo server + tokio::spawn(async move { + debug!("UDP echo server listening on {socket_local_addr}"); let mut buffer = [0u8; 65536]; loop { @@ -115,7 +117,7 @@ async fn udp_tunnel() { "local_address": "127.0.0.1", "protocol": "tunnel", "forward_address": "127.0.0.1", - "forward_port": 9230 + "forward_port": {echo_server_port} }} ], "server": "127.0.0.1", diff --git a/sing-box/Makefile b/sing-box/Makefile index e35afa096c..70627aead0 100644 --- a/sing-box/Makefile +++ b/sing-box/Makefile @@ -71,7 +71,7 @@ release: dist/*_amd64.pkg.tar.zst \ dist/*_arm64.pkg.tar.zst \ dist/release - ghr --replace --draft --prerelease -p 3 "v${VERSION}" dist/release + ghr --replace --draft --prerelease -p 5 "v${VERSION}" dist/release rm -r dist/release release_repo: @@ -90,7 +90,7 @@ upload_android: mkdir -p dist/release_android cp ../sing-box-for-android/app/build/outputs/apk/play/release/*.apk dist/release_android cp ../sing-box-for-android/app/build/outputs/apk/other/release/*-universal.apk dist/release_android - ghr --replace --draft --prerelease -p 3 "v${VERSION}" dist/release_android + ghr --replace --draft --prerelease -p 5 "v${VERSION}" dist/release_android rm -rf dist/release_android release_android: lib_android update_android_version build_android upload_android diff --git a/sing-box/cmd/sing-box/cmd_tools.go b/sing-box/cmd/sing-box/cmd_tools.go index 8f30e05424..55e5b45873 100644 --- a/sing-box/cmd/sing-box/cmd_tools.go +++ b/sing-box/cmd/sing-box/cmd_tools.go @@ -30,7 +30,7 @@ func createPreStartedClient() (*box.Box, error) { return nil, err } } - instance, err := box.New(box.Options{Options: options}) + instance, err := box.New(box.Options{Context: globalCtx, Options: options}) if err != nil { return nil, E.Cause(err, "create service") } diff --git a/sing-box/common/dialer/default.go b/sing-box/common/dialer/default.go index 26d7d651e7..bf553618f7 100644 --- a/sing-box/common/dialer/default.go +++ b/sing-box/common/dialer/default.go @@ -88,25 +88,31 @@ func NewDefault(networkManager adapter.NetworkManager, options option.DialerOpti } if networkManager != nil && options.BindInterface == "" && options.Inet4BindAddress == nil && options.Inet6BindAddress == nil { defaultOptions := networkManager.DefaultOptions() - if defaultOptions.BindInterface != "" { - bindFunc := control.BindToInterface(networkManager.InterfaceFinder(), defaultOptions.BindInterface, -1) - dialer.Control = control.Append(dialer.Control, bindFunc) - listener.Control = control.Append(listener.Control, bindFunc) - } else if networkManager.AutoDetectInterface() { - if defaultOptions.NetworkStrategy != C.NetworkStrategyDefault && C.NetworkStrategy(options.NetworkStrategy) == C.NetworkStrategyDefault { - networkStrategy = defaultOptions.NetworkStrategy - networkType = defaultOptions.NetworkType - fallbackNetworkType = defaultOptions.FallbackNetworkType - networkFallbackDelay = defaultOptions.FallbackDelay - bindFunc := networkManager.ProtectFunc() - dialer.Control = control.Append(dialer.Control, bindFunc) - listener.Control = control.Append(listener.Control, bindFunc) - } else { - bindFunc := networkManager.AutoDetectInterfaceFunc() + if options.BindInterface == "" { + if defaultOptions.BindInterface != "" { + bindFunc := control.BindToInterface(networkManager.InterfaceFinder(), defaultOptions.BindInterface, -1) dialer.Control = control.Append(dialer.Control, bindFunc) listener.Control = control.Append(listener.Control, bindFunc) + } else if networkManager.AutoDetectInterface() { + if defaultOptions.NetworkStrategy != C.NetworkStrategyDefault && C.NetworkStrategy(options.NetworkStrategy) == C.NetworkStrategyDefault { + networkStrategy = defaultOptions.NetworkStrategy + networkType = defaultOptions.NetworkType + fallbackNetworkType = defaultOptions.FallbackNetworkType + networkFallbackDelay = defaultOptions.FallbackDelay + bindFunc := networkManager.ProtectFunc() + dialer.Control = control.Append(dialer.Control, bindFunc) + listener.Control = control.Append(listener.Control, bindFunc) + } else { + bindFunc := networkManager.AutoDetectInterfaceFunc() + dialer.Control = control.Append(dialer.Control, bindFunc) + listener.Control = control.Append(listener.Control, bindFunc) + } } } + if options.RoutingMark == 0 && defaultOptions.RoutingMark != 0 { + dialer.Control = control.Append(dialer.Control, control.RoutingMark(defaultOptions.RoutingMark)) + listener.Control = control.Append(listener.Control, control.RoutingMark(defaultOptions.RoutingMark)) + } } if options.ReuseAddr { listener.Control = control.Append(listener.Control, control.ReuseAddr()) diff --git a/sing-box/docs/changelog.md b/sing-box/docs/changelog.md index d7d49d9ae9..f0e5929df8 100644 --- a/sing-box/docs/changelog.md +++ b/sing-box/docs/changelog.md @@ -2,7 +2,7 @@ icon: material/alert-decagram --- -#### 1.11.0-beta.4 +#### 1.11.0-beta.5 * Fixes and improvements diff --git a/sing-box/experimental/clashapi/server.go b/sing-box/experimental/clashapi/server.go index 624ef4dd15..a9422b43b0 100644 --- a/sing-box/experimental/clashapi/server.go +++ b/sing-box/experimental/clashapi/server.go @@ -321,18 +321,15 @@ func traffic(trafficManager *trafficontrol.Manager) func(w http.ResponseWriter, tick := time.NewTicker(time.Second) defer tick.Stop() buf := &bytes.Buffer{} - var ( - uploadTotal int64 - doanloadTotal int64 - err error - ) + uploadTotal, downloadTotal := trafficManager.Total() for range tick.C { buf.Reset() uploadTotalNew, downloadTotalNew := trafficManager.Total() - if err := json.NewEncoder(buf).Encode(Traffic{ + err := json.NewEncoder(buf).Encode(Traffic{ Up: uploadTotalNew - uploadTotal, - Down: downloadTotalNew - doanloadTotal, - }); err != nil { + Down: downloadTotalNew - downloadTotal, + }) + if err != nil { break } if conn == nil { @@ -344,8 +341,9 @@ func traffic(trafficManager *trafficontrol.Manager) func(w http.ResponseWriter, if err != nil { break } + uploadTotal = uploadTotalNew - doanloadTotal = downloadTotalNew + downloadTotal = downloadTotalNew } } } diff --git a/sing-box/experimental/libbox/command_status.go b/sing-box/experimental/libbox/command_status.go index 05c9582a25..f8709ef04e 100644 --- a/sing-box/experimental/libbox/command_status.go +++ b/sing-box/experimental/libbox/command_status.go @@ -49,19 +49,10 @@ func (s *CommandServer) handleStatusConn(conn net.Conn) error { ticker := time.NewTicker(time.Duration(interval)) defer ticker.Stop() ctx := connKeepAlive(conn) - var ( - status StatusMessage - uploadTotal int64 - downloadTotal int64 - ) + status := s.readStatus() + uploadTotal := status.UplinkTotal + downloadTotal := status.DownlinkTotal for { - status = s.readStatus() - upload := status.UplinkTotal - uploadTotal - download := status.DownlinkTotal - downloadTotal - uploadTotal = status.UplinkTotal - downloadTotal = status.DownlinkTotal - status.Uplink = upload - status.Downlink = download err = binary.Write(conn, binary.BigEndian, status) if err != nil { return err @@ -71,6 +62,13 @@ func (s *CommandServer) handleStatusConn(conn net.Conn) error { return ctx.Err() case <-ticker.C: } + status = s.readStatus() + upload := status.UplinkTotal - uploadTotal + download := status.DownlinkTotal - downloadTotal + uploadTotal = status.UplinkTotal + downloadTotal = status.DownlinkTotal + status.Uplink = upload + status.Downlink = download } } diff --git a/sing-box/go.mod b/sing-box/go.mod index b070e67847..a5b727710f 100644 --- a/sing-box/go.mod +++ b/sing-box/go.mod @@ -25,7 +25,7 @@ require ( github.com/sagernet/gvisor v0.0.0-20241123041152-536d05261cff github.com/sagernet/quic-go v0.48.2-beta.1 github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 - github.com/sagernet/sing v0.6.0-beta.2 + github.com/sagernet/sing v0.6.0-beta.4 github.com/sagernet/sing-dns v0.4.0-beta.1 github.com/sagernet/sing-mux v0.3.0-alpha.1 github.com/sagernet/sing-quic v0.4.0-alpha.4 diff --git a/sing-box/go.sum b/sing-box/go.sum index 7539699e80..941a265f80 100644 --- a/sing-box/go.sum +++ b/sing-box/go.sum @@ -110,8 +110,8 @@ github.com/sagernet/quic-go v0.48.2-beta.1/go.mod h1:1WgdDIVD1Gybp40JTWketeSfKA/ github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byLGkEnIYp6grlXfo1QYUfiYFGjewIdc= github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU= github.com/sagernet/sing v0.2.18/go.mod h1:OL6k2F0vHmEzXz2KW19qQzu172FDgSbUSODylighuVo= -github.com/sagernet/sing v0.6.0-beta.2 h1:Dcutp3kxrsZes9q3oTiHQhYYjQvDn5rwp1OI9fDLYwQ= -github.com/sagernet/sing v0.6.0-beta.2/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/sagernet/sing v0.6.0-beta.4 h1:OLm3FTyDYsyGaQrolbXf6R8At4FzTLdFCPmRzgp9Ki4= +github.com/sagernet/sing v0.6.0-beta.4/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/sagernet/sing-dns v0.4.0-beta.1 h1:W1XkdhigwxDOMgMDVB+9kdomCpb7ExsZfB4acPcTZFY= github.com/sagernet/sing-dns v0.4.0-beta.1/go.mod h1:8wuFcoFkWM4vJuQyg8e97LyvDwe0/Vl7G839WLcKDs8= github.com/sagernet/sing-mux v0.3.0-alpha.1 h1:IgNX5bJBpL41gGbp05pdDOvh/b5eUQ6cv9240+Ngipg= diff --git a/sing-box/option/route.go b/sing-box/option/route.go index b05fb39959..0eb1cbf1b2 100644 --- a/sing-box/option/route.go +++ b/sing-box/option/route.go @@ -12,7 +12,7 @@ type RouteOptions struct { AutoDetectInterface bool `json:"auto_detect_interface,omitempty"` OverrideAndroidVPN bool `json:"override_android_vpn,omitempty"` DefaultInterface string `json:"default_interface,omitempty"` - DefaultMark uint32 `json:"default_mark,omitempty"` + DefaultMark FwMark `json:"default_mark,omitempty"` DefaultNetworkStrategy NetworkStrategy `json:"default_network_strategy,omitempty"` DefaultNetworkType badoption.Listable[InterfaceType] `json:"default_network_type,omitempty"` DefaultFallbackNetworkType badoption.Listable[InterfaceType] `json:"default_fallback_network_type,omitempty"` diff --git a/sing-box/protocol/direct/inbound.go b/sing-box/protocol/direct/inbound.go index 18d961b326..4b34e37c2e 100644 --- a/sing-box/protocol/direct/inbound.go +++ b/sing-box/protocol/direct/inbound.go @@ -97,6 +97,7 @@ func (i *Inbound) NewPacketEx(buffer *buf.Buffer, source M.Socksaddr) { func (i *Inbound) NewConnectionEx(ctx context.Context, conn net.Conn, metadata adapter.InboundContext, onClose N.CloseHandlerFunc) { metadata.Inbound = i.Tag() metadata.InboundType = i.Type() + metadata.Destination = M.SocksaddrFromNet(conn.LocalAddr()) switch i.overrideOption { case 1: metadata.Destination = i.overrideDestination @@ -107,7 +108,9 @@ func (i *Inbound) NewConnectionEx(ctx context.Context, conn net.Conn, metadata a case 3: metadata.Destination.Port = i.overrideDestination.Port } - i.logger.InfoContext(ctx, "inbound connection to ", metadata.Destination) + if i.overrideOption != 0 { + i.logger.InfoContext(ctx, "inbound connection to ", metadata.Destination) + } i.router.RouteConnectionEx(ctx, conn, metadata, onClose) } diff --git a/sing-box/protocol/redirect/tproxy.go b/sing-box/protocol/redirect/tproxy.go index 23d441b7a7..7860e173d6 100644 --- a/sing-box/protocol/redirect/tproxy.go +++ b/sing-box/protocol/redirect/tproxy.go @@ -93,6 +93,8 @@ func (t *TProxy) Close() error { } func (t *TProxy) NewConnectionEx(ctx context.Context, conn net.Conn, metadata adapter.InboundContext, onClose N.CloseHandlerFunc) { + metadata.Inbound = t.Tag() + metadata.InboundType = t.Type() metadata.Destination = M.SocksaddrFromNet(conn.LocalAddr()).Unwrap() t.logger.InfoContext(ctx, "inbound connection to ", metadata.Destination) t.router.RouteConnectionEx(ctx, conn, metadata, onClose) diff --git a/sing-box/protocol/ssh/outbound.go b/sing-box/protocol/ssh/outbound.go index eb9970b5fb..162f511221 100644 --- a/sing-box/protocol/ssh/outbound.go +++ b/sing-box/protocol/ssh/outbound.go @@ -36,6 +36,7 @@ type Outbound struct { outbound.Adapter ctx context.Context logger logger.ContextLogger + dnsRouter adapter.Router dialer N.Dialer serverAddr M.Socksaddr user string @@ -57,6 +58,7 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL Adapter: outbound.NewAdapterWithDialerOptions(C.TypeSSH, tag, []string{N.NetworkTCP}, options.DialerOptions), ctx: ctx, logger: logger, + dnsRouter: router, dialer: outboundDialer, serverAddr: options.ServerOptions.Build(), user: options.User, @@ -187,6 +189,15 @@ func (s *Outbound) Close() error { } func (s *Outbound) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) { + if destination.IsFqdn() { + destinationAddresses, err := s.dnsRouter.LookupDefault(ctx, destination.Fqdn) + if err != nil { + return nil, err + } + destination = M.SocksaddrFrom(destinationAddresses[0], destination.Port) + } else if !destination.Addr.IsValid() { + return nil, E.New("invalid destination: ", destination) + } client, err := s.connect() if err != nil { return nil, err diff --git a/sing-box/route/network.go b/sing-box/route/network.go index 0e02ddc2fe..2065c38999 100644 --- a/sing-box/route/network.go +++ b/sing-box/route/network.go @@ -61,7 +61,7 @@ func NewNetworkManager(ctx context.Context, logger logger.ContextLogger, routeOp autoDetectInterface: routeOptions.AutoDetectInterface, defaultOptions: adapter.NetworkOptions{ BindInterface: routeOptions.DefaultInterface, - RoutingMark: routeOptions.DefaultMark, + RoutingMark: uint32(routeOptions.DefaultMark), NetworkStrategy: C.NetworkStrategy(routeOptions.DefaultNetworkStrategy), NetworkType: common.Map(routeOptions.DefaultNetworkType, option.InterfaceType.Build), FallbackNetworkType: common.Map(routeOptions.DefaultFallbackNetworkType, option.InterfaceType.Build), diff --git a/sing-box/test/go.mod b/sing-box/test/go.mod index 229b5dee9c..d258722e69 100644 --- a/sing-box/test/go.mod +++ b/sing-box/test/go.mod @@ -13,7 +13,7 @@ require ( github.com/docker/go-connections v0.5.0 github.com/gofrs/uuid/v5 v5.3.0 github.com/sagernet/quic-go v0.48.2-beta.1 - github.com/sagernet/sing v0.6.0-beta.2 + github.com/sagernet/sing v0.6.0-beta.3 github.com/sagernet/sing-dns v0.4.0-beta.1 github.com/sagernet/sing-quic v0.4.0-alpha.4 github.com/sagernet/sing-shadowsocks v0.2.7 @@ -25,7 +25,7 @@ require ( ) require ( - github.com/Microsoft/go-winio v0.4.14 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ajg/form v1.5.1 // indirect github.com/andybalholm/brotli v1.0.6 // indirect github.com/caddyserver/certmagic v0.20.0 // indirect @@ -33,7 +33,7 @@ require ( github.com/containerd/log v0.1.0 // indirect github.com/cretz/bine v0.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/distribution/reference v0.6.0 // indirect + github.com/distribution/reference v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect @@ -68,10 +68,10 @@ require ( github.com/morikuni/aec v1.0.0 // indirect github.com/onsi/ginkgo/v2 v2.9.7 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/image-spec v1.0.2 // indirect github.com/oschwald/maxminddb-golang v1.12.0 // indirect github.com/pierrec/lz4/v4 v4.1.14 // indirect - github.com/pkg/errors v0.8.1 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/qtls-go1-20 v0.4.1 // indirect @@ -94,12 +94,12 @@ require ( github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect github.com/vishvananda/netns v0.0.4 // indirect github.com/zeebo/blake3 v0.2.3 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 // indirect - go.opentelemetry.io/otel v1.32.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 // indirect - go.opentelemetry.io/otel/metric v1.32.0 // indirect - go.opentelemetry.io/otel/sdk v1.32.0 // indirect - go.opentelemetry.io/otel/trace v1.32.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect + go.opentelemetry.io/otel v1.31.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect + go.opentelemetry.io/otel/metric v1.31.0 // indirect + go.opentelemetry.io/otel/sdk v1.31.0 // indirect + go.opentelemetry.io/otel/trace v1.31.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect @@ -112,7 +112,7 @@ require ( golang.org/x/time v0.7.0 // indirect golang.org/x/tools v0.24.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect google.golang.org/grpc v1.67.1 // indirect google.golang.org/protobuf v1.35.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/sing-box/test/go.sum b/sing-box/test/go.sum index 40a760ceca..363adc5139 100644 --- a/sing-box/test/go.sum +++ b/sing-box/test/go.sum @@ -1,7 +1,7 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= @@ -19,8 +19,8 @@ github.com/cretz/bine v0.2.0/go.mod h1:WU4o9QR9wWp8AVKtTM1XD5vUHkEqnf2vVSo6dBqbe github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= -github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI= github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -62,8 +62,8 @@ github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a h1:fEBsGL/sjAuJrgah5X github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 h1:ad0vkEBuk23VJzZR9nkLVG0YAoN9coASF1GusYX6AlU= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0/go.mod h1:igFoXX2ELCW06bol23DWPB5BEWfZISOzSP5K2sbLea0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= github.com/insomniacslk/dhcp v0.0.0-20231206064809-8c70d406f6d2 h1:9K06NfxkBh25x56yVhWWlKFE8YpicaSfHwoV8SFbueA= @@ -78,7 +78,6 @@ github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6K github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/libdns/alidns v1.0.3 h1:LFHuGnbseq5+HCeGa1aW8awyX/4M2psB9962fdD2+yQ= @@ -114,14 +113,14 @@ github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRahPmr4= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs= github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY= github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE= github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= @@ -147,8 +146,8 @@ github.com/sagernet/quic-go v0.48.2-beta.1/go.mod h1:1WgdDIVD1Gybp40JTWketeSfKA/ github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byLGkEnIYp6grlXfo1QYUfiYFGjewIdc= github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU= github.com/sagernet/sing v0.2.18/go.mod h1:OL6k2F0vHmEzXz2KW19qQzu172FDgSbUSODylighuVo= -github.com/sagernet/sing v0.6.0-beta.2 h1:Dcutp3kxrsZes9q3oTiHQhYYjQvDn5rwp1OI9fDLYwQ= -github.com/sagernet/sing v0.6.0-beta.2/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/sagernet/sing v0.6.0-beta.3 h1:T8MKw7dEjG4a24m/sHDIQLMjc45rZvYHSYO9/Mwk6nI= +github.com/sagernet/sing v0.6.0-beta.3/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/sagernet/sing-dns v0.4.0-beta.1 h1:W1XkdhigwxDOMgMDVB+9kdomCpb7ExsZfB4acPcTZFY= github.com/sagernet/sing-dns v0.4.0-beta.1/go.mod h1:8wuFcoFkWM4vJuQyg8e97LyvDwe0/Vl7G839WLcKDs8= github.com/sagernet/sing-mux v0.3.0-alpha.1 h1:IgNX5bJBpL41gGbp05pdDOvh/b5eUQ6cv9240+Ngipg= @@ -173,14 +172,11 @@ github.com/sagernet/wireguard-go v0.0.1-beta.4 h1:8uyM5fxfEXdu4RH05uOK+v25i3lTNd github.com/sagernet/wireguard-go v0.0.1-beta.4/go.mod h1:jGXij2Gn2wbrWuYNUmmNhf1dwcZtvyAvQoe8Xd8MbUo= github.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854 h1:6uUiZcDRnZSAegryaUGwPC/Fj13JSHwiTftrXhMmYOc= github.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854/go.mod h1:LtfoSK3+NG57tvnVEHgcuBW9ujgE8enPSgzgwStwCAA= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/spyzhov/ajson v0.9.4 h1:MVibcTCgO7DY4IlskdqIlCmDOsUOZ9P7oKj8ifdcf84= github.com/spyzhov/ajson v0.9.4/go.mod h1:a6oSw0MMb7Z5aD2tPoPO+jq11ETKgXUr2XktHdT8Wt8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= @@ -197,20 +193,20 @@ github.com/zeebo/blake3 v0.2.3 h1:TFoLXsjeXqRNFxSbk35Dk4YtszE/MQQGK10BH4ptoTg= github.com/zeebo/blake3 v0.2.3/go.mod h1:mjJjZpnsyIVtVgTOSpJ9vmRE4wgDeyt2HU3qXvvKCaQ= github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo= github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 h1:DheMAlT6POBP+gh8RUH19EOTnQIor5QE0uSRPtzCpSw= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0/go.mod h1:wZcGmeVO9nzP67aYSLDqXNWK87EZWhi7JWj1v7ZXf94= -go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= -go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 h1:IJFEoHiytixx8cMiVAO+GmHR6Frwu+u5Ur8njpFO6Ac= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0/go.mod h1:3rHrKNtLIoS0oZwkY2vxi+oJcwFRWdtUyRII+so45p8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 h1:cMyu9O88joYEaI47CnQkxO1XZdpoTF9fEnW2duIddhw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0/go.mod h1:6Am3rn7P9TVVeXYG+wtcGE7IE1tsQ+bP3AuWcKt/gOI= -go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= -go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= -go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= -go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= -go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= -go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 h1:lUsI2TYsQw2r1IASwoROaCnjdj2cvC2+Jbxvk6nHnWU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0/go.mod h1:2HpZxxQurfGxJlJDblybejHB6RX6pmExPNe517hREw4= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -246,10 +242,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -282,10 +276,10 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= -google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 h1:M0KvPgPmDZHPlbRbaNU1APr28TvwvvdUPlSv7PUvy8g= -google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:dguCy7UOdZhTvLzDyt15+rOrawrpM4q7DD9dQ1P11P4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg= +google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 h1:QCqS/PdaHTSWGvupk2F/ehwHtGc0/GYkT+3GAcR1CCc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index 9aec55d441..e98ad96cf6 100644 --- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -7,6 +7,7 @@ if not api.finded_com("xray") then end local appname = api.appname +local jsonc = api.jsonc local uci = api.uci local type_name = "Xray" @@ -393,7 +394,7 @@ o:depends({ [option_name("tls")] = true, [option_name("utls")] = true }) o:depends({ [option_name("tls")] = true, [option_name("reality")] = true }) o = s:option(ListValue, option_name("transport"), translate("Transport")) -o:value("raw", "RAW") +o:value("raw", "RAW (TCP)") o:value("mkcp", "mKCP") o:value("ws", "WebSocket") o:value("h2", "HTTP/2") @@ -401,7 +402,7 @@ o:value("ds", "DomainSocket") o:value("quic", "QUIC") o:value("grpc", "gRPC") o:value("httpupgrade", "HttpUpgrade") -o:value("xhttp", "XHTTP") +o:value("xhttp", "XHTTP (SplitHTTP)") o:depends({ [option_name("protocol")] = "vmess" }) o:depends({ [option_name("protocol")] = "vless" }) o:depends({ [option_name("protocol")] = "socks" }) @@ -494,6 +495,10 @@ o = s:option(Value, option_name("ws_path"), translate("WebSocket Path")) o.placeholder = "/" o:depends({ [option_name("transport")] = "ws" }) +o = s:option(Value, option_name("ws_heartbeatPeriod"), translate("HeartbeatPeriod(second)")) +o.datatype = "integer" +o:depends({ [option_name("transport")] = "ws" }) + -- [[ HTTP/2部分 ]]-- o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host")) o:depends({ [option_name("transport")] = "h2" }) @@ -568,6 +573,14 @@ o.placeholder = "/" o:depends({ [option_name("transport")] = "httpupgrade" }) -- [[ XHTTP部分 ]]-- +o = s:option(ListValue, option_name("xhttp_mode"), "XHTTP " .. translate("Mode")) +o:depends({ [option_name("transport")] = "xhttp" }) +o.default = "auto" +o:value("auto") +o:value("packet-up") +o:value("stream-up") +o:value("stream-one") + o = s:option(Value, option_name("xhttp_host"), translate("XHTTP Host")) o:depends({ [option_name("transport")] = "xhttp" }) @@ -575,104 +588,34 @@ o = s:option(Value, option_name("xhttp_path"), translate("XHTTP Path")) o.placeholder = "/" o:depends({ [option_name("transport")] = "xhttp" }) --- XHTTP XMUX -o = s:option(Flag, option_name("xhttp_xmux"), "XMUX", translate("Enable XHTTP XMUX. It's not recommended to enable Mux.Cool at the same time.")) +o = s:option(TextValue, option_name("xhttp_extra"), translate("XHTTP Extra"), translate("An XHTTP extra object in raw json")) o:depends({ [option_name("transport")] = "xhttp" }) +o.rows = 15 +o.wrap = "off" +o.custom_write = function(self, section, value) -o = s:option(Value, option_name("maxConcurrency"), translate("XMUX Max Concurrency")) -o:depends({ [option_name("xhttp_xmux")] = true }) + m:set(section, self.option:sub(1 + #option_prefix), value) -o = s:option(Value, option_name("maxConnections"), translate("XMUX Max Connections")) -o:depends({ [option_name("xhttp_xmux")] = true }) - -o = s:option(Value, option_name("cMaxReuseTimes"), translate("XMUX Connection Max Reuse Times")) -o:depends({ [option_name("xhttp_xmux")] = true }) - -o = s:option(Value, option_name("cMaxLifetimeMs"), translate("XMUX Connection Max Lifetime (ms)")) -o:depends({ [option_name("xhttp_xmux")] = true }) - --- XHTTP 下行 -o = s:option(Flag, option_name("xhttp_download"), string.format('%s', translate("XHTTP download splitting"))) -o:depends({ [option_name("transport")] = "xhttp" }) - -o = s:option(Value, option_name("xhttp_download_address"), string.format('%s', translate("Address"))) -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Value, option_name("xhttp_download_port"), string.format('%s', translate("Port"))) -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Value, option_name("xhttp_download_host"), string.format('%s', "XHTTP Host")) -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Value, option_name("xhttp_download_path"), string.format('%s', "XHTTP Path"), translate("Must be the same as upload path.")) -o.placeholder = "/" -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Flag, option_name("xhttp_download_tls"), string.format('%s', "TLS")) -o:depends({ [option_name("xhttp_download")] = true }) -o.default = 0 - -o = s:option(Flag, option_name("xhttp_download_reality"), string.format('%s', "REALITY")) -o.default = 0 -o:depends({ [option_name("xhttp_download_tls")] = true }) - -o = s:option(ListValue, option_name("xhttp_download_alpn"), string.format('%s', "alpn")) -o.default = "default" -o:value("default", translate("Default")) -o:value("h3") -o:value("h2") -o:value("h3,h2") -o:value("http/1.1") -o:value("h2,http/1.1") -o:value("h3,h2,http/1.1") -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = false }) - -o = s:option(Value, option_name("xhttp_download_tls_serverName"), string.format('%s', translate("Domain"))) -o:depends({ [option_name("xhttp_download_tls")] = true }) - -o = s:option(Value, option_name("xhttp_download_reality_publicKey"), string.format('%s', translate("Public Key"))) -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = true }) - -o = s:option(Value, option_name("xhttp_download_reality_shortId"), string.format('%s', translate("Short Id"))) -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = true }) - -o = s:option(Value, option_name("xhttp_download_reality_spiderX"), string.format('%s', "Spider X")) -o.placeholder = "/" -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = true }) - -o = s:option(Flag, option_name("xhttp_download_utls"), string.format('%s', "uTLS")) -o.default = "0" -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = false }) - -o = s:option(ListValue, option_name("xhttp_download_fingerprint"), string.format('%s', translate("Finger Print"))) -o:value("chrome") -o:value("firefox") -o:value("edge") -o:value("safari") -o:value("360") -o:value("qq") -o:value("ios") -o:value("android") -o:value("random") -o:value("randomized") -o.default = "chrome" -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_utls")] = true }) -o:depends({ [option_name("xhttp_download_tls")] = true, [option_name("xhttp_download_reality")] = true }) - -o = s:option(Flag, option_name("xhttp_download_xmux"), string.format('%s', "XMUX"), translate("Enable XHTTP XMUX. It's not recommended to enable Mux.Cool at the same time.")) -o:depends({ [option_name("xhttp_download")] = true }) - -o = s:option(Value, option_name("download_maxConcurrency"), string.format('%s', translate("XMUX Max Concurrency"))) -o:depends({ [option_name("xhttp_download_xmux")] = true }) - -o = s:option(Value, option_name("download_maxConnections"), string.format('%s', translate("XMUX Max Connections"))) -o:depends({ [option_name("xhttp_download_xmux")] = true }) - -o = s:option(Value, option_name("download_cMaxReuseTimes"), string.format('%s', translate("XMUX Connection Max Reuse Times"))) -o:depends({ [option_name("xhttp_download_xmux")] = true }) - -o = s:option(Value, option_name("download_cMaxLifetimeMs"), string.format('%s', translate("XMUX Connection Max Lifetime (ms)"))) -o:depends({ [option_name("xhttp_download_xmux")] = true }) + local success, data = pcall(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 + m:del(section, "download_address") + 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 + return value +end -- [[ Mux.Cool ]]-- o = s:option(Flag, option_name("mux"), "Mux", translate("Enable Mux.Cool")) diff --git a/small/luci-app-passwall2/luasrc/passwall2/api.lua b/small/luci-app-passwall2/luasrc/passwall2/api.lua index 16fa181f2c..6db3a0272a 100644 --- a/small/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/small/luci-app-passwall2/luasrc/passwall2/api.lua @@ -1069,11 +1069,16 @@ function luci_types(id, m, s, type_name, option_prefix) end s.fields[key].write = function(self, section, value) if s.fields["type"]:formvalue(id) == type_name then - if self.rewrite_option then - m:set(section, self.rewrite_option, value) + -- 添加自定义 custom_write 属性,如果有自定义的 custom_write 函数,则使用自定义的 write 逻辑 + if self.custom_write then + self:custom_write(section, value) else - if self.option:find(option_prefix) == 1 then - m:set(section, self.option:sub(1 + #option_prefix), value) + if self.rewrite_option then + m:set(section, self.rewrite_option, value) + else + if self.option:find(option_prefix) == 1 then + m:set(section, self.option:sub(1 + #option_prefix), value) + end end end end diff --git a/small/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/small/luci-app-passwall2/luasrc/passwall2/util_xray.lua index 1aa130cb74..4f0eb3b87c 100644 --- a/small/luci-app-passwall2/luasrc/passwall2/util_xray.lua +++ b/small/luci-app-passwall2/luasrc/passwall2/util_xray.lua @@ -110,15 +110,6 @@ function gen_outbound(flag, node, tag, proxy_table) end end - if node.type == "Xray" and node.transport == "xhttp" then - if node.xhttp_download_tls and node.xhttp_download_tls == "1" then - node.xhttp_download_stream_security = "tls" - if node.xhttp_download_reality and node.xhttp_download_reality == "1" then - node.xhttp_download_stream_security = "reality" - end - end - end - if node.protocol == "wireguard" and node.wireguard_reserved then local bytes = {} if not node.wireguard_reserved:match("[^%d,]+") then @@ -195,7 +186,8 @@ function gen_outbound(flag, node, tag, proxy_table) headers = (node.ws_host ~= nil) and {Host = node.ws_host} or nil, maxEarlyData = tonumber(node.ws_maxEarlyData) or nil, - earlyDataHeaderName = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil + earlyDataHeaderName = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil, + heartbeatPeriod = tonumber(node.ws_heartbeatPeriod) or nil } or nil, httpSettings = (node.transport == "h2") and { path = node.h2_path or "/", @@ -223,34 +215,18 @@ function gen_outbound(flag, node, tag, proxy_table) host = node.httpupgrade_host } or nil, xhttpSettings = (node.transport == "xhttp" or node.transport == "splithttp") and { + mode = node.xhttp_mode or "auto", path = node.xhttp_path or node.splithttp_path or "/", host = node.xhttp_host or node.splithttp_host, - downloadSettings = (node.xhttp_download == "1") and { - address = node.xhttp_download_address, - port = tonumber(node.xhttp_download_port), - network = "xhttp", - xhttpSettings = { - path = node.xhttp_download_path, - host = node.xhttp_download_host, - }, - security = node.xhttp_download_stream_security, - tlsSettings = (node.xhttp_download_stream_security == "tls") and { - serverName = node.xhttp_download_tls_serverName, - allowInsecure = false, - fingerprint = (node.xhttp_download_utls == "1" and - node.xhttp_download_fingerprint and - node.xhttp_download_fingerprint ~= "") and node.xhttp_download_fingerprint or nil - } or nil, - realitySettings = (node.xhttp_download_stream_security == "reality") and { - serverName = node.xhttp_download_tls_serverName, - publicKey = node.xhttp_download_reality_publicKey, - shortId = node.xhttp_download_reality_shortId or "", - spiderX = node.xhttp_download_reality_spiderX or "/", - fingerprint = ( - node.xhttp_download_fingerprint and - node.xhttp_download_fingerprint ~= "") and node.xhttp_download_fingerprint or nil - } or nil, - } or nil + -- 如果包含 "extra" 节,取 "extra" 内的内容,否则直接赋值给 extra + extra = node.xhttp_extra and (function() + local success, parsed = pcall(jsonc.parse, node.xhttp_extra) + if success then + return parsed.extra or parsed + else + return nil + end + end)() or nil } or nil, } or nil, settings = { @@ -317,40 +293,6 @@ function gen_outbound(flag, node, tag, proxy_table) end end - local alpn_download = {} - if node.xhttp_download_alpn and node.xhttp_download_alpn ~= "default" then - string.gsub(node.xhttp_download_alpn, '[^' .. "," .. ']+', function(w) - table.insert(alpn_download, w) - end) - end - if alpn_download and #alpn_download > 0 then - if result.streamSettings.xhttpSettings.downloadSettings.tlsSettings then - result.streamSettings.xhttpSettings.downloadSettings.tlsSettings.alpn = alpn_download - end - end - - local xmux = {} - if (node.xhttp_xmux == "1") then - xmux.maxConcurrency = node.maxConcurrency and (string.find(node.maxConcurrency, "-") and node.maxConcurrency or tonumber(node.maxConcurrency)) or 0 - xmux.maxConnections = node.maxConnections and (string.find(node.maxConnections, "-") and node.maxConnections or tonumber(node.maxConnections)) or 0 - xmux.cMaxReuseTimes = node.cMaxReuseTimes and (string.find(node.cMaxReuseTimes, "-") and node.cMaxReuseTimes or tonumber(node.cMaxReuseTimes)) or 0 - xmux.cMaxLifetimeMs = node.cMaxLifetimeMs and (string.find(node.cMaxLifetimeMs, "-") and node.cMaxLifetimeMs or tonumber(node.cMaxLifetimeMs)) or 0 - if result.streamSettings.xhttpSettings then - result.streamSettings.xhttpSettings.xmux = xmux - end - end - - local xmux_download = {} - if (node.xhttp_download_xmux == "1") then - xmux_download.maxConcurrency = node.download_maxConcurrency and (string.find(node.download_maxConcurrency, "-") and node.download_maxConcurrency or tonumber(node.download_maxConcurrency)) or 0 - xmux_download.maxConnections = node.download_maxConnections and (string.find(node.download_maxConnections, "-") and node.download_maxConnections or tonumber(node.download_maxConnections)) or 0 - xmux_download.cMaxReuseTimes = node.download_cMaxReuseTimes and (string.find(node.download_cMaxReuseTimes, "-") and node.download_cMaxReuseTimes or tonumber(node.download_cMaxReuseTimes)) or 0 - xmux_download.cMaxLifetimeMs = node.download_cMaxLifetimeMs and (string.find(node.download_cMaxLifetimeMs, "-") and node.download_cMaxLifetimeMs or tonumber(node.download_cMaxLifetimeMs)) or 0 - if result.streamSettings.xhttpSettings.downloadSettings.xhttpSettings then - result.streamSettings.xhttpSettings.downloadSettings.xhttpSettings.xmux = xmux_download - end - end - end return result end diff --git a/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm index 2922632680..ae9fceeee8 100644 --- a/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm +++ b/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm @@ -367,6 +367,8 @@ local api = require "luci.passwall2.api" } else if (v_transport === "xhttp") { params += opt.query("host", dom_prefix + "xhttp_host"); params += opt.query("path", dom_prefix + "xhttp_path"); + params += opt.query("mode", dom_prefix + "xhttp_mode"); + params += opt.query("extra", dom_prefix + "xhttp_extra"); } params += "&type=" + v_transport; @@ -1154,6 +1156,8 @@ local api = require "luci.passwall2.api" } else if (queryParam.type === "xhttp" || queryParam.type === "splithttp") { opt.set(dom_prefix + 'xhttp_host', queryParam.host || ""); opt.set(dom_prefix + 'xhttp_path', queryParam.path || ""); + opt.set(dom_prefix + 'xhttp_mode', queryParam.mode || "auto"); + opt.set(dom_prefix + 'xhttp_extra', queryParam.extra || ""); } if (m.hash) { diff --git a/small/luci-app-passwall2/po/zh-cn/passwall2.po b/small/luci-app-passwall2/po/zh-cn/passwall2.po index f255d4dd0b..9f8004f1e1 100644 --- a/small/luci-app-passwall2/po/zh-cn/passwall2.po +++ b/small/luci-app-passwall2/po/zh-cn/passwall2.po @@ -1381,26 +1381,8 @@ msgstr "客户端文件不适合当前设备。" msgid "Can't move new file to path: %s" msgstr "无法移动新文件到:%s" -msgid "XHTTP download splitting" -msgstr "XHTTP 下行分离" - -msgid "Must be the same as upload path." -msgstr "必须与上行 path 相同。" - -msgid "Enable XHTTP XMUX. It's not recommended to enable Mux.Cool at the same time." -msgstr "启用 XHTTP XMUX。不建议与 Mux.Cool 同时启用。" - -msgid "XMUX Max Concurrency" -msgstr "XMUX 连接最大复用流数" - -msgid "XMUX Max Connections" -msgstr "XMUX 最大连接数" - -msgid "XMUX Connection Max Reuse Times" -msgstr "XMUX 连接最多复用次数" - -msgid "XMUX Connection Max Lifetime (ms)" -msgstr "XMUX 连接最大存活时间(ms)" +msgid "An XHTTP extra object in raw json" +msgstr "一个 json 格式的 XHTTP extra object" msgid "Enable Mux.Cool" msgstr "启用 Mux.Cool" @@ -1480,6 +1462,9 @@ msgstr "端口跳跃时间 " msgid "Additional ports for hysteria hop" msgstr "端口跳跃额外端口" +msgid "HeartbeatPeriod(second)" +msgstr "心跳周期(单位:秒)" + msgid "Remove resource files" msgstr "删除资源文件" diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.sh b/small/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.sh index 0e2f598ae8..470ab1e6ca 100755 --- a/small/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.sh +++ b/small/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.sh @@ -100,7 +100,7 @@ add() { } #始终用国内DNS解析节点域名 - servers=$(uci show "${CONFIG}" | grep ".address=" | cut -d "'" -f 2) + servers=$(uci show "${CONFIG}" | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2) hosts_foreach "servers" host_from_url | grep '[a-zA-Z]$' | sort -u | grep -v "engage.cloudflareclient.com" | gen_items settype="${set_type}" setnames="${setflag_4}passwall2_vpslist,${setflag_6}passwall2_vpslist6" dnss="${LOCAL_DNS:-${DEFAULT_DNS}}" outf="${TMP_DNSMASQ_PATH}/10-vpslist_host.conf" ipsetoutf="${TMP_DNSMASQ_PATH}/ipset.conf" echolog " - [$?]节点列表中的域名(vpslist):${DEFAULT_DNS:-默认}" diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/iptables.sh b/small/luci-app-passwall2/root/usr/share/passwall2/iptables.sh index 5a76b1127b..7fc8e023c7 100755 --- a/small/luci-app-passwall2/root/usr/share/passwall2/iptables.sh +++ b/small/luci-app-passwall2/root/usr/share/passwall2/iptables.sh @@ -458,6 +458,8 @@ filter_haproxy() { filter_vpsip() { uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R + uci show $CONFIG | grep ".download_address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R + uci show $CONFIG | grep ".download_address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R echolog "加入所有节点到ipset[$IPSET_VPSLIST]直连完成" } diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/nftables.sh b/small/luci-app-passwall2/root/usr/share/passwall2/nftables.sh index 78c45cbff8..d2ccda9a9f 100755 --- a/small/luci-app-passwall2/root/usr/share/passwall2/nftables.sh +++ b/small/luci-app-passwall2/root/usr/share/passwall2/nftables.sh @@ -517,6 +517,8 @@ filter_vps_addr() { filter_vpsip() { insert_nftset $NFTSET_VPSLIST "-1" $(uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d") insert_nftset $NFTSET_VPSLIST6 "-1" $(uci show $CONFIG | grep ".address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d") + insert_nftset $NFTSET_VPSLIST "-1" $(uci show $CONFIG | grep ".download_address=" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed -e "/^$/d") + insert_nftset $NFTSET_VPSLIST6 "-1" $(uci show $CONFIG | grep ".download_address=" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d") echolog "加入所有节点到nftset[$NFTSET_VPSLIST]直连完成" } @@ -686,6 +688,7 @@ add_firewall_rule() { filter_haproxy > /dev/null 2>&1 & # Prevent some conditions filter_vps_addr $(config_n_get $NODE address) > /dev/null 2>&1 & + filter_vps_addr $(config_n_get $NODE download_address) > /dev/null 2>&1 & accept_icmp=$(config_t_get global_forwarding accept_icmp 0) accept_icmpv6=$(config_t_get global_forwarding accept_icmpv6 0) diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index e1db556001..cfc8779d8c 100755 --- a/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -488,6 +488,16 @@ local function processData(szType, content, add_mode, add_from) if info.net == 'xhttp' or info.net == 'splithttp' then result.xhttp_host = info.host result.xhttp_path = info.path + result.xhttp_mode = params.mode or "auto" + result.xhttp_extra = params.extra + local success, Data = pcall(jsonParse, params.extra) + 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) + result.download_address = address and address ~= "" and address or nil + else + result.download_address = nil + end end if not info.security then result.security = "auto" end if info.tls == "tls" or info.tls == "1" then diff --git a/v2rayn/README.md b/v2rayn/README.md index 34bda29cf3..bb75367cfa 100644 --- a/v2rayn/README.md +++ b/v2rayn/README.md @@ -1,5 +1,5 @@ # v2rayN -A GUI client for Windows and Linux, support [Xray core](https://github.com/XTLS/Xray-core) and [others](https://github.com/2dust/v2rayN/wiki/List-of-supported-cores) +A GUI client for Windows and Linux, support [Xray core](https://github.com/XTLS/Xray-core) and [sing-box-core](https://github.com/SagerNet/sing-box/releases) and [others](https://github.com/2dust/v2rayN/wiki/List-of-supported-cores) [![GitHub commit activity](https://img.shields.io/github/commit-activity/m/2dust/v2rayN)](https://github.com/2dust/v2rayN/commits/master) diff --git a/v2rayn/v2rayN/ServiceLib/Enums/ECoreType.cs b/v2rayn/v2rayN/ServiceLib/Enums/ECoreType.cs index de29b55cc4..cd93e7b989 100644 --- a/v2rayn/v2rayN/ServiceLib/Enums/ECoreType.cs +++ b/v2rayn/v2rayN/ServiceLib/Enums/ECoreType.cs @@ -5,9 +5,7 @@ v2fly = 1, Xray = 2, v2fly_v5 = 4, - mihomo = 13, - hysteria = 21, naiveproxy = 22, tuic = 23, diff --git a/v2rayn/v2rayN/ServiceLib/Enums/EInboundProtocol.cs b/v2rayn/v2rayN/ServiceLib/Enums/EInboundProtocol.cs index c1ff81ea26..2d7c303410 100644 --- a/v2rayn/v2rayN/ServiceLib/Enums/EInboundProtocol.cs +++ b/v2rayn/v2rayN/ServiceLib/Enums/EInboundProtocol.cs @@ -3,12 +3,11 @@ public enum EInboundProtocol { socks = 0, - http, socks2, - http2, pac, api, api2, + mixed, speedtest = 21 } } \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Global.cs b/v2rayn/v2rayN/ServiceLib/Global.cs index c0518b4261..4edaa85595 100644 --- a/v2rayn/v2rayN/ServiceLib/Global.cs +++ b/v2rayn/v2rayN/ServiceLib/Global.cs @@ -182,14 +182,13 @@ public static readonly List Flows = new() { "", "xtls-rprx-vision", "xtls-rprx-vision-udp443" }; public static readonly List Networks = new() { "tcp", "kcp", "ws", "httpupgrade", "xhttp", "h2", "quic", "grpc" }; public static readonly List KcpHeaderTypes = new() { "srtp", "utp", "wechat-video", "dtls", "wireguard" }; - public static readonly List CoreTypes = new() { "v2fly", "Xray", "sing_box" }; - public static readonly List CoreTypes4VLESS = new() { "Xray", "sing_box" }; + public static readonly List CoreTypes = new() { "Xray", "sing_box" }; public static readonly List DomainStrategies = new() { "AsIs", "IPIfNonMatch", "IPOnDemand" }; public static readonly List DomainStrategies4Singbox = new() { "ipv4_only", "ipv6_only", "prefer_ipv4", "prefer_ipv6", "" }; public static readonly List DomainMatchers = new() { "linear", "mph", "" }; public static readonly List Fingerprints = new() { "chrome", "firefox", "safari", "ios", "android", "edge", "360", "qq", "random", "randomized", "" }; public static readonly List UserAgent = new() { "chrome", "firefox", "safari", "edge", "none" }; - public static readonly List XhttpMode = new() { "auto", "packet-up", "stream-up" }; + public static readonly List XhttpMode = new() { "auto", "packet-up", "stream-up", "stream-one" }; public static readonly List AllowInsecure = new() { "true", "false", "" }; public static readonly List DomainStrategy4Freedoms = new() { "AsIs", "UseIP", "UseIPv4", "UseIPv6", "" }; @@ -199,7 +198,7 @@ public static readonly List Languages = new() { "zh-Hans", "zh-Hant", "en", "fa-Ir", "ru" }; public static readonly List Alpns = new() { "h3", "h2", "http/1.1", "h3,h2", "h2,http/1.1", "h3,h2,http/1.1", "" }; public static readonly List LogLevels = new() { "debug", "info", "warning", "error", "none" }; - public static readonly List InboundTags = new() { "socks", "http", "socks2", "http2" }; + public static readonly List InboundTags = new() { "socks", "socks2" }; public static readonly List RuleProtocols = new() { "http", "tls", "bittorrent" }; public static readonly List RuleNetworks = new() { "", "tcp", "udp", "tcp,udp" }; public static readonly List destOverrideProtocols = ["http", "tls", "quic", "fakedns", "fakedns+others"]; diff --git a/v2rayn/v2rayN/ServiceLib/Handler/AppHandler.cs b/v2rayn/v2rayN/ServiceLib/Handler/AppHandler.cs index 447c31f92c..ddc72d06dc 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/AppHandler.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/AppHandler.cs @@ -264,16 +264,8 @@ return (ECoreType)profileItem.CoreType; } - if (_config.CoreTypeItem == null) - { - return ECoreType.Xray; - } - var item = _config.CoreTypeItem.FirstOrDefault(it => it.ConfigType == eConfigType); - if (item == null) - { - return ECoreType.Xray; - } - return item.CoreType; + var item = _config.CoreTypeItem?.FirstOrDefault(it => it.ConfigType == eConfigType); + return item?.CoreType ?? ECoreType.Xray; } #endregion Core Type diff --git a/v2rayn/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs b/v2rayn/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs index 8f1a044686..0230b0a44c 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs @@ -13,8 +13,7 @@ try { - var port = AppHandler.Instance.GetLocalPort(EInboundProtocol.http); - var portSocks = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks); + var port = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks); if (port <= 0) { return false; @@ -23,7 +22,7 @@ { case ESysProxyType.ForcedChange when Utils.IsWindows(): { - GetWindowsProxyString(config, port, portSocks, out var strProxy, out var strExceptions); + GetWindowsProxyString(config, port, out var strProxy, out var strExceptions); ProxySettingWindows.SetProxy(strProxy, strExceptions, 2); break; } @@ -64,7 +63,7 @@ return true; } - private static void GetWindowsProxyString(Config config, int port, int portSocks, out string strProxy, out string strExceptions) + private static void GetWindowsProxyString(Config config, int port, out string strProxy, out string strExceptions) { strExceptions = $"{config.ConstItem.DefIEProxyExceptions};{config.SystemProxyItem.SystemProxyExceptions}"; if (config.SystemProxyItem.NotProxyLocalAddress) @@ -82,7 +81,7 @@ strProxy = config.SystemProxyItem.SystemProxyAdvancedProtocol .Replace("{ip}", Global.Loopback) .Replace("{http_port}", port.ToString()) - .Replace("{socks_port}", portSocks.ToString()); + .Replace("{socks_port}", port.ToString()); } } diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs index 87415bd1d7..49a08c2ad0 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs @@ -3311,7 +3311,7 @@ namespace ServiceLib.Resx { } /// - /// 查找类似 SOCKS Port 的本地化字符串。 + /// 查找类似 Mixed Port 的本地化字符串。 /// public static string TbSettingsSocksPort { get { @@ -3320,7 +3320,7 @@ namespace ServiceLib.Resx { } /// - /// 查找类似 http port = +1; Pac port = +4; *ray API port = +5; mihomo API port = +6; 的本地化字符串。 + /// 查找类似 Pac port = +2; Xray API port = +3; mihomo API port = +4; 的本地化字符串。 /// public static string TbSettingsSocksPortTip { get { diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx index 830cefe5fb..37d4d93c23 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx @@ -752,7 +752,7 @@ Turn on Sniffing - ساکس Port + Mixed Port درهنگام راه ائدازی شروع شود @@ -1244,7 +1244,7 @@ Copy the font TTF/TTC file to the directory guiFonts, restart the settings - http port = +1; Pac port = +4; *ray API port = +5; mihomo API port = +6; + Pac port = +2; Xray API port = +3; mihomo API port = +4; Set this with admin privileges, get admin privileges after startup diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx index 3f006a0bdc..0b24b483a0 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx @@ -755,7 +755,7 @@ Turn on Sniffing - SOCKS Port + Mixed Port Start on boot @@ -992,7 +992,7 @@ Copy the font TTF/TTC file to the directory guiFonts, restart the settings - http port = +1; Pac port = +4; *ray API port = +5; mihomo API port = +6; + Pac port = +2; Xray API port = +3; mihomo API port = +4; Set this with admin privileges, get admin privileges after startup diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx index 493fb70205..9134409b67 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx @@ -761,7 +761,7 @@ Включить сниффинг - Порт Socks + Mixed Port Автозапуск @@ -1310,7 +1310,7 @@ Move up and down - http port = +1; Pac port = +4; *ray API port = +5; mihomo API port = +6; + Pac port = +2; Xray API port = +3; mihomo API port = +4; Install the font to the system and restart the settings diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx index d5fd572eb8..c1f3426cd7 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx @@ -755,7 +755,7 @@ 开启流量探测 - 本地socks监听端口 + 本地混合监听端口 开机启动(可能会不成功) @@ -992,7 +992,7 @@ 拷贝字体TTF/TTC文件到目录guiFonts,重启设置 - http端口= +1;Pac端口= +4;*ray API端口= +5;mihomo API端口= +6; + Pac端口= +2;Xray API端口= +3;mihomo API端口= +4; 以管理员权限设置此项,在启动后获得管理员权限 diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx index 87e5be510c..30b605c6b9 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx @@ -755,7 +755,7 @@ 開啟流量探測 - 本機SOCKS偵聽埠 + 本機混合偵聽埠 開機啟動(可能會不成功) @@ -992,7 +992,7 @@ 複製字型TTF/TTC檔案到目錄guiFonts,重啟設定 - http連接埠= +1;Pac連接埠= +4;*ray API連接埠= +5;mihomo API連接埠= +6; + Pac連接埠= +2;Xray API連接埠= +3;mihomo API連接埠= +4; 以管理員權限設定此項,在啟動後獲得管理員權限 diff --git a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigClashService.cs b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigClashService.cs index ca820d91cb..e48f3a5f44 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigClashService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigClashService.cs @@ -78,10 +78,8 @@ namespace ServiceLib.Services.CoreConfig return ret; } - //port - fileContent["port"] = AppHandler.Instance.GetLocalPort(EInboundProtocol.http); - //socks-port - fileContent["socks-port"] = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks); + //mixed-port + fileContent["mixed-port"] = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks); //log-level fileContent["log-level"] = GetLogLevel(_config.CoreBasicItem.Loglevel); diff --git a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs index 4ee4ff714c..4170db6ce2 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigSingboxService.cs @@ -174,7 +174,7 @@ namespace ServiceLib.Services.CoreConfig { listen = Global.Loopback, listen_port = port, - type = EInboundProtocol.http.ToString(), + type = EInboundProtocol.mixed.ToString(), }; inbound.tag = inbound.type + inbound.listen_port.ToString(); singboxConfig.inbounds.Add(inbound); @@ -488,7 +488,7 @@ namespace ServiceLib.Services.CoreConfig { var inbound = new Inbound4Sbox() { - type = EInboundProtocol.socks.ToString(), + type = EInboundProtocol.mixed.ToString(), tag = EInboundProtocol.socks.ToString(), listen = Global.Loopback, }; @@ -505,10 +505,6 @@ namespace ServiceLib.Services.CoreConfig inbound.domain_strategy = routing.DomainStrategy4Singbox; } - //http - var inbound2 = GetInbound(inbound, EInboundProtocol.http, false); - singboxConfig.inbounds.Add(inbound2); - if (_config.Inbound.First().AllowLANConn) { if (_config.Inbound.First().NewPort4LAN) @@ -517,21 +513,15 @@ namespace ServiceLib.Services.CoreConfig inbound3.listen = listen; singboxConfig.inbounds.Add(inbound3); - var inbound4 = GetInbound(inbound, EInboundProtocol.http2, false); - inbound4.listen = listen; - singboxConfig.inbounds.Add(inbound4); - //auth if (Utils.IsNotEmpty(_config.Inbound.First().User) && Utils.IsNotEmpty(_config.Inbound.First().Pass)) { inbound3.users = new() { new() { username = _config.Inbound.First().User, password = _config.Inbound.First().Pass } }; - inbound4.users = new() { new() { username = _config.Inbound.First().User, password = _config.Inbound.First().Pass } }; } } else { inbound.listen = listen; - inbound2.listen = listen; } } } @@ -574,7 +564,7 @@ namespace ServiceLib.Services.CoreConfig var inbound = JsonUtils.DeepCopy(inItem); inbound.tag = protocol.ToString(); inbound.listen_port = inItem.listen_port + (int)protocol; - inbound.type = bSocks ? EInboundProtocol.socks.ToString() : EInboundProtocol.http.ToString(); + inbound.type = EInboundProtocol.mixed.ToString(); return inbound; } diff --git a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs index ca7e53b65f..c55a593021 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs @@ -322,7 +322,7 @@ namespace ServiceLib.Services.CoreConfig { listen = Global.Loopback, port = port, - protocol = EInboundProtocol.http.ToString(), + protocol = EInboundProtocol.socks.ToString(), }; inbound.tag = inbound.protocol + inbound.port.ToString(); v2rayConfig.inbounds.Add(inbound); @@ -391,13 +391,9 @@ namespace ServiceLib.Services.CoreConfig var listen = "0.0.0.0"; v2rayConfig.inbounds = []; - Inbounds4Ray? inbound = GetInbound(_config.Inbound.First(), EInboundProtocol.socks, true); + var inbound = GetInbound(_config.Inbound.First(), EInboundProtocol.socks, true); v2rayConfig.inbounds.Add(inbound); - //http - Inbounds4Ray? inbound2 = GetInbound(_config.Inbound.First(), EInboundProtocol.http, false); - v2rayConfig.inbounds.Add(inbound2); - if (_config.Inbound.First().AllowLANConn) { if (_config.Inbound.First().NewPort4LAN) @@ -406,24 +402,16 @@ namespace ServiceLib.Services.CoreConfig inbound3.listen = listen; v2rayConfig.inbounds.Add(inbound3); - var inbound4 = GetInbound(_config.Inbound.First(), EInboundProtocol.http2, false); - inbound4.listen = listen; - v2rayConfig.inbounds.Add(inbound4); - //auth if (Utils.IsNotEmpty(_config.Inbound.First().User) && Utils.IsNotEmpty(_config.Inbound.First().Pass)) { inbound3.settings.auth = "password"; inbound3.settings.accounts = new List { new AccountsItem4Ray() { user = _config.Inbound.First().User, pass = _config.Inbound.First().Pass } }; - - inbound4.settings.auth = "password"; - inbound4.settings.accounts = new List { new AccountsItem4Ray() { user = _config.Inbound.First().User, pass = _config.Inbound.First().Pass } }; } } else { inbound.listen = listen; - inbound2.listen = listen; } } } @@ -449,7 +437,7 @@ namespace ServiceLib.Services.CoreConfig } inbound.tag = protocol.ToString(); inbound.port = inItem.LocalPort + (int)protocol; - inbound.protocol = bSocks ? EInboundProtocol.socks.ToString() : EInboundProtocol.http.ToString(); + inbound.protocol = EInboundProtocol.socks.ToString(); inbound.settings.udp = inItem.UdpEnabled; inbound.sniffing.enabled = inItem.SniffingEnabled; inbound.sniffing.destOverride = inItem.DestOverride; diff --git a/v2rayn/v2rayN/ServiceLib/Services/DownloadService.cs b/v2rayn/v2rayN/ServiceLib/Services/DownloadService.cs index d27732b546..2a076c410b 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/DownloadService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/DownloadService.cs @@ -280,7 +280,7 @@ namespace ServiceLib.Services { return null; } - var httpPort = AppHandler.Instance.GetLocalPort(EInboundProtocol.http); + var httpPort = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks); if (await SocketCheck(Global.Loopback, httpPort) == false) { return null; diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs index 656f74c083..e999576f3a 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs @@ -451,9 +451,7 @@ namespace ServiceLib.ViewModels public async Task InboundDisplayStatus() { StringBuilder sb = new(); - sb.Append($"[{EInboundProtocol.socks}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.socks)}]"); - sb.Append(" | "); - sb.Append($"[{EInboundProtocol.http}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.http)}]"); + sb.Append($"[{EInboundProtocol.mixed}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.socks)}]"); InboundDisplay = $"{ResUI.LabLocal}:{sb}"; if (_config.Inbound.First().AllowLANConn) @@ -461,9 +459,7 @@ namespace ServiceLib.ViewModels if (_config.Inbound.First().NewPort4LAN) { StringBuilder sb2 = new(); - sb2.Append($"[{EInboundProtocol.socks}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.socks2)}]"); - sb2.Append(" | "); - sb2.Append($"[{EInboundProtocol.http}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.http2)}]"); + sb2.Append($"[{EInboundProtocol.mixed}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.socks2)}]"); InboundLanDisplay = $"{ResUI.LabLAN}:{sb2}"; } else diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServerWindow.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServerWindow.axaml.cs index e9f00be95a..008d6e6b77 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServerWindow.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddServerWindow.axaml.cs @@ -26,20 +26,10 @@ namespace v2rayN.Desktop.Views ViewModel = new AddServerViewModel(profileItem, UpdateViewHandler); - if (profileItem.ConfigType == EConfigType.VLESS) + Global.CoreTypes.ForEach(it => { - Global.CoreTypes4VLESS.ForEach(it => - { - cmbCoreType.Items.Add(it); - }); - } - else - { - Global.CoreTypes.ForEach(it => - { - cmbCoreType.Items.Add(it); - }); - } + cmbCoreType.Items.Add(it); + }); cmbCoreType.Items.Add(string.Empty); cmbStreamSecurity.Items.Add(string.Empty); diff --git a/v2rayn/v2rayN/v2rayN/Views/AddServerWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/AddServerWindow.xaml.cs index 80b268969e..11c684248a 100644 --- a/v2rayn/v2rayN/v2rayN/Views/AddServerWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/AddServerWindow.xaml.cs @@ -20,20 +20,10 @@ namespace v2rayN.Views ViewModel = new AddServerViewModel(profileItem, UpdateViewHandler); - if (profileItem.ConfigType == EConfigType.VLESS) + Global.CoreTypes.ForEach(it => { - Global.CoreTypes4VLESS.ForEach(it => - { - cmbCoreType.Items.Add(it); - }); - } - else - { - Global.CoreTypes.ForEach(it => - { - cmbCoreType.Items.Add(it); - }); - } + cmbCoreType.Items.Add(it); + }); cmbCoreType.Items.Add(string.Empty); cmbStreamSecurity.Items.Add(string.Empty); diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt index 37fa450bd9..5b262fd19b 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt @@ -48,7 +48,6 @@ object AppConfig { const val PREF_PROXY_SHARING = "pref_proxy_sharing_enabled" const val PREF_ALLOW_INSECURE = "pref_allow_insecure" const val PREF_SOCKS_PORT = "pref_socks_port" - const val PREF_HTTP_PORT = "pref_http_port" const val PREF_REMOTE_DNS = "pref_remote_dns" const val PREF_DOMESTIC_DNS = "pref_domestic_dns" const val PREF_DELAY_TEST_URL = "pref_delay_test_url" @@ -112,7 +111,6 @@ object AppConfig { /** Ports and addresses for various services. */ const val PORT_LOCAL_DNS = "10853" const val PORT_SOCKS = "10808" - const val PORT_HTTP = "10809" const val WIREGUARD_LOCAL_ADDRESS_V4 = "172.16.0.2/32" const val WIREGUARD_LOCAL_ADDRESS_V6 = "2606:4700:110:8f81:d551:a0:532e:a2b3/128" const val WIREGUARD_LOCAL_MTU = "1420" diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt index c5ae2278ac..15cde2c914 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt @@ -155,7 +155,7 @@ object SettingsManager { } fun getHttpPort(): Int { - return parseInt(MmkvManager.decodeSettingsString(AppConfig.PREF_HTTP_PORT), AppConfig.PORT_HTTP.toInt()) + return getSocksPort() + (if (Utils.isXray()) 0 else 1) } fun initAssets(context: Context, assets: AssetManager) { diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt index 1a404d7c93..6b14d0e408 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt @@ -120,7 +120,6 @@ object V2rayConfigManager { private fun inbounds(v2rayConfig: V2rayConfig): Boolean { try { val socksPort = SettingsManager.getSocksPort() - val httpPort = SettingsManager.getHttpPort() v2rayConfig.inbounds.forEach { curInbound -> if (MmkvManager.decodeSettingsBool(AppConfig.PREF_PROXY_SHARING) != true) { @@ -142,14 +141,13 @@ object V2rayConfigManager { v2rayConfig.inbounds[0].sniffing?.destOverride?.add("fakedns") } - v2rayConfig.inbounds[1].port = httpPort + if (Utils.isXray()) { + v2rayConfig.inbounds.removeAt(1) + } else { + val httpPort = SettingsManager.getHttpPort() + v2rayConfig.inbounds[1].port = httpPort + } -// if (httpPort > 0) { -// val httpCopy = v2rayConfig.inbounds[0].copy() -// httpCopy.port = httpPort -// httpCopy.protocol = "http" -// v2rayConfig.inbounds.add(httpCopy) -// } } catch (e: Exception) { e.printStackTrace() return false @@ -337,8 +335,8 @@ object V2rayConfigManager { if (proxyDomain.size > 0) { servers.add( V2rayConfig.DnsBean.ServersBean( - address = remoteDns.first(), - domains = proxyDomain, + address = remoteDns.first(), + domains = proxyDomain, ) ) } diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt index 6a92300b8b..ae6e2c223e 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt @@ -58,7 +58,6 @@ class SettingsActivity : BaseActivity() { private val autoUpdateInterval by lazy { findPreference(AppConfig.SUBSCRIPTION_AUTO_UPDATE_INTERVAL) } private val socksPort by lazy { findPreference(AppConfig.PREF_SOCKS_PORT) } - private val httpPort by lazy { findPreference(AppConfig.PREF_HTTP_PORT) } private val remoteDns by lazy { findPreference(AppConfig.PREF_REMOTE_DNS) } private val domesticDns by lazy { findPreference(AppConfig.PREF_DOMESTIC_DNS) } private val delayTestUrl by lazy { findPreference(AppConfig.PREF_DELAY_TEST_URL) } @@ -142,11 +141,7 @@ class SettingsActivity : BaseActivity() { socksPort?.summary = if (TextUtils.isEmpty(nval)) AppConfig.PORT_SOCKS else nval true } - httpPort?.setOnPreferenceChangeListener { _, any -> - val nval = any as String - httpPort?.summary = if (TextUtils.isEmpty(nval)) AppConfig.PORT_HTTP else nval - true - } + remoteDns?.setOnPreferenceChangeListener { _, any -> val nval = any as String remoteDns?.summary = if (nval == "") AppConfig.DNS_PROXY else nval @@ -197,7 +192,6 @@ class SettingsActivity : BaseActivity() { autoUpdateInterval?.isEnabled = MmkvManager.decodeSettingsBool(AppConfig.SUBSCRIPTION_AUTO_UPDATE, false) socksPort?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_SOCKS_PORT, AppConfig.PORT_SOCKS) - httpPort?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_HTTP_PORT, AppConfig.PORT_HTTP) remoteDns?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_REMOTE_DNS, AppConfig.DNS_PROXY) domesticDns?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DOMESTIC_DNS, AppConfig.DNS_DIRECT) delayTestUrl?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL, AppConfig.DelayTestUrl) @@ -215,7 +209,6 @@ class SettingsActivity : BaseActivity() { fragmentInterval, autoUpdateInterval, socksPort, - httpPort, remoteDns, domesticDns, delayTestUrl diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt index 69bdffd933..c1492868ce 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/util/Utils.kt @@ -498,5 +498,7 @@ object Utils { ContextCompat.RECEIVER_NOT_EXPORTED } + fun isXray(): Boolean = (ANG_PACKAGE == "com.v2ray.ang") + } diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt index 5f984b0cc2..8dc50d58a8 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt @@ -34,7 +34,6 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application AppConfig.PREF_DELAY_TEST_URL, AppConfig.PREF_LOCAL_DNS_PORT, AppConfig.PREF_SOCKS_PORT, - AppConfig.PREF_HTTP_PORT, AppConfig.PREF_LOGLEVEL, AppConfig.PREF_LANGUAGE, AppConfig.PREF_UI_MODE_NIGHT, diff --git a/v2rayng/V2rayNG/app/src/main/res/values-ar/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-ar/strings.xml index 04bfad8a1b..a200418ff3 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-ar/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-ar/strings.xml @@ -192,9 +192,6 @@ منفذ بروكسي SOCKS5 منفذ بروكسي SOCKS5 - منفذ بروكسي HTTP - منفذ بروكسي HTTP - منفذ DNS المحلي منفذ DNS المحلي diff --git a/v2rayng/V2rayNG/app/src/main/res/values-bn/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-bn/strings.xml index 9493008ec1..fd7a0c89a9 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-bn/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-bn/strings.xml @@ -192,9 +192,6 @@ SOCKS5 প্রক্সি পোর্ট SOCKS5 প্রক্সি পোর্ট - HTTP প্রক্সি পোর্ট - HTTP প্রক্সি পোর্ট - স্থানীয় DNS পোর্ট স্থানীয় DNS পোর্ট diff --git a/v2rayng/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml index cd3167c9e4..b8b81da052 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml @@ -192,9 +192,6 @@ پورت پروکسی SOCKS5 پورت پروکسی SOCKS5 - پورت پروکسی HTTP - پورت پروکسی HTTP - پورت DNS مهلی پورت DNS مهلی diff --git a/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml index 4673660d30..764485d975 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -191,9 +191,6 @@ پورت پروکسی SOCKS5 پورت پروکسی SOCKS5 - پورت پروکسی HTTP - پورت پروکسی HTTP - پورت DNS محلی پورت DNS محلی diff --git a/v2rayng/V2rayNG/app/src/main/res/values-ru/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-ru/strings.xml index 443821170c..6a7e576f9e 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -192,9 +192,6 @@ Порт SOCKS5-прокси Порт SOCKS5-прокси - Порт HTTP-прокси - Порт HTTP-прокси - Локальный порт DNS Локальный порт DNS diff --git a/v2rayng/V2rayNG/app/src/main/res/values-vi/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-vi/strings.xml index be7697df72..a251498263 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -191,9 +191,6 @@ Cổng Proxy SOCKS5 Cổng Proxy SOCKS5 - Cổng Proxy HTTP - Cổng Proxy HTTP - Cổng Local DNS Cổng Local DNS diff --git a/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index 45d4edf590..ac92e14f5a 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -188,9 +188,6 @@ SOCKS5代理端口 SOCKS5代理端口 - HTTP代理端口 - HTTP代理端口 - 本地DNS端口 本地DNS端口 diff --git a/v2rayng/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml index 12eb38b817..265d5d9010 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -190,9 +190,6 @@ SOCKS5 Proxy 埠 SOCKS5 Proxy 埠 - HTTP Proxy 埠 - HTTP Proxy 埠 - 本機 DNS 埠 本機 DNS 埠 diff --git a/v2rayng/V2rayNG/app/src/main/res/values/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values/strings.xml index 46c76af313..862b1e084c 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values/strings.xml @@ -195,9 +195,6 @@ SOCKS5 proxy port SOCKS5 proxy port - HTTP proxy port - HTTP proxy port - Local DNS port Local DNS port diff --git a/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml b/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml index 773a7fe47e..7821c1125f 100644 --- a/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml @@ -180,12 +180,6 @@ android:summary="10808" android:title="@string/title_pref_socks_port" /> - - int { - auto it = std::find(std::begin(method_ids), std::end(method_ids), method); - if (it == std::end(method_ids)) { - return 0; + const auto method = absl::GetFlag(FLAGS_method).method; + unsigned int i; + for (unsigned int i = 0; i < std::size(kCipherMethods); ++i) { + if (kCipherMethods[i] == method) { + return i; } - return it - std::begin(method_ids); - }(absl::GetFlag(FLAGS_method).method); - return method_idx; + } + // not found + return 0; } JNIEXPORT jobjectArray JNICALL Java_it_gui_yass_YassUtils_getCipherStrings(JNIEnv* env, jobject obj) { - static constexpr const char* const method_names[] = { -#define XX(num, name, string) string, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; jobjectArray jarray = - env->NewObjectArray(std::size(method_names), env->FindClass("java/lang/String"), env->NewStringUTF("")); - for (unsigned int i = 0; i < std::size(method_names); ++i) { - env->SetObjectArrayElement(jarray, i, env->NewStringUTF(method_names[i])); + env->NewObjectArray(std::size(kCipherMethodCStrs), env->FindClass("java/lang/String"), env->NewStringUTF("")); + for (unsigned int i = 0; i < std::size(kCipherMethodCStrs); ++i) { + env->SetObjectArrayElement(jarray, i, env->NewStringUTF(kCipherMethodCStrs[i])); } return jarray; } @@ -139,13 +130,9 @@ JNIEXPORT jobject JNICALL Java_it_gui_yass_YassUtils_saveConfig(JNIEnv* env, std::string password = password_str != nullptr ? password_str : std::string(); env->ReleaseStringUTFChars((jstring)_password, password_str); - static std::vector methods_idxes = { -#define XX(num, name, string) CRYPTO_##name, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; - DCHECK_LT((uint32_t)_method_idx, methods_idxes.size()); - auto method = methods_idxes[_method_idx]; + DCHECK_GE(_method_idx, 0); + DCHECK_LT(static_cast(_method_idx), std::size(kCipherMethods)); + auto method = kCipherMethods[_method_idx]; constexpr std::string_view local_host = "0.0.0.0"; constexpr std::string_view local_port = "0"; diff --git a/yass/src/config/config_core.cpp b/yass/src/config/config_core.cpp index 39f3048708..a17a51bcda 100644 --- a/yass/src/config/config_core.cpp +++ b/yass/src/config/config_core.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -142,9 +143,10 @@ ABSL_FLAG(std::string, local_host, "127.0.0.1", "Local proxy server on given hos ABSL_FLAG(PortFlag, local_port, PortFlag(1080), "Local proxy server on given port (Client Only)"); ABSL_FLAG(std::string, username, "username", "Server user"); ABSL_FLAG(std::string, password, "password", "Server password"); -static const std::string kCipherMethodHelpMessage = - absl::StrCat("Specify encrypt of method to use, one of ", kCipherMethodsStr); -ABSL_FLAG(CipherMethodFlag, method, CipherMethodFlag(CRYPTO_DEFAULT), kCipherMethodHelpMessage); +ABSL_FLAG(CipherMethodFlag, + method, + CipherMethodFlag(CRYPTO_DEFAULT), + absl::StrCat("Specify encrypt of method to use, one of ", absl::StrJoin(kCipherMethodStrs, ", "))); ABSL_FLAG(uint32_t, parallel_max, 65535, "Maximum concurrency for parallel connections"); ABSL_FLAG(RateFlag, limit_rate, RateFlag(0), "Limit transfer speed to RATE"); diff --git a/yass/src/crypto/crypter_export.cpp b/yass/src/crypto/crypter_export.cpp index e87f4036c4..1e6bd585e9 100644 --- a/yass/src/crypto/crypter_export.cpp +++ b/yass/src/crypto/crypter_export.cpp @@ -52,9 +52,3 @@ bool is_valid_cipher_method(enum cipher_method method) { return false; } } - -#define XX(num, name, string) string ", " -static constexpr const char kCipherMethodsStrImpl[] = CIPHER_METHOD_VALID_MAP(XX) -#undef XX - ; -constexpr const std::string_view kCipherMethodsStr(kCipherMethodsStrImpl, std::size(kCipherMethodsStrImpl) - 3); diff --git a/yass/src/crypto/crypter_export.hpp b/yass/src/crypto/crypter_export.hpp index f2fd18c548..a3c374237a 100644 --- a/yass/src/crypto/crypter_export.hpp +++ b/yass/src/crypto/crypter_export.hpp @@ -134,10 +134,24 @@ CIPHER_METHOD_MAP(XX) CIPHER_METHOD_MAP(XX) #undef XX -extern const std::string_view kCipherMethodsStr; - #define XX(num, name, string) constexpr const char CRYPTO_##name##_CSTR[] = string; CIPHER_METHOD_MAP(XX) #undef XX +#define XX(num, name, string) static_cast(num), +constexpr const enum cipher_method kCipherMethods[] = {CIPHER_METHOD_VALID_MAP(XX)}; +#undef XX + +#define XX(num, name, string) string, +constexpr const std::string_view kCipherMethodStrs[] = {CIPHER_METHOD_VALID_MAP(XX)}; +#undef XX + +#define XX(num, name, string) string, +constexpr const char* kCipherMethodCStrs[] = {CIPHER_METHOD_VALID_MAP(XX)}; +#undef XX + +#define XX(num, name, string) L##string, +constexpr const wchar_t* kCipherMethodLCStrs[] = {CIPHER_METHOD_VALID_MAP(XX)}; +#undef XX + #endif // H_CRYPTO_CRYPTER_EXPORT diff --git a/yass/src/gtk/yass_window.cpp b/yass/src/gtk/yass_window.cpp index 9d56548078..ff033f0dd4 100644 --- a/yass/src/gtk/yass_window.cpp +++ b/yass/src/gtk/yass_window.cpp @@ -198,15 +198,9 @@ YASSWindow::YASSWindow() : impl_(GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)) server_port_ = GTK_ENTRY(gtk_entry_new()); username_ = GTK_ENTRY(gtk_entry_new()); password_ = GTK_ENTRY(gtk_entry_new()); - static constexpr const char* const method_names[] = { -#define XX(num, name, string) string, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; - method_ = GTK_COMBO_BOX_TEXT(gtk_combo_box_text_new()); - for (const char* method_name : method_names) { + for (const char* method_name : kCipherMethodCStrs) { gtk_combo_box_text_append_text(method_, method_name); } local_host_ = GTK_ENTRY(gtk_entry_new()); @@ -623,16 +617,15 @@ void YASSWindow::LoadChanges() { gtk_entry_set_text(username_, username_str.c_str()); gtk_entry_set_text(password_, password_str.c_str()); - static const uint32_t method_ids[] = { -#define XX(num, name, string) num, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; unsigned int i; - for (i = 0; i < std::size(method_ids); ++i) { - if (cipher_method == method_ids[i]) + for (i = 0; i < std::size(kCipherMethods); ++i) { + if (cipher_method == kCipherMethods[i]) break; } + // not found + if (i == std::size(kCipherMethods)) { + i = 0; + } gtk_combo_box_set_active(GTK_COMBO_BOX(method_), i); diff --git a/yass/src/gtk4/yass_window.cpp b/yass/src/gtk4/yass_window.cpp index d6391241a3..3d5b85c3cd 100644 --- a/yass/src/gtk4/yass_window.cpp +++ b/yass/src/gtk4/yass_window.cpp @@ -170,15 +170,9 @@ YASSWindow::YASSWindow(GApplication* app) : app_(app), impl_(yass_window_new(YAS g_signal_connect(G_OBJECT(impl_->systemproxy), "toggled", G_CALLBACK(*systemproxy_callback), this); - static constexpr const char* const method_names[] = { -#define XX(num, name, string) string, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; - G_GNUC_BEGIN_IGNORE_DEPRECATIONS GtkComboBoxText* method = GTK_COMBO_BOX_TEXT(impl_->method); - for (const char* method_name : method_names) { + for (const char* method_name : kCipherMethodCStrs) { gtk_combo_box_text_append_text(method, method_name); } G_GNUC_END_IGNORE_DEPRECATIONS @@ -490,16 +484,15 @@ void YASSWindow::LoadChanges() { gtk_editable_set_text(GTK_EDITABLE(impl_->username), username_str.c_str()); gtk_editable_set_text(GTK_EDITABLE(impl_->password), password_str.c_str()); - static constexpr const uint32_t method_ids[] = { -#define XX(num, name, string) num, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; unsigned int i; - for (i = 0; i < std::size(method_ids); ++i) { - if (cipher_method == method_ids[i]) + for (i = 0; i < std::size(kCipherMethods); ++i) { + if (cipher_method == kCipherMethods[i]) break; } + // not found + if (i == std::size(kCipherMethods)) { + i = 0; + } G_GNUC_BEGIN_IGNORE_DEPRECATIONS gtk_combo_box_set_active(GTK_COMBO_BOX(impl_->method), i); diff --git a/yass/src/harmony/yass.cpp b/yass/src/harmony/yass.cpp index 8df2b9fbc6..c04f11a30c 100644 --- a/yass/src/harmony/yass.cpp +++ b/yass/src/harmony/yass.cpp @@ -975,22 +975,18 @@ static napi_value getCipher(napi_env env, napi_callback_info info) { } static napi_value getCipherStrings(napi_env env, napi_callback_info info) { - static constexpr const char* const method_names[] = { -#define XX(num, name, string) string, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; - napi_value results; - auto status = napi_create_array_with_length(env, std::size(method_names), &results); + constexpr const unsigned int cipher_count = std::size(kCipherMethodStrs); + auto status = napi_create_array_with_length(env, cipher_count, &results); if (status != napi_ok) { napi_throw_error(env, nullptr, "napi_create_array_with_length failed"); return nullptr; } - for (size_t i = 0; i < std::size(method_names); ++i) { + for (unsigned int i = 0; i < cipher_count; ++i) { napi_value value; - auto status = napi_create_string_utf8(env, method_names[i], NAPI_AUTO_LENGTH, &value); + std::string_view str = kCipherMethodStrs[i]; + auto status = napi_create_string_utf8(env, str.data(), str.size(), &value); if (status != napi_ok) { napi_throw_error(env, nullptr, "napi_create_string_utf8 failed"); return nullptr; diff --git a/yass/src/net/io_queue_test.cpp b/yass/src/net/io_queue_test.cpp index 420e5c887f..8a77dd390d 100644 --- a/yass/src/net/io_queue_test.cpp +++ b/yass/src/net/io_queue_test.cpp @@ -14,7 +14,7 @@ using namespace net; static constexpr unsigned int kDefaultDepth = 8u; static constexpr unsigned int kBufferSize = 4096u; -static constexpr const char kBuffer[kBufferSize] = {}; +static constexpr const char kBuffer[kBufferSize * 10] = {}; TEST(IoQueueTest, Construct) { IoQueue queue; diff --git a/yass/src/qt6/yass_window.cpp b/yass/src/qt6/yass_window.cpp index 1c896b284c..627a0cf48e 100644 --- a/yass/src/qt6/yass_window.cpp +++ b/yass/src/qt6/yass_window.cpp @@ -122,14 +122,8 @@ YASSWindow::YASSWindow(QWidget* parent) : QMainWindow(parent) { password_ = new QLineEdit; password_->setEchoMode(QLineEdit::Password); - static constexpr const char* const method_names[] = { -#define XX(num, name, string) string, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; - method_ = new QComboBox; - for (const char* method_name : method_names) { + for (const char* method_name : kCipherMethodCStrs) { method_->addItem(method_name); } @@ -384,16 +378,15 @@ void YASSWindow::LoadChanges() { username_->setText(QString::fromStdString(username_str)); password_->setText(QString::fromStdString(password_str)); - static const uint32_t method_ids[] = { -#define XX(num, name, string) num, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; unsigned int i; - for (i = 0; i < std::size(method_ids); ++i) { - if (cipher_method == method_ids[i]) + for (i = 0; i < std::size(kCipherMethods); ++i) { + if (cipher_method == kCipherMethods[i]) break; } + // not found + if (i == std::size(kCipherMethods)) { + i = 0; + } method_->setCurrentIndex(i); diff --git a/yass/src/ss_test.cpp b/yass/src/ss_test.cpp index 968ae046b3..3f2bf0f641 100644 --- a/yass/src/ss_test.cpp +++ b/yass/src/ss_test.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -27,8 +28,14 @@ #ifdef HAVE_CURL #include -ABSL_FLAG(std::string, proxy_type, "http", "proxy type, available: socks4, socks4a, socks5, socks5h, http"); +static constexpr const std::string_view kAvailableProxyTypes[] = {"socks4", "socks4a", "socks5", "socks5h", "http"}; +#else +static constexpr const std::string_view kAvailableProxyTypes[] = {"http"}; #endif +ABSL_FLAG(std::string, + proxy_type, + "http", + absl::StrCat("proxy type, available: ", absl::StrJoin(kAvailableProxyTypes, ", "))); #include "cli/cli_server.hpp" #include "config/config.hpp" @@ -767,15 +774,9 @@ TEST_P(EndToEndTest, 1M) { SendRequestAndCheckResponse(); } -static constexpr const cipher_method kCiphers[] = { -#define XX(num, name, string) CRYPTO_##name, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX -}; - INSTANTIATE_TEST_SUITE_P(Ss, EndToEndTest, - ::testing::ValuesIn(kCiphers), + ::testing::ValuesIn(kCipherMethods), [](const ::testing::TestParamInfo& info) -> std::string { return std::string(to_cipher_method_name(info.param)); }); @@ -869,6 +870,16 @@ int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); absl::ParseCommandLine(argc, argv); + // check ss_test only flags + bool found_proxy_type = std::find(std::begin(kAvailableProxyTypes), std::end(kAvailableProxyTypes), + absl::GetFlag(FLAGS_proxy_type)) != std::end(kAvailableProxyTypes); + + if (!found_proxy_type) { + std::cerr << "Invalid proxy type: " << absl::GetFlag(FLAGS_proxy_type) << " expected on of " + << absl::StrJoin(kAvailableProxyTypes, ",") << std::endl; + return -1; + } + // first line of logging LOG(WARNING) << "Application starting: " << YASS_APP_TAG << " type: " << ProgramTypeToStr(pType); LOG(WARNING) << "Last Change: " << YASS_APP_LAST_CHANGE; diff --git a/yass/src/win32/yass_frame.cpp b/yass/src/win32/yass_frame.cpp index 0366e60632..6665563163 100644 --- a/yass/src/win32/yass_frame.cpp +++ b/yass/src/win32/yass_frame.cpp @@ -363,16 +363,6 @@ int CYassFrame::Create(const wchar_t* className, EnableWindow(stop_button_, FALSE); // Right Panel - constexpr const wchar_t* const method_strings[] = { -#define XX(num, name, string) L##string, - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; - constexpr const DWORD method_nums[] = { -#define XX(num, name, string) static_cast(num), - CIPHER_METHOD_VALID_MAP(XX) -#undef XX - }; // https://docs.microsoft.com/en-us/windows/win32/controls/individual-control-info // https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles @@ -420,10 +410,10 @@ int CYassFrame::Create(const wchar_t* className, method_combo_box_ = CreateComboBox(CBS_DROPDOWNLIST, m_hWnd, IDC_COMBOBOX_METHOD, hInstance); - constexpr const int method_count = std::size(method_strings); + constexpr const int method_count = std::size(kCipherMethodLCStrs); for (int i = 0; i < method_count; ++i) { - ComboBox_AddString(method_combo_box_, method_strings[i]); - ComboBox_SetItemData(method_combo_box_, i, method_nums[i]); + ComboBox_AddString(method_combo_box_, kCipherMethodLCStrs[i]); + ComboBox_SetItemData(method_combo_box_, i, static_cast(kCipherMethods[i])); } ComboBox_SetMinVisible(method_combo_box_, method_count); diff --git a/yt-dlp/yt_dlp/extractor/bilibili.py b/yt-dlp/yt_dlp/extractor/bilibili.py index 72d5f20cf3..91619d9d5c 100644 --- a/yt-dlp/yt_dlp/extractor/bilibili.py +++ b/yt-dlp/yt_dlp/extractor/bilibili.py @@ -62,7 +62,7 @@ class BilibiliBaseIE(InfoExtractor): 'support_formats', lambda _, v: v['quality'] not in parsed_qualities))], delim=', ') if missing_formats: self.to_screen( - f'Format(s) {missing_formats} are missing; you have to login or ' + f'Format(s) {missing_formats} are missing; you have to ' f'become a premium member to download them. {self._login_hint()}') def extract_formats(self, play_info): @@ -164,14 +164,18 @@ class BilibiliBaseIE(InfoExtractor): params['w_rid'] = hashlib.md5(f'{query}{self._get_wbi_key(video_id)}'.encode()).hexdigest() return params - def _download_playinfo(self, bvid, cid, headers=None, qn=None): - params = {'bvid': bvid, 'cid': cid, 'fnval': 4048} - if qn: - params['qn'] = qn + def _download_playinfo(self, bvid, cid, headers=None, query=None): + params = {'bvid': bvid, 'cid': cid, 'fnval': 4048, **(query or {})} + if self.is_logged_in: + params.pop('try_look', None) + if qn := params.get('qn'): + note = f'Downloading video format {qn} for cid {cid}' + else: + note = f'Downloading video formats for cid {cid}' + return self._download_json( 'https://api.bilibili.com/x/player/wbi/playurl', bvid, - query=self._sign_wbi(params, bvid), headers=headers, - note=f'Downloading video formats for cid {cid} {qn or ""}')['data'] + query=self._sign_wbi(params, bvid), headers=headers, note=note)['data'] def json2srt(self, json_data): srt_data = '' @@ -190,7 +194,7 @@ class BilibiliBaseIE(InfoExtractor): } video_info = self._download_json( - 'https://api.bilibili.com/x/player/v2', video_id, + 'https://api.bilibili.com/x/player/wbi/v2', video_id, query={'aid': aid, 'cid': cid} if aid else {'bvid': video_id, 'cid': cid}, note=f'Extracting subtitle info {cid}', headers=self._HEADERS) if traverse_obj(video_info, ('data', 'need_login_subtitle')): @@ -206,7 +210,7 @@ class BilibiliBaseIE(InfoExtractor): def _get_chapters(self, aid, cid): chapters = aid and cid and self._download_json( - 'https://api.bilibili.com/x/player/v2', aid, query={'aid': aid, 'cid': cid}, + 'https://api.bilibili.com/x/player/wbi/v2', aid, query={'aid': aid, 'cid': cid}, note='Extracting chapters', fatal=False, headers=self._HEADERS) return traverse_obj(chapters, ('data', 'view_points', ..., { 'title': 'content', @@ -285,7 +289,7 @@ class BilibiliBaseIE(InfoExtractor): ('data', 'interaction', 'graph_version', {int_or_none})) cid_edges = self._get_divisions(video_id, graph_version, {1: {'cid': cid}}, 1) for cid, edges in cid_edges.items(): - play_info = self._download_playinfo(video_id, cid, headers=headers) + play_info = self._download_playinfo(video_id, cid, headers=headers, query={'try_look': 1}) yield { **metainfo, 'id': f'{video_id}_{cid}', @@ -652,13 +656,6 @@ class BiliBiliIE(BilibiliBaseIE): else: video_data = initial_state['videoData'] - if video_data.get('is_upower_exclusive'): - high_level = traverse_obj(initial_state, ('elecFullInfo', 'show_info', 'high_level', {dict})) or {} - raise ExtractorError( - 'This is a supporter-only video: ' - f'{join_nonempty("title", "sub_title", from_dict=high_level, delim=",")}. ' - f'{self._login_hint()}', expected=True) - video_id, title = video_data['bvid'], video_data.get('title') # Bilibili anthologies are similar to playlists but all videos share the same video ID as the anthology itself. @@ -688,7 +685,7 @@ class BiliBiliIE(BilibiliBaseIE): traverse_obj( self._search_json(r'window\.__playinfo__\s*=', webpage, 'play info', video_id, default=None), ('data', {dict})) - or self._download_playinfo(video_id, cid, headers=headers)) + or self._download_playinfo(video_id, cid, headers=headers, query={'try_look': 1})) festival_info = {} if is_festival: @@ -726,62 +723,72 @@ class BiliBiliIE(BilibiliBaseIE): self._get_interactive_entries(video_id, cid, metainfo, headers=headers), **metainfo, duration=traverse_obj(initial_state, ('videoData', 'duration', {int_or_none})), __post_extractor=self.extract_comments(aid)) - else: - formats = self.extract_formats(play_info) - if not traverse_obj(play_info, ('dash')): - # we only have legacy formats and need additional work - has_qn = lambda x: x in traverse_obj(formats, (..., 'quality')) - for qn in traverse_obj(play_info, ('accept_quality', lambda _, v: not has_qn(v), {int})): - formats.extend(traverse_obj( - self.extract_formats(self._download_playinfo(video_id, cid, headers=headers, qn=qn)), - lambda _, v: not has_qn(v['quality']))) - self._check_missing_formats(play_info, formats) - flv_formats = traverse_obj(formats, lambda _, v: v['fragments']) - if flv_formats and len(flv_formats) < len(formats): - # Flv and mp4 are incompatible due to `multi_video` workaround, so drop one - if not self._configuration_arg('prefer_multi_flv'): - dropped_fmts = ', '.join( - f'{f.get("format_note")} ({f.get("format_id")})' for f in flv_formats) - formats = traverse_obj(formats, lambda _, v: not v.get('fragments')) - if dropped_fmts: - self.to_screen( - f'Dropping incompatible flv format(s) {dropped_fmts} since mp4 is available. ' - 'To extract flv, pass --extractor-args "bilibili:prefer_multi_flv"') - else: - formats = traverse_obj( - # XXX: Filtering by extractor-arg is for testing purposes - formats, lambda _, v: v['quality'] == int(self._configuration_arg('prefer_multi_flv')[0]), - ) or [max(flv_formats, key=lambda x: x['quality'])] + formats = self.extract_formats(play_info) - if traverse_obj(formats, (0, 'fragments')): - # We have flv formats, which are individual short videos with their own timestamps and metainfo - # Binary concatenation corrupts their timestamps, so we need a `multi_video` workaround - return { - **metainfo, - '_type': 'multi_video', - 'entries': [{ - 'id': f'{metainfo["id"]}_{idx}', - 'title': metainfo['title'], - 'http_headers': metainfo['http_headers'], - 'formats': [{ - **fragment, - 'format_id': formats[0].get('format_id'), - }], - 'subtitles': self.extract_subtitles(video_id, cid) if idx == 0 else None, - '__post_extractor': self.extract_comments(aid) if idx == 0 else None, - } for idx, fragment in enumerate(formats[0]['fragments'])], - 'duration': float_or_none(play_info.get('timelength'), scale=1000), - } - else: - return { - **metainfo, - 'formats': formats, - 'duration': float_or_none(play_info.get('timelength'), scale=1000), - 'chapters': self._get_chapters(aid, cid), - 'subtitles': self.extract_subtitles(video_id, cid), - '__post_extractor': self.extract_comments(aid), - } + if video_data.get('is_upower_exclusive'): + high_level = traverse_obj(initial_state, ('elecFullInfo', 'show_info', 'high_level', {dict})) or {} + msg = f'{join_nonempty("title", "sub_title", from_dict=high_level, delim=",")}. {self._login_hint()}' + if not formats: + raise ExtractorError(f'This is a supporter-only video: {msg}', expected=True) + if '试看' in traverse_obj(play_info, ('accept_description', ..., {str})): + self.report_warning( + f'This is a supporter-only video, only the preview will be extracted: {msg}', + video_id=video_id) + + if not traverse_obj(play_info, 'dash'): + # we only have legacy formats and need additional work + has_qn = lambda x: x in traverse_obj(formats, (..., 'quality')) + for qn in traverse_obj(play_info, ('accept_quality', lambda _, v: not has_qn(v), {int})): + formats.extend(traverse_obj( + self.extract_formats(self._download_playinfo(video_id, cid, headers=headers, query={'qn': qn})), + lambda _, v: not has_qn(v['quality']))) + self._check_missing_formats(play_info, formats) + flv_formats = traverse_obj(formats, lambda _, v: v['fragments']) + if flv_formats and len(flv_formats) < len(formats): + # Flv and mp4 are incompatible due to `multi_video` workaround, so drop one + if not self._configuration_arg('prefer_multi_flv'): + dropped_fmts = ', '.join( + f'{f.get("format_note")} ({f.get("format_id")})' for f in flv_formats) + formats = traverse_obj(formats, lambda _, v: not v.get('fragments')) + if dropped_fmts: + self.to_screen( + f'Dropping incompatible flv format(s) {dropped_fmts} since mp4 is available. ' + 'To extract flv, pass --extractor-args "bilibili:prefer_multi_flv"') + else: + formats = traverse_obj( + # XXX: Filtering by extractor-arg is for testing purposes + formats, lambda _, v: v['quality'] == int(self._configuration_arg('prefer_multi_flv')[0]), + ) or [max(flv_formats, key=lambda x: x['quality'])] + + if traverse_obj(formats, (0, 'fragments')): + # We have flv formats, which are individual short videos with their own timestamps and metainfo + # Binary concatenation corrupts their timestamps, so we need a `multi_video` workaround + return { + **metainfo, + '_type': 'multi_video', + 'entries': [{ + 'id': f'{metainfo["id"]}_{idx}', + 'title': metainfo['title'], + 'http_headers': metainfo['http_headers'], + 'formats': [{ + **fragment, + 'format_id': formats[0].get('format_id'), + }], + 'subtitles': self.extract_subtitles(video_id, cid) if idx == 0 else None, + '__post_extractor': self.extract_comments(aid) if idx == 0 else None, + } for idx, fragment in enumerate(formats[0]['fragments'])], + 'duration': float_or_none(play_info.get('timelength'), scale=1000), + } + + return { + **metainfo, + 'formats': formats, + 'duration': float_or_none(play_info.get('timelength'), scale=1000), + 'chapters': self._get_chapters(aid, cid), + 'subtitles': self.extract_subtitles(video_id, cid), + '__post_extractor': self.extract_comments(aid), + } class BiliBiliBangumiIE(BilibiliBaseIE): @@ -859,10 +866,16 @@ class BiliBiliBangumiIE(BilibiliBaseIE): self.raise_login_required('This video is for premium members only') headers['Referer'] = url - play_info = self._download_json( - 'https://api.bilibili.com/pgc/player/web/v2/playurl', episode_id, - 'Extracting episode', query={'fnval': '4048', 'ep_id': episode_id}, - headers=headers) + + play_info = ( + self._search_json( + r'playurlSSRData\s*=', webpage, 'embedded page info', episode_id, + end_pattern='\n', default=None) + or self._download_json( + 'https://api.bilibili.com/pgc/player/web/v2/playurl', episode_id, + 'Extracting episode', query={'fnval': 12240, 'ep_id': episode_id}, + headers=headers)) + premium_only = play_info.get('code') == -10403 play_info = traverse_obj(play_info, ('result', 'video_info', {dict})) or {} diff --git a/yt-dlp/yt_dlp/extractor/vk.py b/yt-dlp/yt_dlp/extractor/vk.py index 6ccc701a2b..4b36e41ffb 100644 --- a/yt-dlp/yt_dlp/extractor/vk.py +++ b/yt-dlp/yt_dlp/extractor/vk.py @@ -17,10 +17,10 @@ from ..utils import ( get_element_html_by_id, int_or_none, join_nonempty, + parse_qs, parse_resolution, str_or_none, str_to_int, - traverse_obj, try_call, unescapeHTML, unified_timestamp, @@ -29,6 +29,7 @@ from ..utils import ( urlencode_postdata, urljoin, ) +from ..utils.traversal import require, traverse_obj class VKBaseIE(InfoExtractor): @@ -91,17 +92,17 @@ class VKBaseIE(InfoExtractor): class VKIE(VKBaseIE): IE_NAME = 'vk' IE_DESC = 'VK' - _EMBED_REGEX = [r']+?src=(["\'])(?Phttps?://vk\.com/video_ext\.php.+?)\1'] + _EMBED_REGEX = [r']+?src=(["\'])(?Phttps?://vk(?:(?:video)?\.ru|\.com)/video_ext\.php.+?)\1'] _VALID_URL = r'''(?x) https?:// (?: (?: - (?:(?:m|new)\.)?vk\.com/video_| + (?:(?:m|new)\.)?vk(?:(?:video)?\.ru|\.com)/video_| (?:www\.)?daxab\.com/ ) ext\.php\?(?P.*?\boid=(?P-?\d+).*?\bid=(?P\d+).*)| (?: - (?:(?:m|new)\.)?vk\.com/(?:.+?\?.*?z=)?(?:video|clip)| + (?:(?:m|new)\.)?vk(?:(?:video)?\.ru|\.com)/(?:.+?\?.*?z=)?(?:video|clip)| (?:www\.)?daxab\.com/embed/ ) (?P-?\d+_\d+)(?:.*\blist=(?P([\da-f]+)|(ln-[\da-zA-Z]+)))? @@ -110,7 +111,7 @@ class VKIE(VKBaseIE): _TESTS = [ { - 'url': 'http://vk.com/videos-77521?z=video-77521_162222515%2Fclub77521', + 'url': 'https://vk.com/videos-77521?z=video-77521_162222515%2Fclub77521', 'info_dict': { 'id': '-77521_162222515', 'ext': 'mp4', @@ -127,7 +128,7 @@ class VKIE(VKBaseIE): 'params': {'skip_download': 'm3u8'}, }, { - 'url': 'http://vk.com/video205387401_165548505', + 'url': 'https://vk.com/video205387401_165548505', 'info_dict': { 'id': '205387401_165548505', 'ext': 'mp4', @@ -182,10 +183,10 @@ class VKIE(VKBaseIE): 'ext': 'mp4', 'title': "DSWD Awards 'Children's Joy Foundation, Inc.' Certificate of Registration and License to Operate", 'description': 'md5:bf9c26cfa4acdfb146362682edd3827a', - 'duration': 178, + 'duration': 179, 'upload_date': '20130117', 'uploader': "Children's Joy Foundation Inc.", - 'uploader_id': 'thecjf', + 'uploader_id': '@CJFIofficial', 'view_count': int, 'channel_id': 'UCgzCNQ11TmR9V97ECnhi3gw', 'availability': 'public', @@ -193,7 +194,7 @@ class VKIE(VKBaseIE): 'live_status': 'not_live', 'playable_in_embed': True, 'channel': 'Children\'s Joy Foundation Inc.', - 'uploader_url': 'http://www.youtube.com/user/thecjf', + 'uploader_url': 'https://www.youtube.com/@CJFIofficial', 'thumbnail': r're:https?://.+\.jpg$', 'tags': 'count:27', 'start_time': 0.0, @@ -201,6 +202,7 @@ class VKIE(VKBaseIE): 'channel_url': 'https://www.youtube.com/channel/UCgzCNQ11TmR9V97ECnhi3gw', 'channel_follower_count': int, 'age_limit': 0, + 'timestamp': 1358394935, }, }, { @@ -222,6 +224,7 @@ class VKIE(VKBaseIE): 'thumbnail': r're:https?://.+x1080$', 'tags': list, }, + 'skip': 'This video has been deleted and is no longer available.', }, { 'url': 'https://vk.com/clips-74006511?z=clip-74006511_456247211', @@ -235,13 +238,13 @@ class VKIE(VKBaseIE): 'timestamp': 1664995597, 'title': 'Clip by @madempress', 'upload_date': '20221005', - 'uploader': 'Шальная императрица', + 'uploader': 'Шальная Императрица', 'uploader_id': '-74006511', }, }, { # video key is extra_data not url\d+ - 'url': 'http://vk.com/video-110305615_171782105', + 'url': 'https://vk.com/video-110305615_171782105', 'md5': 'e13fcda136f99764872e739d13fac1d1', 'info_dict': { 'id': '-110305615_171782105', @@ -273,6 +276,7 @@ class VKIE(VKBaseIE): 'params': { 'skip_download': True, }, + 'skip': 'No formats found', }, { # live stream, hls and rtmp links, most likely already finished live @@ -312,7 +316,16 @@ class VKIE(VKBaseIE): { 'url': 'https://vk.com/clip30014565_456240946', 'only_matching': True, - }] + }, + { + 'url': 'https://vkvideo.ru/video-127553155_456242961', + 'only_matching': True, + }, + { + 'url': 'https://vk.ru/video-220754053_456242564', + 'only_matching': True, + }, + ] def _real_extract(self, url): mobj = self._match_valid_url(url) @@ -338,7 +351,7 @@ class VKIE(VKBaseIE): video_id = '{}_{}'.format(mobj.group('oid'), mobj.group('id')) info_page = self._download_webpage( - 'http://vk.com/video_ext.php?' + mobj.group('embed_query'), video_id) + 'https://vk.com/video_ext.php?' + mobj.group('embed_query'), video_id) error_message = self._html_search_regex( [r'(?s)]+class="video_layer_message"[^>]*>(.+?)', @@ -432,7 +445,7 @@ class VKIE(VKBaseIE): if m_opts_url: opts_url = m_opts_url.group(1) if opts_url.startswith('//'): - opts_url = 'http:' + opts_url + opts_url = 'https:' + opts_url return self.url_result(opts_url) data = player['params'][0] @@ -512,8 +525,11 @@ class VKIE(VKBaseIE): class VKUserVideosIE(VKBaseIE): IE_NAME = 'vk:uservideos' IE_DESC = "VK - User's Videos" - _VALID_URL = r'https?://(?:(?:m|new)\.)?vk\.com/video/(?:playlist/)?(?P[^?$#/&]+)(?!\?.*\bz=video)(?:[/?#&](?:.*?\bsection=(?P
\w+))?|$)' - _TEMPLATE_URL = 'https://vk.com/videos' + _BASE_URL_RE = r'https?://(?:(?:m|new)\.)?vk(?:video\.ru|\.com/video)' + _VALID_URL = [ + rf'{_BASE_URL_RE}/playlist/(?P-?\d+_\d+)', + rf'{_BASE_URL_RE}/(?P@[^/?#]+)(?:/all)?/?(?!\?.*\bz=video)(?:[?#]|$)', + ] _TESTS = [{ 'url': 'https://vk.com/video/@mobidevices', 'info_dict': { @@ -527,12 +543,20 @@ class VKUserVideosIE(VKBaseIE): }, 'playlist_mincount': 182, }, { - 'url': 'https://vk.com/video/playlist/-174476437_2', + 'url': 'https://vkvideo.ru/playlist/-204353299_426', 'info_dict': { - 'id': '-174476437_playlist_2', - 'title': 'Анонсы', + 'id': '-204353299_playlist_426', }, - 'playlist_mincount': 108, + 'playlist_mincount': 33, + }, { + 'url': 'https://vk.com/video/@gorkyfilmstudio/all', + 'only_matching': True, + }, { + 'url': 'https://vkvideo.ru/@mobidevices', + 'only_matching': True, + }, { + 'url': 'https://vk.com/video/playlist/-174476437_2', + 'only_matching': True, }] _VIDEO = collections.namedtuple('Video', ['owner_id', 'id']) @@ -552,7 +576,7 @@ class VKUserVideosIE(VKBaseIE): v = self._VIDEO._make(video[:2]) video_id = '%d_%d' % (v.owner_id, v.id) yield self.url_result( - 'http://vk.com/video' + video_id, VKIE.ie_key(), video_id) + 'https://vk.com/video' + video_id, VKIE.ie_key(), video_id) if count >= total: break video_list_json = self._download_payload('al_video', page_id, { @@ -561,23 +585,25 @@ class VKUserVideosIE(VKBaseIE): 'oid': page_id, 'section': section, })[0][section] - count += video_list_json['count'] + new_count = video_list_json['count'] + if not new_count: + self.to_screen(f'{page_id}: Skipping {total - count} unavailable videos') + break + count += new_count video_list = video_list_json['list'] def _real_extract(self, url): - u_id, section = self._match_valid_url(url).groups() + u_id = self._match_id(url) webpage = self._download_webpage(url, u_id) if u_id.startswith('@'): - page_id = self._search_regex(r'data-owner-id\s?=\s?"([^"]+)"', webpage, 'page_id') - elif '_' in u_id: - page_id, section = u_id.split('_', 1) - section = f'playlist_{section}' + page_id = traverse_obj( + self._search_json(r'\bvar newCur\s*=', webpage, 'cursor data', u_id), + ('oid', {int}, {str_or_none}, {require('page id')})) + section = traverse_obj(parse_qs(url), ('section', 0)) or 'all' else: - raise ExtractorError('Invalid URL', expected=True) - - if not section: - section = 'all' + page_id, _, section = u_id.partition('_') + section = f'playlist_{section}' playlist_title = clean_html(get_element_by_class('VideoInfoPanel__title', webpage)) return self.playlist_result(self._entries(page_id, section), f'{page_id}_{section}', playlist_title) @@ -717,7 +743,7 @@ class VKWallPostIE(VKBaseIE): class VKPlayBaseIE(InfoExtractor): - _BASE_URL_RE = r'https?://(?:vkplay\.live|live\.vkplay\.ru)/' + _BASE_URL_RE = r'https?://(?:vkplay\.live|live\.vk(?:play|video)\.ru)/' _RESOLUTIONS = { 'tiny': '256x144', 'lowest': '426x240', @@ -797,6 +823,9 @@ class VKPlayIE(VKPlayBaseIE): }, { 'url': 'https://live.vkplay.ru/lebwa/record/33a4e4ce-e3ef-49db-bb14-f006cc6fabc9/records', 'only_matching': True, + }, { + 'url': 'https://live.vkvideo.ru/lebwa/record/33a4e4ce-e3ef-49db-bb14-f006cc6fabc9/records', + 'only_matching': True, }] def _real_extract(self, url): @@ -839,6 +868,9 @@ class VKPlayLiveIE(VKPlayBaseIE): }, { 'url': 'https://live.vkplay.ru/lebwa', 'only_matching': True, + }, { + 'url': 'https://live.vkvideo.ru/panterka', + 'only_matching': True, }] def _real_extract(self, url):