From f7290fe6624011c2daf1d400a9d6b55fcbb70cc6 Mon Sep 17 00:00:00 2001 From: "github-action[bot]" Date: Thu, 6 Nov 2025 19:42:18 +0100 Subject: [PATCH] Update On Thu Nov 6 19:42:18 CET 2025 --- .github/update.log | 1 + clash-meta/adapter/outboundgroup/fallback.go | 4 +- clash-meta/adapter/outboundgroup/groupbase.go | 9 +- .../adapter/outboundgroup/loadbalance.go | 4 +- clash-meta/adapter/outboundgroup/parser.go | 16 +- .../adapter/outboundgroup/patch_android.go | 14 +- clash-meta/adapter/outboundgroup/relay.go | 4 +- clash-meta/adapter/outboundgroup/selector.go | 4 +- clash-meta/adapter/outboundgroup/urltest.go | 4 +- clash-meta/adapter/provider/parser.go | 6 +- clash-meta/adapter/provider/provider.go | 16 +- clash-meta/component/resource/fetcher.go | 14 +- clash-meta/component/resource/vehicle.go | 12 +- clash-meta/config/config.go | 193 ++++++------ clash-meta/hub/executor/executor.go | 16 +- clash-meta/hub/route/configs.go | 26 +- clash-meta/hub/route/provider.go | 12 +- clash-meta/listener/sing_tun/server.go | 8 +- clash-meta/tunnel/tunnel.go | 42 +-- clash-nyanpasu/backend/Cargo.lock | 168 +++++----- .../frontend/interface/package.json | 2 +- clash-nyanpasu/frontend/nyanpasu/package.json | 4 +- clash-nyanpasu/manifest/version.json | 4 +- clash-nyanpasu/pnpm-lock.yaml | 32 +- clash-nyanpasu/scripts/publish.ts | 4 +- lede/config/Config-images.in | 5 +- lede/package/kernel/linux/modules/video.mk | 30 +- lede/package/lean/autocore/Makefile | 25 ++ .../lean/autocore/files/loongarch64/autocore | 20 ++ .../autocore/files/loongarch64/sbin/cpuinfo | 5 + .../autocore/files/loongarch64/sbin/ethinfo | 45 +++ .../autocore/files/loongarch64/sbin/tempinfo | 5 + lede/package/system/fstools/Makefile | 2 +- ...300-change-default-f2fs-overlay-size.patch | 11 + lede/target/linux/loongarch64/Makefile | 5 +- mihomo/adapter/outboundgroup/fallback.go | 4 +- mihomo/adapter/outboundgroup/groupbase.go | 9 +- mihomo/adapter/outboundgroup/loadbalance.go | 4 +- mihomo/adapter/outboundgroup/parser.go | 16 +- mihomo/adapter/outboundgroup/patch_android.go | 14 +- mihomo/adapter/outboundgroup/relay.go | 4 +- mihomo/adapter/outboundgroup/selector.go | 4 +- mihomo/adapter/outboundgroup/urltest.go | 4 +- mihomo/adapter/provider/parser.go | 6 +- mihomo/adapter/provider/provider.go | 16 +- mihomo/component/resource/fetcher.go | 14 +- mihomo/component/resource/vehicle.go | 12 +- mihomo/config/config.go | 193 ++++++------ mihomo/hub/executor/executor.go | 16 +- mihomo/hub/route/configs.go | 26 +- mihomo/hub/route/provider.go | 12 +- mihomo/listener/sing_tun/server.go | 8 +- mihomo/tunnel/tunnel.go | 42 +-- openwrt-packages/luci-app-ddns-go/Makefile | 4 +- .../resources/view/ddns-go/config.js | 4 +- .../resources/view/ddns-go/ddns-go.js | 101 +++--- .../luci-app-ddns-go/po/zh_Hans/ddns-go.po | 4 +- openwrt-packages/luci-theme-kucat/Makefile | 4 +- .../htdocs/luci-static/kucat/css/style.css | 224 +++++++------ .../luasrc/controller/passwall.lua | 3 +- .../model/cbi/passwall/client/node_config.lua | 4 +- .../view/passwall/node_list/link_add_node.htm | 202 +++++++++++- .../view/passwall/node_list/node_list.htm | 29 +- .../root/usr/share/passwall/iptables.sh | 1 + .../root/usr/share/passwall/subscribe.lua | 6 +- .../model/cbi/passwall/client/node_config.lua | 4 +- .../view/passwall/node_list/link_add_node.htm | 2 +- .../view/passwall/node_list/node_list.htm | 20 +- .../root/usr/share/passwall/iptables.sh | 5 +- small/v2ray-geodata/Makefile | 4 +- small/v2raya/Makefile | 6 +- v2raya/.github/workflows/release_main.yml | 10 +- v2raya/gui/src/App.vue | 146 +++------ v2raya/gui/src/components/modalSetting.vue | 294 ++++++------------ .../components/modalTproxyWhiteIpGroups.vue | 98 ++++++ v2raya/gui/src/locales/en.js | 18 +- v2raya/gui/src/locales/zh.js | 17 + v2raya/gui/src/node.vue | 2 + v2raya/service/common/parseGeoIP/geoip.pb.go | 238 ++++++++++++++ v2raya/service/common/parseGeoIP/geoip.proto | 20 ++ v2raya/service/common/parseGeoIP/parser.go | 49 +++ v2raya/service/core/coreObj/coreObj.go | 1 + v2raya/service/core/iptables/tproxy.go | 92 +++--- v2raya/service/core/iptables/utils.go | 27 ++ v2raya/service/core/v2ray/v2rayTmpl.go | 4 + v2raya/service/db/configure/configure.go | 31 +- v2raya/service/db/configure/setting.go | 1 + .../db/configure/tproxyWhiteIpGroups.go | 6 + v2raya/service/pre.go | 6 + .../server/controller/tproxyWhiteIpGroups.go | 29 ++ v2raya/service/server/router/index.go | 2 + v2rayng/V2rayNG/app/build.gradle.kts | 4 +- yt-dlp/yt_dlp/downloader/external.py | 7 + yt-dlp/yt_dlp/extractor/youtube/_tab.py | 5 +- yt-dlp/yt_dlp/extractor/youtube/_video.py | 110 +++++-- 95 files changed, 1936 insertions(+), 1084 deletions(-) create mode 100755 lede/package/lean/autocore/files/loongarch64/autocore create mode 100755 lede/package/lean/autocore/files/loongarch64/sbin/cpuinfo create mode 100644 lede/package/lean/autocore/files/loongarch64/sbin/ethinfo create mode 100755 lede/package/lean/autocore/files/loongarch64/sbin/tempinfo create mode 100644 lede/package/system/fstools/patches/0300-change-default-f2fs-overlay-size.patch create mode 100644 v2raya/gui/src/components/modalTproxyWhiteIpGroups.vue create mode 100644 v2raya/service/common/parseGeoIP/geoip.pb.go create mode 100644 v2raya/service/common/parseGeoIP/geoip.proto create mode 100644 v2raya/service/common/parseGeoIP/parser.go create mode 100644 v2raya/service/db/configure/tproxyWhiteIpGroups.go create mode 100644 v2raya/service/server/controller/tproxyWhiteIpGroups.go diff --git a/.github/update.log b/.github/update.log index 500c7032ad..932cee0d7b 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1173,3 +1173,4 @@ Update On Sun Nov 2 19:34:13 CET 2025 Update On Mon Nov 3 19:37:13 CET 2025 Update On Tue Nov 4 19:40:23 CET 2025 Update On Wed Nov 5 19:38:37 CET 2025 +Update On Thu Nov 6 19:42:10 CET 2025 diff --git a/clash-meta/adapter/outboundgroup/fallback.go b/clash-meta/adapter/outboundgroup/fallback.go index 8f8842a1c4..3772107bc1 100644 --- a/clash-meta/adapter/outboundgroup/fallback.go +++ b/clash-meta/adapter/outboundgroup/fallback.go @@ -10,7 +10,7 @@ import ( N "github.com/metacubex/mihomo/common/net" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) type Fallback struct { @@ -150,7 +150,7 @@ func (f *Fallback) ForceSet(name string) { f.selected = name } -func NewFallback(option *GroupCommonOption, providers []provider.ProxyProvider) *Fallback { +func NewFallback(option *GroupCommonOption, providers []P.ProxyProvider) *Fallback { return &Fallback{ GroupBase: NewGroupBase(GroupBaseOption{ Name: option.Name, diff --git a/clash-meta/adapter/outboundgroup/groupbase.go b/clash-meta/adapter/outboundgroup/groupbase.go index dc66976bba..9e705677e4 100644 --- a/clash-meta/adapter/outboundgroup/groupbase.go +++ b/clash-meta/adapter/outboundgroup/groupbase.go @@ -12,8 +12,7 @@ import ( "github.com/metacubex/mihomo/common/atomic" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/tunnel" @@ -26,7 +25,7 @@ type GroupBase struct { filterRegs []*regexp2.Regexp excludeFilterRegs []*regexp2.Regexp excludeTypeArray []string - providers []provider.ProxyProvider + providers []P.ProxyProvider failedTestMux sync.Mutex failedTimes int failedTime time.Time @@ -48,7 +47,7 @@ type GroupBaseOption struct { ExcludeType string TestTimeout int MaxFailedTimes int - Providers []provider.ProxyProvider + Providers []P.ProxyProvider } func NewGroupBase(opt GroupBaseOption) *GroupBase { @@ -125,7 +124,7 @@ func (gb *GroupBase) GetProxies(touch bool) []C.Proxy { } } else { for _, pd := range gb.providers { - if pd.VehicleType() == types.Compatible { // compatible provider unneeded filter + if pd.VehicleType() == P.Compatible { // compatible provider unneeded filter proxies = append(proxies, pd.Proxies()...) continue } diff --git a/clash-meta/adapter/outboundgroup/loadbalance.go b/clash-meta/adapter/outboundgroup/loadbalance.go index 9f609fbba2..dff9b5ed9d 100644 --- a/clash-meta/adapter/outboundgroup/loadbalance.go +++ b/clash-meta/adapter/outboundgroup/loadbalance.go @@ -14,7 +14,7 @@ import ( N "github.com/metacubex/mihomo/common/net" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "golang.org/x/net/publicsuffix" ) @@ -239,7 +239,7 @@ func (lb *LoadBalance) MarshalJSON() ([]byte, error) { }) } -func NewLoadBalance(option *GroupCommonOption, providers []provider.ProxyProvider, strategy string) (lb *LoadBalance, err error) { +func NewLoadBalance(option *GroupCommonOption, providers []P.ProxyProvider, strategy string) (lb *LoadBalance, err error) { var strategyFn strategyFn switch strategy { case "consistent-hashing": diff --git a/clash-meta/adapter/outboundgroup/parser.go b/clash-meta/adapter/outboundgroup/parser.go index 9c09a0f4a2..2dcdd628b2 100644 --- a/clash-meta/adapter/outboundgroup/parser.go +++ b/clash-meta/adapter/outboundgroup/parser.go @@ -11,7 +11,7 @@ import ( "github.com/metacubex/mihomo/common/structure" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/log" ) @@ -48,7 +48,7 @@ type GroupCommonOption struct { RoutingMark int `group:"routing-mark,omitempty"` } -func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, providersMap map[string]types.ProxyProvider, AllProxies []string, AllProviders []string) (C.ProxyAdapter, error) { +func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, providersMap map[string]P.ProxyProvider, AllProxies []string, AllProviders []string) (C.ProxyAdapter, error) { decoder := structure.NewDecoder(structure.Option{TagName: "group", WeaklyTypedInput: true}) groupOption := &GroupCommonOption{ @@ -71,7 +71,7 @@ func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, provide groupName := groupOption.Name - providers := []types.ProxyProvider{} + providers := []P.ProxyProvider{} if groupOption.IncludeAll { groupOption.IncludeAllProviders = true @@ -169,7 +169,7 @@ func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, provide return nil, fmt.Errorf("%s: %w", groupName, err) } - providers = append([]types.ProxyProvider{pd}, providers...) + providers = append([]P.ProxyProvider{pd}, providers...) providersMap[groupName] = pd } @@ -206,15 +206,15 @@ func getProxies(mapping map[string]C.Proxy, list []string) ([]C.Proxy, error) { return ps, nil } -func getProviders(mapping map[string]types.ProxyProvider, list []string) ([]types.ProxyProvider, error) { - var ps []types.ProxyProvider +func getProviders(mapping map[string]P.ProxyProvider, list []string) ([]P.ProxyProvider, error) { + var ps []P.ProxyProvider for _, name := range list { p, ok := mapping[name] if !ok { return nil, fmt.Errorf("'%s' not found", name) } - if p.VehicleType() == types.Compatible { + if p.VehicleType() == P.Compatible { return nil, fmt.Errorf("proxy group %s can't contains in `use`", name) } ps = append(ps, p) @@ -222,7 +222,7 @@ func getProviders(mapping map[string]types.ProxyProvider, list []string) ([]type return ps, nil } -func addTestUrlToProviders(providers []types.ProxyProvider, url string, expectedStatus utils.IntRanges[uint16], filter string, interval uint) { +func addTestUrlToProviders(providers []P.ProxyProvider, url string, expectedStatus utils.IntRanges[uint16], filter string, interval uint) { if len(providers) == 0 || len(url) == 0 { return } diff --git a/clash-meta/adapter/outboundgroup/patch_android.go b/clash-meta/adapter/outboundgroup/patch_android.go index c6566814f8..016ed6067b 100644 --- a/clash-meta/adapter/outboundgroup/patch_android.go +++ b/clash-meta/adapter/outboundgroup/patch_android.go @@ -4,22 +4,22 @@ package outboundgroup import ( C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) type ProxyGroup interface { C.ProxyAdapter - Providers() []provider.ProxyProvider + Providers() []P.ProxyProvider Proxies() []C.Proxy Now() string } -func (f *Fallback) Providers() []provider.ProxyProvider { +func (f *Fallback) Providers() []P.ProxyProvider { return f.providers } -func (lb *LoadBalance) Providers() []provider.ProxyProvider { +func (lb *LoadBalance) Providers() []P.ProxyProvider { return lb.providers } @@ -35,7 +35,7 @@ func (lb *LoadBalance) Now() string { return "" } -func (r *Relay) Providers() []provider.ProxyProvider { +func (r *Relay) Providers() []P.ProxyProvider { return r.providers } @@ -47,7 +47,7 @@ func (r *Relay) Now() string { return "" } -func (s *Selector) Providers() []provider.ProxyProvider { +func (s *Selector) Providers() []P.ProxyProvider { return s.providers } @@ -55,7 +55,7 @@ func (s *Selector) Proxies() []C.Proxy { return s.GetProxies(false) } -func (u *URLTest) Providers() []provider.ProxyProvider { +func (u *URLTest) Providers() []P.ProxyProvider { return u.providers } diff --git a/clash-meta/adapter/outboundgroup/relay.go b/clash-meta/adapter/outboundgroup/relay.go index 77a2f03b8e..8e93d89837 100644 --- a/clash-meta/adapter/outboundgroup/relay.go +++ b/clash-meta/adapter/outboundgroup/relay.go @@ -8,7 +8,7 @@ import ( "github.com/metacubex/mihomo/component/dialer" "github.com/metacubex/mihomo/component/proxydialer" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/log" ) @@ -149,7 +149,7 @@ func (r *Relay) Addr() string { return proxies[len(proxies)-1].Addr() } -func NewRelay(option *GroupCommonOption, providers []provider.ProxyProvider) *Relay { +func NewRelay(option *GroupCommonOption, providers []P.ProxyProvider) *Relay { log.Warnln("The group [%s] with relay type is deprecated, please using dialer-proxy instead", option.Name) return &Relay{ GroupBase: NewGroupBase(GroupBaseOption{ diff --git a/clash-meta/adapter/outboundgroup/selector.go b/clash-meta/adapter/outboundgroup/selector.go index 03ee192c9e..f8975df744 100644 --- a/clash-meta/adapter/outboundgroup/selector.go +++ b/clash-meta/adapter/outboundgroup/selector.go @@ -6,7 +6,7 @@ import ( "errors" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) type Selector struct { @@ -108,7 +108,7 @@ func (s *Selector) selectedProxy(touch bool) C.Proxy { return proxies[0] } -func NewSelector(option *GroupCommonOption, providers []provider.ProxyProvider) *Selector { +func NewSelector(option *GroupCommonOption, providers []P.ProxyProvider) *Selector { return &Selector{ GroupBase: NewGroupBase(GroupBaseOption{ Name: option.Name, diff --git a/clash-meta/adapter/outboundgroup/urltest.go b/clash-meta/adapter/outboundgroup/urltest.go index 5dc620547e..2adb3b814e 100644 --- a/clash-meta/adapter/outboundgroup/urltest.go +++ b/clash-meta/adapter/outboundgroup/urltest.go @@ -11,7 +11,7 @@ import ( "github.com/metacubex/mihomo/common/singledo" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) type urlTestOption func(*URLTest) @@ -202,7 +202,7 @@ func parseURLTestOption(config map[string]any) []urlTestOption { return opts } -func NewURLTest(option *GroupCommonOption, providers []provider.ProxyProvider, options ...urlTestOption) *URLTest { +func NewURLTest(option *GroupCommonOption, providers []P.ProxyProvider, options ...urlTestOption) *URLTest { urlTest := &URLTest{ GroupBase: NewGroupBase(GroupBaseOption{ Name: option.Name, diff --git a/clash-meta/adapter/provider/parser.go b/clash-meta/adapter/provider/parser.go index 57dc6e24f6..d6297b5662 100644 --- a/clash-meta/adapter/provider/parser.go +++ b/clash-meta/adapter/provider/parser.go @@ -10,7 +10,7 @@ import ( "github.com/metacubex/mihomo/common/utils" "github.com/metacubex/mihomo/component/resource" C "github.com/metacubex/mihomo/constant" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/dlclark/regexp2" ) @@ -73,7 +73,7 @@ type proxyProviderSchema struct { Header map[string][]string `provider:"header,omitempty"` } -func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvider, error) { +func ParseProxyProvider(name string, mapping map[string]any) (P.ProxyProvider, error) { decoder := structure.NewDecoder(structure.Option{TagName: "provider", WeaklyTypedInput: true}) schema := &proxyProviderSchema{ @@ -104,7 +104,7 @@ func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvide return nil, err } - var vehicle types.Vehicle + var vehicle P.Vehicle switch schema.Type { case "file": path := C.Path.Resolve(schema.Path) diff --git a/clash-meta/adapter/provider/provider.go b/clash-meta/adapter/provider/provider.go index 2f71b41bb1..e5d3b8acd5 100644 --- a/clash-meta/adapter/provider/provider.go +++ b/clash-meta/adapter/provider/provider.go @@ -16,7 +16,7 @@ import ( "github.com/metacubex/mihomo/component/profile/cachefile" "github.com/metacubex/mihomo/component/resource" C "github.com/metacubex/mihomo/constant" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/tunnel/statistic" "github.com/dlclark/regexp2" @@ -68,8 +68,8 @@ func (bp *baseProvider) HealthCheck() { bp.healthCheck.check() } -func (bp *baseProvider) Type() types.ProviderType { - return types.Proxy +func (bp *baseProvider) Type() P.ProviderType { + return P.Proxy } func (bp *baseProvider) Proxies() []C.Proxy { @@ -171,7 +171,7 @@ func (pp *proxySetProvider) Close() error { return pp.Fetcher.Close() } -func NewProxySetProvider(name string, interval time.Duration, payload []map[string]any, parser resource.Parser[[]C.Proxy], vehicle types.Vehicle, hc *HealthCheck) (*ProxySetProvider, error) { +func NewProxySetProvider(name string, interval time.Duration, payload []map[string]any, parser resource.Parser[[]C.Proxy], vehicle P.Vehicle, hc *HealthCheck) (*ProxySetProvider, error) { pd := &proxySetProvider{ baseProvider: baseProvider{ name: name, @@ -238,8 +238,8 @@ func (ip *inlineProvider) MarshalJSON() ([]byte, error) { }) } -func (ip *inlineProvider) VehicleType() types.VehicleType { - return types.Inline +func (ip *inlineProvider) VehicleType() P.VehicleType { + return P.Inline } func (ip *inlineProvider) Update() error { @@ -303,8 +303,8 @@ func (cp *compatibleProvider) Update() error { return nil } -func (cp *compatibleProvider) VehicleType() types.VehicleType { - return types.Compatible +func (cp *compatibleProvider) VehicleType() P.VehicleType { + return P.Compatible } func NewCompatibleProvider(name string, proxies []C.Proxy, hc *HealthCheck) (*CompatibleProvider, error) { diff --git a/clash-meta/component/resource/fetcher.go b/clash-meta/component/resource/fetcher.go index 24f24d47b9..a48e7bc82f 100644 --- a/clash-meta/component/resource/fetcher.go +++ b/clash-meta/component/resource/fetcher.go @@ -8,7 +8,7 @@ import ( "github.com/metacubex/mihomo/common/utils" "github.com/metacubex/mihomo/component/slowdown" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/log" "github.com/metacubex/fswatch" @@ -22,7 +22,7 @@ type Fetcher[V any] struct { ctxCancel context.CancelFunc resourceType string name string - vehicle types.Vehicle + vehicle P.Vehicle updatedAt time.Time hash utils.HashType parser Parser[V] @@ -37,11 +37,11 @@ func (f *Fetcher[V]) Name() string { return f.name } -func (f *Fetcher[V]) Vehicle() types.Vehicle { +func (f *Fetcher[V]) Vehicle() P.Vehicle { return f.vehicle } -func (f *Fetcher[V]) VehicleType() types.VehicleType { +func (f *Fetcher[V]) VehicleType() P.VehicleType { return f.vehicle.Type() } @@ -88,7 +88,7 @@ func (f *Fetcher[V]) Update() (V, bool, error) { f.backoff.AddAttempt() // add a failed attempt to backoff return lo.Empty[V](), false, err } - return f.loadBuf(buf, hash, f.vehicle.Type() != types.File) + return f.loadBuf(buf, hash, f.vehicle.Type() != P.File) } func (f *Fetcher[V]) SideUpdate(buf []byte) (V, bool, error) { @@ -180,7 +180,7 @@ func (f *Fetcher[V]) pullLoop(forceUpdate bool) { func (f *Fetcher[V]) startPullLoop(forceUpdate bool) (err error) { // pull contents automatically - if f.vehicle.Type() == types.File { + if f.vehicle.Type() == P.File { f.watcher, err = fswatch.NewWatcher(fswatch.Options{ Path: []string{f.vehicle.Path()}, Callback: f.updateCallback, @@ -218,7 +218,7 @@ func (f *Fetcher[V]) updateWithLog() { return } -func NewFetcher[V any](name string, interval time.Duration, vehicle types.Vehicle, parser Parser[V], onUpdate func(V)) *Fetcher[V] { +func NewFetcher[V any](name string, interval time.Duration, vehicle P.Vehicle, parser Parser[V], onUpdate func(V)) *Fetcher[V] { ctx, cancel := context.WithCancel(context.Background()) minBackoff := 10 * time.Second if interval < minBackoff { diff --git a/clash-meta/component/resource/vehicle.go b/clash-meta/component/resource/vehicle.go index 67ab19b723..a34417aab2 100644 --- a/clash-meta/component/resource/vehicle.go +++ b/clash-meta/component/resource/vehicle.go @@ -12,7 +12,7 @@ import ( "github.com/metacubex/mihomo/common/utils" mihomoHttp "github.com/metacubex/mihomo/component/http" "github.com/metacubex/mihomo/component/profile/cachefile" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) const ( @@ -50,8 +50,8 @@ type FileVehicle struct { path string } -func (f *FileVehicle) Type() types.VehicleType { - return types.File +func (f *FileVehicle) Type() P.VehicleType { + return P.File } func (f *FileVehicle) Path() string { @@ -91,15 +91,15 @@ type HTTPVehicle struct { timeout time.Duration sizeLimit int64 inRead func(response *http.Response) - provider types.ProxyProvider + provider P.ProxyProvider } func (h *HTTPVehicle) Url() string { return h.url } -func (h *HTTPVehicle) Type() types.VehicleType { - return types.HTTP +func (h *HTTPVehicle) Type() P.VehicleType { + return P.HTTP } func (h *HTTPVehicle) Path() string { diff --git a/clash-meta/config/config.go b/clash-meta/config/config.go index 5f5b0c05c8..efc8903248 100644 --- a/clash-meta/config/config.go +++ b/clash-meta/config/config.go @@ -20,15 +20,15 @@ import ( "github.com/metacubex/mihomo/component/cidr" "github.com/metacubex/mihomo/component/fakeip" "github.com/metacubex/mihomo/component/geodata" - P "github.com/metacubex/mihomo/component/process" + "github.com/metacubex/mihomo/component/process" "github.com/metacubex/mihomo/component/resolver" "github.com/metacubex/mihomo/component/sniffer" "github.com/metacubex/mihomo/component/trie" C "github.com/metacubex/mihomo/constant" - providerTypes "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" snifferTypes "github.com/metacubex/mihomo/constant/sniffer" "github.com/metacubex/mihomo/dns" - L "github.com/metacubex/mihomo/listener" + "github.com/metacubex/mihomo/listener" LC "github.com/metacubex/mihomo/listener/config" "github.com/metacubex/mihomo/log" R "github.com/metacubex/mihomo/rules" @@ -44,27 +44,27 @@ import ( // General config type General struct { Inbound - Mode T.TunnelMode `json:"mode"` - UnifiedDelay bool `json:"unified-delay"` - LogLevel log.LogLevel `json:"log-level"` - IPv6 bool `json:"ipv6"` - Interface string `json:"interface-name"` - RoutingMark int `json:"routing-mark"` - GeoXUrl GeoXUrl `json:"geox-url"` - GeoAutoUpdate bool `json:"geo-auto-update"` - GeoUpdateInterval int `json:"geo-update-interval"` - GeodataMode bool `json:"geodata-mode"` - GeodataLoader string `json:"geodata-loader"` - GeositeMatcher string `json:"geosite-matcher"` - TCPConcurrent bool `json:"tcp-concurrent"` - FindProcessMode P.FindProcessMode `json:"find-process-mode"` - Sniffing bool `json:"sniffing"` - GlobalClientFingerprint string `json:"global-client-fingerprint"` - GlobalUA string `json:"global-ua"` - ETagSupport bool `json:"etag-support"` - KeepAliveIdle int `json:"keep-alive-idle"` - KeepAliveInterval int `json:"keep-alive-interval"` - DisableKeepAlive bool `json:"disable-keep-alive"` + Mode T.TunnelMode `json:"mode"` + UnifiedDelay bool `json:"unified-delay"` + LogLevel log.LogLevel `json:"log-level"` + IPv6 bool `json:"ipv6"` + Interface string `json:"interface-name"` + RoutingMark int `json:"routing-mark"` + GeoXUrl GeoXUrl `json:"geox-url"` + GeoAutoUpdate bool `json:"geo-auto-update"` + GeoUpdateInterval int `json:"geo-update-interval"` + GeodataMode bool `json:"geodata-mode"` + GeodataLoader string `json:"geodata-loader"` + GeositeMatcher string `json:"geosite-matcher"` + TCPConcurrent bool `json:"tcp-concurrent"` + FindProcessMode process.FindProcessMode `json:"find-process-mode"` + Sniffing bool `json:"sniffing"` + GlobalClientFingerprint string `json:"global-client-fingerprint"` + GlobalUA string `json:"global-ua"` + ETagSupport bool `json:"etag-support"` + KeepAliveIdle int `json:"keep-alive-idle"` + KeepAliveInterval int `json:"keep-alive-interval"` + DisableKeepAlive bool `json:"disable-keep-alive"` } // Inbound config @@ -199,8 +199,8 @@ type Config struct { Users []auth.AuthUser Proxies map[string]C.Proxy Listeners map[string]C.InboundListener - Providers map[string]providerTypes.ProxyProvider - RuleProviders map[string]providerTypes.RuleProvider + Providers map[string]P.ProxyProvider + RuleProviders map[string]P.RuleProvider Tunnels []LC.Tunnel Sniffer *sniffer.Config TLS *TLS @@ -382,51 +382,51 @@ type RawTLS struct { } type RawConfig struct { - Port int `yaml:"port" json:"port"` - SocksPort int `yaml:"socks-port" json:"socks-port"` - RedirPort int `yaml:"redir-port" json:"redir-port"` - TProxyPort int `yaml:"tproxy-port" json:"tproxy-port"` - MixedPort int `yaml:"mixed-port" json:"mixed-port"` - ShadowSocksConfig string `yaml:"ss-config" json:"ss-config"` - VmessConfig string `yaml:"vmess-config" json:"vmess-config"` - InboundTfo bool `yaml:"inbound-tfo" json:"inbound-tfo"` - InboundMPTCP bool `yaml:"inbound-mptcp" json:"inbound-mptcp"` - Authentication []string `yaml:"authentication" json:"authentication"` - SkipAuthPrefixes []netip.Prefix `yaml:"skip-auth-prefixes" json:"skip-auth-prefixes"` - LanAllowedIPs []netip.Prefix `yaml:"lan-allowed-ips" json:"lan-allowed-ips"` - LanDisAllowedIPs []netip.Prefix `yaml:"lan-disallowed-ips" json:"lan-disallowed-ips"` - AllowLan bool `yaml:"allow-lan" json:"allow-lan"` - BindAddress string `yaml:"bind-address" json:"bind-address"` - Mode T.TunnelMode `yaml:"mode" json:"mode"` - UnifiedDelay bool `yaml:"unified-delay" json:"unified-delay"` - LogLevel log.LogLevel `yaml:"log-level" json:"log-level"` - IPv6 bool `yaml:"ipv6" json:"ipv6"` - ExternalController string `yaml:"external-controller" json:"external-controller"` - ExternalControllerPipe string `yaml:"external-controller-pipe" json:"external-controller-pipe"` - ExternalControllerUnix string `yaml:"external-controller-unix" json:"external-controller-unix"` - ExternalControllerTLS string `yaml:"external-controller-tls" json:"external-controller-tls"` - ExternalControllerCors RawCors `yaml:"external-controller-cors" json:"external-controller-cors"` - ExternalUI string `yaml:"external-ui" json:"external-ui"` - ExternalUIURL string `yaml:"external-ui-url" json:"external-ui-url"` - ExternalUIName string `yaml:"external-ui-name" json:"external-ui-name"` - ExternalDohServer string `yaml:"external-doh-server" json:"external-doh-server"` - Secret string `yaml:"secret" json:"secret"` - Interface string `yaml:"interface-name" json:"interface-name"` - RoutingMark int `yaml:"routing-mark" json:"routing-mark"` - Tunnels []LC.Tunnel `yaml:"tunnels" json:"tunnels"` - GeoAutoUpdate bool `yaml:"geo-auto-update" json:"geo-auto-update"` - GeoUpdateInterval int `yaml:"geo-update-interval" json:"geo-update-interval"` - GeodataMode bool `yaml:"geodata-mode" json:"geodata-mode"` - GeodataLoader string `yaml:"geodata-loader" json:"geodata-loader"` - GeositeMatcher string `yaml:"geosite-matcher" json:"geosite-matcher"` - TCPConcurrent bool `yaml:"tcp-concurrent" json:"tcp-concurrent"` - FindProcessMode P.FindProcessMode `yaml:"find-process-mode" json:"find-process-mode"` - GlobalClientFingerprint string `yaml:"global-client-fingerprint" json:"global-client-fingerprint"` - GlobalUA string `yaml:"global-ua" json:"global-ua"` - ETagSupport bool `yaml:"etag-support" json:"etag-support"` - KeepAliveIdle int `yaml:"keep-alive-idle" json:"keep-alive-idle"` - KeepAliveInterval int `yaml:"keep-alive-interval" json:"keep-alive-interval"` - DisableKeepAlive bool `yaml:"disable-keep-alive" json:"disable-keep-alive"` + Port int `yaml:"port" json:"port"` + SocksPort int `yaml:"socks-port" json:"socks-port"` + RedirPort int `yaml:"redir-port" json:"redir-port"` + TProxyPort int `yaml:"tproxy-port" json:"tproxy-port"` + MixedPort int `yaml:"mixed-port" json:"mixed-port"` + ShadowSocksConfig string `yaml:"ss-config" json:"ss-config"` + VmessConfig string `yaml:"vmess-config" json:"vmess-config"` + InboundTfo bool `yaml:"inbound-tfo" json:"inbound-tfo"` + InboundMPTCP bool `yaml:"inbound-mptcp" json:"inbound-mptcp"` + Authentication []string `yaml:"authentication" json:"authentication"` + SkipAuthPrefixes []netip.Prefix `yaml:"skip-auth-prefixes" json:"skip-auth-prefixes"` + LanAllowedIPs []netip.Prefix `yaml:"lan-allowed-ips" json:"lan-allowed-ips"` + LanDisAllowedIPs []netip.Prefix `yaml:"lan-disallowed-ips" json:"lan-disallowed-ips"` + AllowLan bool `yaml:"allow-lan" json:"allow-lan"` + BindAddress string `yaml:"bind-address" json:"bind-address"` + Mode T.TunnelMode `yaml:"mode" json:"mode"` + UnifiedDelay bool `yaml:"unified-delay" json:"unified-delay"` + LogLevel log.LogLevel `yaml:"log-level" json:"log-level"` + IPv6 bool `yaml:"ipv6" json:"ipv6"` + ExternalController string `yaml:"external-controller" json:"external-controller"` + ExternalControllerPipe string `yaml:"external-controller-pipe" json:"external-controller-pipe"` + ExternalControllerUnix string `yaml:"external-controller-unix" json:"external-controller-unix"` + ExternalControllerTLS string `yaml:"external-controller-tls" json:"external-controller-tls"` + ExternalControllerCors RawCors `yaml:"external-controller-cors" json:"external-controller-cors"` + ExternalUI string `yaml:"external-ui" json:"external-ui"` + ExternalUIURL string `yaml:"external-ui-url" json:"external-ui-url"` + ExternalUIName string `yaml:"external-ui-name" json:"external-ui-name"` + ExternalDohServer string `yaml:"external-doh-server" json:"external-doh-server"` + Secret string `yaml:"secret" json:"secret"` + Interface string `yaml:"interface-name" json:"interface-name"` + RoutingMark int `yaml:"routing-mark" json:"routing-mark"` + Tunnels []LC.Tunnel `yaml:"tunnels" json:"tunnels"` + GeoAutoUpdate bool `yaml:"geo-auto-update" json:"geo-auto-update"` + GeoUpdateInterval int `yaml:"geo-update-interval" json:"geo-update-interval"` + GeodataMode bool `yaml:"geodata-mode" json:"geodata-mode"` + GeodataLoader string `yaml:"geodata-loader" json:"geodata-loader"` + GeositeMatcher string `yaml:"geosite-matcher" json:"geosite-matcher"` + TCPConcurrent bool `yaml:"tcp-concurrent" json:"tcp-concurrent"` + FindProcessMode process.FindProcessMode `yaml:"find-process-mode" json:"find-process-mode"` + GlobalClientFingerprint string `yaml:"global-client-fingerprint" json:"global-client-fingerprint"` + GlobalUA string `yaml:"global-ua" json:"global-ua"` + ETagSupport bool `yaml:"etag-support" json:"etag-support"` + KeepAliveIdle int `yaml:"keep-alive-idle" json:"keep-alive-idle"` + KeepAliveInterval int `yaml:"keep-alive-interval" json:"keep-alive-interval"` + DisableKeepAlive bool `yaml:"disable-keep-alive" json:"disable-keep-alive"` ProxyProvider map[string]map[string]any `yaml:"proxy-providers" json:"proxy-providers"` RuleProvider map[string]map[string]any `yaml:"rule-providers" json:"rule-providers"` @@ -479,7 +479,7 @@ func DefaultRawConfig() *RawConfig { Proxy: []map[string]any{}, ProxyGroup: []map[string]any{}, TCPConcurrent: false, - FindProcessMode: P.FindProcessStrict, + FindProcessMode: process.FindProcessStrict, GlobalUA: "clash.meta/" + C.Version, ETagSupport: true, DNS: RawDNS{ @@ -653,11 +653,11 @@ func ParseRawConfig(rawCfg *RawConfig) (*Config, error) { config.Proxies = proxies config.Providers = providers - listener, err := parseListeners(rawCfg) + listeners, err := parseListeners(rawCfg) if err != nil { return nil, err } - config.Listeners = listener + config.Listeners = listeners log.Infoln("Geodata Loader mode: %s", geodata.LoaderName()) log.Infoln("Geosite Matcher implementation: %s", geodata.SiteMatcherName()) @@ -845,9 +845,9 @@ func parseTLS(cfg *RawConfig) (*TLS, error) { }, nil } -func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[string]providerTypes.ProxyProvider, err error) { +func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[string]P.ProxyProvider, err error) { proxies = make(map[string]C.Proxy) - providersMap = make(map[string]providerTypes.ProxyProvider) + providersMap = make(map[string]P.ProxyProvider) proxiesConfig := cfg.Proxy groupsConfig := cfg.ProxyGroup providersConfig := cfg.ProxyProvider @@ -947,7 +947,7 @@ func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[ &outboundgroup.GroupCommonOption{ Name: "GLOBAL", }, - []providerTypes.ProxyProvider{pd}, + []P.ProxyProvider{pd}, ) proxies["GLOBAL"] = adapter.NewProxy(global) } @@ -957,24 +957,25 @@ func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[ func parseListeners(cfg *RawConfig) (listeners map[string]C.InboundListener, err error) { listeners = make(map[string]C.InboundListener) for index, mapping := range cfg.Listeners { - listener, err := L.ParseListener(mapping) + inboundListener, err := listener.ParseListener(mapping) if err != nil { return nil, fmt.Errorf("proxy %d: %w", index, err) } - if _, exist := mapping[listener.Name()]; exist { - return nil, fmt.Errorf("listener %s is the duplicate name", listener.Name()) + name := inboundListener.Name() + if _, exist := mapping[name]; exist { + return nil, fmt.Errorf("listener %s is the duplicate name", name) } - listeners[listener.Name()] = listener + listeners[name] = inboundListener } return } -func parseRuleProviders(cfg *RawConfig) (ruleProviders map[string]providerTypes.RuleProvider, err error) { +func parseRuleProviders(cfg *RawConfig) (ruleProviders map[string]P.RuleProvider, err error) { RP.SetTunnel(T.Tunnel) - ruleProviders = map[string]providerTypes.RuleProvider{} + ruleProviders = map[string]P.RuleProvider{} // parse rule provider for name, mapping := range cfg.RuleProvider { rp, err := RP.ParseRuleProvider(name, mapping, R.ParseRule) @@ -987,7 +988,7 @@ func parseRuleProviders(cfg *RawConfig) (ruleProviders map[string]providerTypes. return } -func parseSubRules(cfg *RawConfig, proxies map[string]C.Proxy, ruleProviders map[string]providerTypes.RuleProvider) (subRules map[string][]C.Rule, err error) { +func parseSubRules(cfg *RawConfig, proxies map[string]C.Proxy, ruleProviders map[string]P.RuleProvider) (subRules map[string][]C.Rule, err error) { subRules = map[string][]C.Rule{} for name := range cfg.SubRules { subRules[name] = make([]C.Rule, 0) @@ -1050,7 +1051,7 @@ func verifySubRuleCircularReferences(n string, subRules map[string][]C.Rule, arr return nil } -func parseRules(rulesConfig []string, proxies map[string]C.Proxy, ruleProviders map[string]providerTypes.RuleProvider, subRules map[string][]C.Rule, format string) ([]C.Rule, error) { +func parseRules(rulesConfig []string, proxies map[string]C.Proxy, ruleProviders map[string]P.RuleProvider, subRules map[string][]C.Rule, format string) ([]C.Rule, error) { var rules []C.Rule // parse rules @@ -1273,7 +1274,7 @@ func parsePureDNSServer(server string) string { } } -func parseNameServerPolicy(nsPolicy *orderedmap.OrderedMap[string, any], ruleProviders map[string]providerTypes.RuleProvider, respectRules bool, preferH3 bool) ([]dns.Policy, error) { +func parseNameServerPolicy(nsPolicy *orderedmap.OrderedMap[string, any], ruleProviders map[string]P.RuleProvider, respectRules bool, preferH3 bool) ([]dns.Policy, error) { var policy []dns.Policy for pair := nsPolicy.Oldest(); pair != nil; pair = pair.Next() { @@ -1348,7 +1349,7 @@ func parseNameServerPolicy(nsPolicy *orderedmap.OrderedMap[string, any], rulePro return policy, nil } -func parseDNS(rawCfg *RawConfig, ruleProviders map[string]providerTypes.RuleProvider) (*DNS, error) { +func parseDNS(rawCfg *RawConfig, ruleProviders map[string]P.RuleProvider) (*DNS, error) { cfg := rawCfg.DNS if cfg.Enable && len(cfg.NameServer) == 0 { return nil, fmt.Errorf("if DNS configuration is turned on, NameServer cannot be empty") @@ -1632,7 +1633,7 @@ func parseTuicServer(rawTuic RawTuicServer, general *General) error { return nil } -func parseSniffer(snifferRaw RawSniffer, ruleProviders map[string]providerTypes.RuleProvider) (*sniffer.Config, error) { +func parseSniffer(snifferRaw RawSniffer, ruleProviders map[string]P.RuleProvider) (*sniffer.Config, error) { snifferConfig := &sniffer.Config{ Enable: snifferRaw.Enable, ForceDnsMapping: snifferRaw.ForceDnsMapping, @@ -1722,7 +1723,7 @@ func parseSniffer(snifferRaw RawSniffer, ruleProviders map[string]providerTypes. return snifferConfig, nil } -func parseIPCIDR(addresses []string, cidrSet *cidr.IpCidrSet, adapterName string, ruleProviders map[string]providerTypes.RuleProvider) (matchers []C.IpMatcher, err error) { +func parseIPCIDR(addresses []string, cidrSet *cidr.IpCidrSet, adapterName string, ruleProviders map[string]P.RuleProvider) (matchers []C.IpMatcher, err error) { var matcher C.IpMatcher for _, ipcidr := range addresses { ipcidrLower := strings.ToLower(ipcidr) @@ -1769,7 +1770,7 @@ func parseIPCIDR(addresses []string, cidrSet *cidr.IpCidrSet, adapterName string return } -func parseDomain(domains []string, domainTrie *trie.DomainTrie[struct{}], adapterName string, ruleProviders map[string]providerTypes.RuleProvider) (matchers []C.DomainMatcher, err error) { +func parseDomain(domains []string, domainTrie *trie.DomainTrie[struct{}], adapterName string, ruleProviders map[string]P.RuleProvider) (matchers []C.DomainMatcher, err error) { var matcher C.DomainMatcher for _, domain := range domains { domainLower := strings.ToLower(domain) @@ -1812,14 +1813,14 @@ func parseDomain(domains []string, domainTrie *trie.DomainTrie[struct{}], adapte return } -func parseIPRuleSet(domainSetName string, adapterName string, ruleProviders map[string]providerTypes.RuleProvider) (C.IpMatcher, error) { +func parseIPRuleSet(domainSetName string, adapterName string, ruleProviders map[string]P.RuleProvider) (C.IpMatcher, error) { if rp, ok := ruleProviders[domainSetName]; !ok { return nil, fmt.Errorf("not found rule-set: %s", domainSetName) } else { switch rp.Behavior() { - case providerTypes.Domain: + case P.Domain: return nil, fmt.Errorf("rule provider type error, except ipcidr,actual %s", rp.Behavior()) - case providerTypes.Classical: + case P.Classical: log.Warnln("%s provider is %s, only matching it contain ip rule", rp.Name(), rp.Behavior()) default: } @@ -1827,14 +1828,14 @@ func parseIPRuleSet(domainSetName string, adapterName string, ruleProviders map[ return RP.NewRuleSet(domainSetName, adapterName, false, true) } -func parseDomainRuleSet(domainSetName string, adapterName string, ruleProviders map[string]providerTypes.RuleProvider) (C.DomainMatcher, error) { +func parseDomainRuleSet(domainSetName string, adapterName string, ruleProviders map[string]P.RuleProvider) (C.DomainMatcher, error) { if rp, ok := ruleProviders[domainSetName]; !ok { return nil, fmt.Errorf("not found rule-set: %s", domainSetName) } else { switch rp.Behavior() { - case providerTypes.IPCIDR: + case P.IPCIDR: return nil, fmt.Errorf("rule provider type error, except domain,actual %s", rp.Behavior()) - case providerTypes.Classical: + case P.Classical: log.Warnln("%s provider is %s, only matching it contain domain rule", rp.Name(), rp.Behavior()) default: } diff --git a/clash-meta/hub/executor/executor.go b/clash-meta/hub/executor/executor.go index 6650176460..e92a8de448 100644 --- a/clash-meta/hub/executor/executor.go +++ b/clash-meta/hub/executor/executor.go @@ -31,7 +31,7 @@ import ( "github.com/metacubex/mihomo/component/updater" "github.com/metacubex/mihomo/config" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/dns" "github.com/metacubex/mihomo/listener" authStore "github.com/metacubex/mihomo/listener/auth" @@ -303,18 +303,18 @@ func updateHosts(tree *trie.DomainTrie[resolver.HostValue]) { resolver.DefaultHosts = resolver.NewHosts(tree) } -func updateProxies(proxies map[string]C.Proxy, providers map[string]provider.ProxyProvider) { +func updateProxies(proxies map[string]C.Proxy, providers map[string]P.ProxyProvider) { tunnel.UpdateProxies(proxies, providers) } -func updateRules(rules []C.Rule, subRules map[string][]C.Rule, ruleProviders map[string]provider.RuleProvider) { +func updateRules(rules []C.Rule, subRules map[string][]C.Rule, ruleProviders map[string]P.RuleProvider) { tunnel.UpdateRules(rules, subRules, ruleProviders) } -func loadProvider[P provider.Provider](providers map[string]P) { - load := func(pv P) { +func loadProvider[T P.Provider](providers map[string]T) { + load := func(pv T) { name := pv.Name() - if pv.VehicleType() == provider.Compatible { + if pv.VehicleType() == P.Compatible { log.Infoln("Start initial compatible provider %s", name) } else { log.Infoln("Start initial provider %s", name) @@ -322,11 +322,11 @@ func loadProvider[P provider.Provider](providers map[string]P) { if err := pv.Initial(); err != nil { switch pv.Type() { - case provider.Proxy: + case P.Proxy: { log.Errorln("initial proxy provider %s error: %v", name, err) } - case provider.Rule: + case P.Rule: { log.Errorln("initial rule provider %s error: %v", name, err) } diff --git a/clash-meta/hub/route/configs.go b/clash-meta/hub/route/configs.go index 92253c3f72..141a6c1559 100644 --- a/clash-meta/hub/route/configs.go +++ b/clash-meta/hub/route/configs.go @@ -13,7 +13,7 @@ import ( "github.com/metacubex/mihomo/config" C "github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/hub/executor" - P "github.com/metacubex/mihomo/listener" + "github.com/metacubex/mihomo/listener" LC "github.com/metacubex/mihomo/listener/config" "github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/tunnel" @@ -306,7 +306,7 @@ func patchConfigs(w http.ResponseWriter, r *http.Request) { } if general.AllowLan != nil { - P.SetAllowLan(*general.AllowLan) + listener.SetAllowLan(*general.AllowLan) } if general.SkipAuthPrefixes != nil { @@ -322,7 +322,7 @@ func patchConfigs(w http.ResponseWriter, r *http.Request) { } if general.BindAddress != nil { - P.SetBindAddress(*general.BindAddress) + listener.SetBindAddress(*general.BindAddress) } if general.Sniffing != nil { @@ -337,17 +337,17 @@ func patchConfigs(w http.ResponseWriter, r *http.Request) { dialer.DefaultInterface.Store(*general.InterfaceName) } - ports := P.GetPorts() + ports := listener.GetPorts() - P.ReCreateHTTP(pointerOrDefault(general.Port, ports.Port), tunnel.Tunnel) - P.ReCreateSocks(pointerOrDefault(general.SocksPort, ports.SocksPort), tunnel.Tunnel) - P.ReCreateRedir(pointerOrDefault(general.RedirPort, ports.RedirPort), tunnel.Tunnel) - P.ReCreateTProxy(pointerOrDefault(general.TProxyPort, ports.TProxyPort), tunnel.Tunnel) - P.ReCreateMixed(pointerOrDefault(general.MixedPort, ports.MixedPort), tunnel.Tunnel) - P.ReCreateTun(pointerOrDefaultTun(general.Tun, P.LastTunConf), tunnel.Tunnel) - P.ReCreateShadowSocks(pointerOrDefault(general.ShadowSocksConfig, ports.ShadowSocksConfig), tunnel.Tunnel) - P.ReCreateVmess(pointerOrDefault(general.VmessConfig, ports.VmessConfig), tunnel.Tunnel) - P.ReCreateTuic(pointerOrDefaultTuicServer(general.TuicServer, P.LastTuicConf), tunnel.Tunnel) + listener.ReCreateHTTP(pointerOrDefault(general.Port, ports.Port), tunnel.Tunnel) + listener.ReCreateSocks(pointerOrDefault(general.SocksPort, ports.SocksPort), tunnel.Tunnel) + listener.ReCreateRedir(pointerOrDefault(general.RedirPort, ports.RedirPort), tunnel.Tunnel) + listener.ReCreateTProxy(pointerOrDefault(general.TProxyPort, ports.TProxyPort), tunnel.Tunnel) + listener.ReCreateMixed(pointerOrDefault(general.MixedPort, ports.MixedPort), tunnel.Tunnel) + listener.ReCreateTun(pointerOrDefaultTun(general.Tun, listener.LastTunConf), tunnel.Tunnel) + listener.ReCreateShadowSocks(pointerOrDefault(general.ShadowSocksConfig, ports.ShadowSocksConfig), tunnel.Tunnel) + listener.ReCreateVmess(pointerOrDefault(general.VmessConfig, ports.VmessConfig), tunnel.Tunnel) + listener.ReCreateTuic(pointerOrDefaultTuicServer(general.TuicServer, listener.LastTuicConf), tunnel.Tunnel) if general.Mode != nil { tunnel.SetMode(*general.Mode) diff --git a/clash-meta/hub/route/provider.go b/clash-meta/hub/route/provider.go index a8611a7948..24b1989ed1 100644 --- a/clash-meta/hub/route/provider.go +++ b/clash-meta/hub/route/provider.go @@ -5,7 +5,7 @@ import ( "net/http" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/tunnel" "github.com/go-chi/chi/v5" @@ -45,12 +45,12 @@ func getProviders(w http.ResponseWriter, r *http.Request) { } func getProvider(w http.ResponseWriter, r *http.Request) { - provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider) + provider := r.Context().Value(CtxKeyProvider).(P.ProxyProvider) render.JSON(w, r, provider) } func updateProvider(w http.ResponseWriter, r *http.Request) { - provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider) + provider := r.Context().Value(CtxKeyProvider).(P.ProxyProvider) if err := provider.Update(); err != nil { render.Status(r, http.StatusServiceUnavailable) render.JSON(w, r, newError(err.Error())) @@ -60,7 +60,7 @@ func updateProvider(w http.ResponseWriter, r *http.Request) { } func healthCheckProvider(w http.ResponseWriter, r *http.Request) { - provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider) + provider := r.Context().Value(CtxKeyProvider).(P.ProxyProvider) provider.HealthCheck() render.NoContent(w, r) } @@ -93,7 +93,7 @@ func findProviderProxyByName(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var ( name = r.Context().Value(CtxKeyProxyName).(string) - pd = r.Context().Value(CtxKeyProvider).(provider.ProxyProvider) + pd = r.Context().Value(CtxKeyProvider).(P.ProxyProvider) ) proxy, exist := lo.Find(pd.Proxies(), func(proxy C.Proxy) bool { return proxy.Name() == name @@ -128,7 +128,7 @@ func getRuleProviders(w http.ResponseWriter, r *http.Request) { } func updateRuleProvider(w http.ResponseWriter, r *http.Request) { - provider := r.Context().Value(CtxKeyProvider).(provider.RuleProvider) + provider := r.Context().Value(CtxKeyProvider).(P.RuleProvider) if err := provider.Update(); err != nil { render.Status(r, http.StatusServiceUnavailable) render.JSON(w, r, newError(err.Error())) diff --git a/clash-meta/listener/sing_tun/server.go b/clash-meta/listener/sing_tun/server.go index ccd12f42db..87f413d431 100644 --- a/clash-meta/listener/sing_tun/server.go +++ b/clash-meta/listener/sing_tun/server.go @@ -18,7 +18,7 @@ import ( "github.com/metacubex/mihomo/component/iface" "github.com/metacubex/mihomo/component/resolver" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" LC "github.com/metacubex/mihomo/listener/config" "github.com/metacubex/mihomo/listener/sing" "github.com/metacubex/mihomo/log" @@ -133,7 +133,7 @@ func New(options LC.Tun, tunnel C.Tunnel, additions ...inbound.Addition) (l *Lis } } ctx := context.TODO() - rpTunnel := tunnel.(provider.Tunnel) + rpTunnel := tunnel.(P.Tunnel) if options.GSOMaxSize == 0 { options.GSOMaxSize = 65536 } @@ -504,7 +504,7 @@ func New(options LC.Tun, tunnel C.Tunnel, additions ...inbound.Addition) (l *Lis return } -func (l *Listener) ruleUpdateCallback(ruleProvider provider.RuleProvider) { +func (l *Listener) ruleUpdateCallback(ruleProvider P.RuleProvider) { name := ruleProvider.Name() if slices.Contains(l.options.RouteAddressSet, name) { l.updateRule(ruleProvider, false, true) @@ -520,7 +520,7 @@ type toIpCidr interface { ToIpCidr() *netipx.IPSet } -func (l *Listener) updateRule(ruleProvider provider.RuleProvider, exclude bool, update bool) { +func (l *Listener) updateRule(ruleProvider P.RuleProvider, exclude bool, update bool) { l.ruleUpdateMutex.Lock() defer l.ruleUpdateMutex.Unlock() name := ruleProvider.Name() diff --git a/clash-meta/tunnel/tunnel.go b/clash-meta/tunnel/tunnel.go index 4ad6e736ae..fc901eb354 100644 --- a/clash-meta/tunnel/tunnel.go +++ b/clash-meta/tunnel/tunnel.go @@ -17,13 +17,13 @@ import ( "github.com/metacubex/mihomo/common/utils" "github.com/metacubex/mihomo/component/loopback" "github.com/metacubex/mihomo/component/nat" - P "github.com/metacubex/mihomo/component/process" + "github.com/metacubex/mihomo/component/process" "github.com/metacubex/mihomo/component/resolver" "github.com/metacubex/mihomo/component/slowdown" "github.com/metacubex/mihomo/component/sniffer" C "github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/constant/features" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" icontext "github.com/metacubex/mihomo/context" "github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/tunnel/statistic" @@ -43,8 +43,8 @@ var ( listeners = make(map[string]C.InboundListener) subRules map[string][]C.Rule proxies = make(map[string]C.Proxy) - providers map[string]provider.ProxyProvider - ruleProviders map[string]provider.RuleProvider + providers map[string]P.ProxyProvider + ruleProviders map[string]P.RuleProvider configMux sync.RWMutex // for compatibility, lazy init @@ -59,19 +59,19 @@ var ( // default timeout for UDP session udpTimeout = 60 * time.Second - findProcessMode = atomic.NewInt32Enum(P.FindProcessStrict) + findProcessMode = atomic.NewInt32Enum(process.FindProcessStrict) snifferDispatcher *sniffer.Dispatcher sniffingEnable = false - ruleUpdateCallback = utils.NewCallback[provider.RuleProvider]() + ruleUpdateCallback = utils.NewCallback[P.RuleProvider]() ) type tunnel struct{} var Tunnel = tunnel{} var _ C.Tunnel = Tunnel -var _ provider.Tunnel = Tunnel +var _ P.Tunnel = Tunnel func (t tunnel) HandleTCPConn(conn net.Conn, metadata *C.Metadata) { connCtx := icontext.NewConnContext(conn, metadata) @@ -112,15 +112,15 @@ func (t tunnel) NatTable() C.NatTable { return natTable } -func (t tunnel) Providers() map[string]provider.ProxyProvider { +func (t tunnel) Providers() map[string]P.ProxyProvider { return providers } -func (t tunnel) RuleProviders() map[string]provider.RuleProvider { +func (t tunnel) RuleProviders() map[string]P.RuleProvider { return ruleProviders } -func (t tunnel) RuleUpdateCallback() *utils.Callback[provider.RuleProvider] { +func (t tunnel) RuleUpdateCallback() *utils.Callback[P.RuleProvider] { return ruleUpdateCallback } @@ -195,7 +195,7 @@ func Listeners() map[string]C.InboundListener { } // UpdateRules handle update rules -func UpdateRules(newRules []C.Rule, newSubRule map[string][]C.Rule, rp map[string]provider.RuleProvider) { +func UpdateRules(newRules []C.Rule, newSubRule map[string][]C.Rule, rp map[string]P.RuleProvider) { configMux.Lock() rules = newRules ruleProviders = rp @@ -223,17 +223,17 @@ func ProxiesWithProviders() map[string]C.Proxy { } // Providers return all compatible providers -func Providers() map[string]provider.ProxyProvider { +func Providers() map[string]P.ProxyProvider { return providers } // RuleProviders return all loaded rule providers -func RuleProviders() map[string]provider.RuleProvider { +func RuleProviders() map[string]P.RuleProvider { return ruleProviders } // UpdateProxies handle update proxies -func UpdateProxies(newProxies map[string]C.Proxy, newProviders map[string]provider.ProxyProvider) { +func UpdateProxies(newProxies map[string]C.Proxy, newProviders map[string]P.ProxyProvider) { configMux.Lock() proxies = newProxies providers = newProviders @@ -263,13 +263,13 @@ func SetMode(m TunnelMode) { mode = m } -func FindProcessMode() P.FindProcessMode { +func FindProcessMode() process.FindProcessMode { return findProcessMode.Load() } // SetFindProcessMode replace SetAlwaysFindProcess // always find process info if legacyAlways = true or mode.Always() = true, may be increase many memory -func SetFindProcessMode(mode P.FindProcessMode) { +func SetFindProcessMode(mode process.FindProcessMode) { findProcessMode.Store(mode) } @@ -358,7 +358,7 @@ func resolveMetadata(metadata *C.Metadata) (proxy C.Proxy, rule C.Rule, err erro attemptProcessLookup = false if !features.CMFA { // normal check for process - uid, path, err := P.FindProcessName(metadata.NetWork.String(), metadata.SrcIP, int(metadata.SrcPort)) + uid, path, err := process.FindProcessName(metadata.NetWork.String(), metadata.SrcIP, int(metadata.SrcPort)) if err != nil { log.Debugln("[Process] find process error for %s: %v", metadata.String(), err) } else { @@ -366,13 +366,13 @@ func resolveMetadata(metadata *C.Metadata) (proxy C.Proxy, rule C.Rule, err erro metadata.ProcessPath = path metadata.Uid = uid - if pkg, err := P.FindPackageName(metadata); err == nil { // for android (not CMFA) package names + if pkg, err := process.FindPackageName(metadata); err == nil { // for android (not CMFA) package names metadata.Process = pkg } } } else { // check package names - pkg, err := P.FindPackageName(metadata) + pkg, err := process.FindPackageName(metadata) if err != nil { log.Debugln("[Process] find process error for %s: %v", metadata.String(), err) } else { @@ -384,10 +384,10 @@ func resolveMetadata(metadata *C.Metadata) (proxy C.Proxy, rule C.Rule, err erro } switch FindProcessMode() { - case P.FindProcessAlways: + case process.FindProcessAlways: helper.FindProcess() helper.FindProcess = nil - case P.FindProcessOff: + case process.FindProcessOff: helper.FindProcess = nil } diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index 68fb1228e5..b047f3f477 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -365,7 +365,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -531,7 +531,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -566,7 +566,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -615,7 +615,7 @@ checksum = "99e1aca718ea7b89985790c94aad72d77533063fe00bc497bb79a7c2dae6a661" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -860,7 +860,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.108", + "syn 2.0.109", "which 4.4.2", ] @@ -1058,7 +1058,7 @@ checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "synstructure", ] @@ -1196,7 +1196,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -1488,7 +1488,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -1722,7 +1722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f76990911f2267d837d9d0ad060aa63aaad170af40904b29461734c339030d4d" dependencies = [ "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2003,7 +2003,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2013,7 +2013,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2054,7 +2054,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2065,7 +2065,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2156,7 +2156,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2177,7 +2177,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2187,7 +2187,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2200,7 +2200,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2355,7 +2355,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2387,7 +2387,7 @@ checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2685,7 +2685,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2706,7 +2706,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2777,7 +2777,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -2898,7 +2898,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -3055,7 +3055,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -3205,7 +3205,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -3511,7 +3511,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -3773,7 +3773,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -4302,7 +4302,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -4404,7 +4404,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -4421,7 +4421,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.9", - "syn 2.0.108", + "syn 2.0.109", "url", ] @@ -4519,7 +4519,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5122,7 +5122,7 @@ checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5632,7 +5632,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5694,7 +5694,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -5763,7 +5763,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6419,7 +6419,7 @@ checksum = "05bbaa5b6b98826bb62b164406f703bee72c5287af9986f9c863fa8ea992b476" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6461,7 +6461,7 @@ dependencies = [ "phf 0.13.1", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6721,7 +6721,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6869,7 +6869,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "unicase", ] @@ -6883,7 +6883,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -6946,7 +6946,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -7124,7 +7124,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -7210,7 +7210,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -7608,7 +7608,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -7817,7 +7817,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8025,7 +8025,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8169,7 +8169,7 @@ checksum = "d6185cf75117e20e62b1ff867b9518577271e58abe0037c40bb4794969355ab0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8180,7 +8180,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8215,7 +8215,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8277,7 +8277,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8325,7 +8325,7 @@ checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8717,7 +8717,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8841,7 +8841,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -8884,9 +8884,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.108" +version = "2.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" dependencies = [ "proc-macro2", "quote", @@ -8910,7 +8910,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -9032,7 +9032,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -9152,7 +9152,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.9", - "syn 2.0.108", + "syn 2.0.109", "tauri-utils", "thiserror 2.0.17", "time", @@ -9170,7 +9170,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "tauri-codegen", "tauri-utils", ] @@ -9476,7 +9476,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -9645,7 +9645,7 @@ checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -9691,7 +9691,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -9702,7 +9702,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -9859,7 +9859,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -10082,7 +10082,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -10174,7 +10174,7 @@ version = "0.2.5" source = "git+https://github.com/Frando/tracing-test.git?rev=e81ec65#e81ec655a5ec5c4351104628b1b1ba694f80a1dc" dependencies = [ "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -10680,7 +10680,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "wasm-bindgen-shared", ] @@ -10715,7 +10715,7 @@ checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10997,7 +10997,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -11414,7 +11414,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -11425,7 +11425,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -11436,7 +11436,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -11447,7 +11447,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -12229,7 +12229,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "synstructure", ] @@ -12241,7 +12241,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "synstructure", ] @@ -12297,7 +12297,7 @@ checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "zbus-lockstep", "zbus_xml", "zvariant", @@ -12312,7 +12312,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "zbus_names", "zvariant", "zvariant_utils", @@ -12360,7 +12360,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -12380,7 +12380,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "synstructure", ] @@ -12401,7 +12401,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -12445,7 +12445,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -12456,7 +12456,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", ] [[package]] @@ -12601,7 +12601,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.109", "zvariant_utils", ] @@ -12614,6 +12614,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.108", + "syn 2.0.109", "winnow 0.7.13", ] diff --git a/clash-nyanpasu/frontend/interface/package.json b/clash-nyanpasu/frontend/interface/package.json index 6ee051f86f..3f209f7985 100644 --- a/clash-nyanpasu/frontend/interface/package.json +++ b/clash-nyanpasu/frontend/interface/package.json @@ -11,7 +11,7 @@ "build": "tsc" }, "dependencies": { - "@tanstack/react-query": "5.90.6", + "@tanstack/react-query": "5.90.7", "@tauri-apps/api": "2.8.0", "ahooks": "3.9.6", "dayjs": "1.11.19", diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index 1b0299f3e5..7db306c2e6 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -56,9 +56,9 @@ "@csstools/normalize.css": "12.1.1", "@emotion/babel-plugin": "11.13.5", "@emotion/react": "11.14.0", - "@iconify/json": "2.2.403", + "@iconify/json": "2.2.404", "@monaco-editor/react": "4.7.0", - "@tanstack/react-query": "5.90.6", + "@tanstack/react-query": "5.90.7", "@tanstack/react-router": "1.134.12", "@tanstack/react-router-devtools": "1.134.12", "@tanstack/router-plugin": "1.134.12", diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index 8aeb1f0f02..af7e8a2bae 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -2,7 +2,7 @@ "manifest_version": 1, "latest": { "mihomo": "v1.19.15", - "mihomo_alpha": "alpha-5a285ac", + "mihomo_alpha": "alpha-8b32c43", "clash_rs": "v0.9.2", "clash_premium": "2023-09-05-gdcc8d87", "clash_rs_alpha": "0.9.2-alpha+sha.b24d5a9" @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2025-11-04T22:21:06.320Z" + "updated_at": "2025-11-05T22:21:12.319Z" } diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 90b5d77819..ad9f456e16 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -179,8 +179,8 @@ importers: frontend/interface: dependencies: '@tanstack/react-query': - specifier: 5.90.6 - version: 5.90.6(react@19.2.0) + specifier: 5.90.7 + version: 5.90.7(react@19.2.0) '@tauri-apps/api': specifier: 2.8.0 version: 2.8.0 @@ -346,14 +346,14 @@ importers: specifier: 11.14.0 version: 11.14.0(@types/react@19.2.2)(react@19.2.0) '@iconify/json': - specifier: 2.2.403 - version: 2.2.403 + specifier: 2.2.404 + version: 2.2.404 '@monaco-editor/react': specifier: 4.7.0 version: 4.7.0(monaco-editor@0.54.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-query': - specifier: 5.90.6 - version: 5.90.6(react@19.2.0) + specifier: 5.90.7 + version: 5.90.7(react@19.2.0) '@tanstack/react-router': specifier: 1.134.12 version: 1.134.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -1821,8 +1821,8 @@ packages: prettier-plugin-ember-template-tag: optional: true - '@iconify/json@2.2.403': - resolution: {integrity: sha512-TU27b9pVsbYuTKF7i/OHAB5rUscWhe85AEk0vPkDT1MMqV7ZWWxUk5B7j03JHacX5NCtggB1KiCz985wjc7HVQ==} + '@iconify/json@2.2.404': + resolution: {integrity: sha512-K11bUBMW7gb/PhzJNZvDDJDq3hEVXoJArsdbr+9LQQqd2TrWEd5+PtctNcfJLu4epgjwDppaLJnN6AEPI1BL9w==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -3170,11 +3170,11 @@ packages: resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} engines: {node: '>=12'} - '@tanstack/query-core@5.90.6': - resolution: {integrity: sha512-AnZSLF26R8uX+tqb/ivdrwbVdGemdEDm1Q19qM6pry6eOZ6bEYiY7mWhzXT1YDIPTNEVcZ5kYP9nWjoxDLiIVw==} + '@tanstack/query-core@5.90.7': + resolution: {integrity: sha512-6PN65csiuTNfBMXqQUxQhCNdtm1rV+9kC9YwWAIKcaxAauq3Wu7p18j3gQY3YIBJU70jT/wzCCZ2uqto/vQgiQ==} - '@tanstack/react-query@5.90.6': - resolution: {integrity: sha512-gB1sljYjcobZKxjPbKSa31FUTyr+ROaBdoH+wSSs9Dk+yDCmMs+TkTV3PybRRVLC7ax7q0erJ9LvRWnMktnRAw==} + '@tanstack/react-query@5.90.7': + resolution: {integrity: sha512-wAHc/cgKzW7LZNFloThyHnV/AX9gTg3w5yAv0gvQHPZoCnepwqCMtzbuPbb2UvfvO32XZ46e8bPOYbfZhzVnnQ==} peerDependencies: react: ^18 || ^19 @@ -10349,7 +10349,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/json@2.2.403': + '@iconify/json@2.2.404': dependencies: '@iconify/types': 2.0.0 pathe: 2.0.3 @@ -11598,11 +11598,11 @@ snapshots: dependencies: remove-accents: 0.5.0 - '@tanstack/query-core@5.90.6': {} + '@tanstack/query-core@5.90.7': {} - '@tanstack/react-query@5.90.6(react@19.2.0)': + '@tanstack/react-query@5.90.7(react@19.2.0)': dependencies: - '@tanstack/query-core': 5.90.6 + '@tanstack/query-core': 5.90.7 react: 19.2.0 '@tanstack/react-router-devtools@1.134.12(@tanstack/react-router@1.134.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.134.12)(@types/node@24.10.0)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': diff --git a/clash-nyanpasu/scripts/publish.ts b/clash-nyanpasu/scripts/publish.ts index e804ec0e8d..314a6791a5 100644 --- a/clash-nyanpasu/scripts/publish.ts +++ b/clash-nyanpasu/scripts/publish.ts @@ -41,8 +41,8 @@ async function resolvePublish() { const nextVersion = `${a}.${b}.${c}` const nextNightlyVersion = `${a}.${b}.${c + 1}` packageJson.version = nextVersion - tauriJson.package.version = nextVersion - tauriNightlyJson.package.version = nextNightlyVersion + tauriJson.version = nextVersion + tauriNightlyJson.version = nextNightlyVersion // 发布更新前先写更新日志 // const nextTag = `v${nextVersion}`; diff --git a/lede/config/Config-images.in b/lede/config/Config-images.in index 66b1d3e4b3..6bad2340da 100644 --- a/lede/config/Config-images.in +++ b/lede/config/Config-images.in @@ -321,15 +321,14 @@ menu "Target Images" depends on USES_BOOT_PART default 8 if TARGET_apm821xx_sata default 128 if TARGET_armsr - default 64 if TARGET_bcm27xx + default 64 if TARGET_bcm27xx || TARGET_x86 || TARGET_loongarch64 default 32 if TARGET_rockchip default 16 config TARGET_ROOTFS_PARTSIZE int "Root filesystem partition size (in MiB)" depends on USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS - default 232 if TARGET_loongarch64 - default 448 if TARGET_mediatek || TARGET_x86 + default 448 if TARGET_mediatek || TARGET_x86 || TARGET_loongarch64 default 160 help Select the root filesystem partition size. diff --git a/lede/package/kernel/linux/modules/video.mk b/lede/package/kernel/linux/modules/video.mk index ab9a1a7e6a..6c061ff410 100644 --- a/lede/package/kernel/linux/modules/video.mk +++ b/lede/package/kernel/linux/modules/video.mk @@ -481,15 +481,14 @@ define KernelPackage/drm-amdgpu DEPENDS:=@TARGET_x86 @DISPLAY_SUPPORT +kmod-backlight +kmod-drm-ttm \ +kmod-drm-ttm-helper +kmod-drm-kms-helper +kmod-i2c-algo-bit +amdgpu-firmware \ +kmod-drm-display-helper +kmod-drm-buddy +kmod-acpi-video \ - +(LINUX_6_6||LINUX_6_12):kmod-drm-exec +(LINUX_6_6||LINUX_6_12):kmod-drm-suballoc-helper + +(LINUX_6_6||LINUX_6_12):kmod-drm-exec +(LINUX_6_6||LINUX_6_12):kmod-drm-suballoc-helper +kmod-drm-sched KCONFIG:=CONFIG_DRM_AMDGPU \ CONFIG_DRM_AMDGPU_SI=y \ CONFIG_DRM_AMDGPU_CIK=y \ CONFIG_DRM_AMD_DC=y \ CONFIG_DEBUG_KERNEL_DC=n FILES:=$(LINUX_DIR)/drivers/gpu/drm/amd/amdgpu/amdgpu.ko \ - $(LINUX_DIR)/drivers/gpu/drm/amd/amdxcp/amdxcp.ko@ge6.5 \ - $(LINUX_DIR)/drivers/gpu/drm/scheduler/gpu-sched.ko + $(LINUX_DIR)/drivers/gpu/drm/amd/amdxcp/amdxcp.ko@ge6.5 AUTOLOAD:=$(call AutoProbe,amdgpu) endef @@ -754,6 +753,31 @@ endef $(eval $(call KernelPackage,drm-nouveau)) + +define KernelPackage/drm-xe + SUBMENU:=$(VIDEO_MENU) + TITLE:=Intel Xe GPU drm support + DEPENDS:=@TARGET_x86 +kmod-drm-buddy +kmod-drm-ttm +kmod-drm-kms-helper +kmod-drm-i915 +i915-firmware \ + +kmod-drm-display-helper +kmod-acpi-video \ + +kmod-drm-exec +kmod-drm-suballoc-helper +kmod-drm-sched @LINUX_6_12 + KCONFIG:= \ + CONFIG_DRM_GPUVM \ + CONFIG_DRM_SCHED \ + CONFIG_DRM_XE + FILES:= \ + $(LINUX_DIR)/drivers/gpu/drm/drm_gpuvm.ko \ + $(LINUX_DIR)/drivers/gpu/drm/xe/xe.ko + AUTOLOAD:=$(call AutoProbe,gpu-sched drm_gpuvm xe) +endef + +define KernelPackage/drm-xe/description + The drm/xe driver supports some future GFX cards with rendering, display, + compute and media. Support for currently available platforms like TGL, ADL, + DG2, etc is provided to prototype the driver. +endef + +$(eval $(call KernelPackage,drm-xe)) + # # Video Capture # diff --git a/lede/package/lean/autocore/Makefile b/lede/package/lean/autocore/Makefile index 9bf0ced2b1..e3f6549457 100644 --- a/lede/package/lean/autocore/Makefile +++ b/lede/package/lean/autocore/Makefile @@ -22,6 +22,13 @@ define Package/autocore-arm VARIANT:=arm endef +define Package/autocore-loongarch64 + TITLE:=Loongarch64 auto core loadbalance script. + MAINTAINER:=LEAN + DEPENDS:=@loongarch64 +bc +ethtool +pciutils + VARIANT:=loongarch64 +endef + define Package/autocore-x86 TITLE:=x86/x64 auto core loadbalance script. MAINTAINER:=Lean @@ -33,6 +40,10 @@ define Package/autocore-arm/description A luci autoconfig hotplug script. endef +define Package/autocore-loongarch64/description + A luci autoconfig hotplug script. +endef + define Package/autocore-x86/description A usb autoconfig hotplug script. endef @@ -57,6 +68,19 @@ endif $(CP) ./files/luci-mod-status-autocore.json $(1)/usr/share/rpcd/acl.d/ endef +define Package/autocore-loongarch64/install + $(INSTALL_DIR) $(1)/etc + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/loongarch64/autocore $(1)/etc/init.d/autocore + $(INSTALL_BIN) ./files/60-autocore-reload-rpcd $(1)/etc/uci-defaults/ + $(INSTALL_DIR) $(1)/sbin + $(INSTALL_BIN) ./files/loongarch64/sbin/cpuinfo $(1)/sbin/cpuinfo + $(INSTALL_BIN) ./files/loongarch64/sbin/tempinfo $(1)/sbin/tempinfo + $(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d + $(CP) ./files/luci-mod-status-autocore.json $(1)/usr/share/rpcd/acl.d/ +endef + define Package/autocore-x86/install $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/x86/autocore $(1)/etc/init.d/autocore @@ -71,4 +95,5 @@ define Package/autocore-x86/install endef $(eval $(call BuildPackage,autocore-arm)) +$(eval $(call BuildPackage,autocore-loongarch64)) $(eval $(call BuildPackage,autocore-x86)) diff --git a/lede/package/lean/autocore/files/loongarch64/autocore b/lede/package/lean/autocore/files/loongarch64/autocore new file mode 100755 index 0000000000..158f1cec9d --- /dev/null +++ b/lede/package/lean/autocore/files/loongarch64/autocore @@ -0,0 +1,20 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2025 lean + +START=99 + +start() +{ + a=$(cat /proc/cpuinfo | grep 'Model Name' | cut -f2 -d: | head -n 1) + b=$(echo -n ' : ') + c=$(cat /proc/cpuinfo | grep 'core' | sort -u | wc -l) + d=$(echo -n 'C') + e=$(cat /proc/cpuinfo | grep 'global_id' | sort -u | wc -l) + f=$(echo -n 'T ') + g=$(cat /proc/cpuinfo | grep 'CPU Family' | cut -f2 -d: | head -n 1) + + h=${g}' - '${a}${b}${c}${d}${e}${f} + + mkdir -p /tmp/sysinfo + echo $h > /tmp/sysinfo/model +} diff --git a/lede/package/lean/autocore/files/loongarch64/sbin/cpuinfo b/lede/package/lean/autocore/files/loongarch64/sbin/cpuinfo new file mode 100755 index 0000000000..18ae8e39f3 --- /dev/null +++ b/lede/package/lean/autocore/files/loongarch64/sbin/cpuinfo @@ -0,0 +1,5 @@ +#!/bin/sh + +MHz=`grep 'MHz' /proc/cpuinfo | cut -c13- |sed -n '1p'` + +echo "$MHz MHz" diff --git a/lede/package/lean/autocore/files/loongarch64/sbin/ethinfo b/lede/package/lean/autocore/files/loongarch64/sbin/ethinfo new file mode 100644 index 0000000000..3472e68127 --- /dev/null +++ b/lede/package/lean/autocore/files/loongarch64/sbin/ethinfo @@ -0,0 +1,45 @@ +#!/usr/bin/lua +-- Copyright (C) 2022 ImmortalWrt.org + +local util = require "luci.util" +local jsonc = require "luci.jsonc" + +local eth_info = {} +local ifname, stat + +for ifname, stat in pairs(util.ubus("network.device", "status")) do + while true do + if (ifname:match("^(br-.+)$")) == ifname then + break + else + local status, speed, duplex + + if(stat.speed ~= nil) then + status = stat.carrier and 1 or 0 + + if stat.speed:sub(1, 1) == "-" then + speed = " - " + else + speed = stat.speed:sub(1, -2) .. "Mb/s" + end + + if stat.carrier and stat.speed:sub(-1) == "F" then + duplex = 1 + else + duplex = 0 + end + + eth_info[#eth_info+1] = { name = ifname, status = status, + speed = speed, duplex = duplex } + end + break + end + end +end + +table.sort(eth_info, + function(a, b) + return a.name < b.name + end) + +print(jsonc.stringify(eth_info)) diff --git a/lede/package/lean/autocore/files/loongarch64/sbin/tempinfo b/lede/package/lean/autocore/files/loongarch64/sbin/tempinfo new file mode 100755 index 0000000000..ee6e9ec22c --- /dev/null +++ b/lede/package/lean/autocore/files/loongarch64/sbin/tempinfo @@ -0,0 +1,5 @@ +#!/bin/sh + +TEMP=`awk '{printf("%.1f°C", $0 / 1000)}' "/sys/class/thermal/thermal_zone0/temp" 2>"/dev/null"` + +echo "$TEMP " diff --git a/lede/package/system/fstools/Makefile b/lede/package/system/fstools/Makefile index d1249a643b..cd3209f44a 100644 --- a/lede/package/system/fstools/Makefile +++ b/lede/package/system/fstools/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fstools -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/fstools.git diff --git a/lede/package/system/fstools/patches/0300-change-default-f2fs-overlay-size.patch b/lede/package/system/fstools/patches/0300-change-default-f2fs-overlay-size.patch new file mode 100644 index 0000000000..1e6e6e83eb --- /dev/null +++ b/lede/package/system/fstools/patches/0300-change-default-f2fs-overlay-size.patch @@ -0,0 +1,11 @@ +--- a/libfstools/common.h ++++ b/libfstools/common.h +@@ -19,7 +19,7 @@ + #include "libfstools.h" + #include "volume.h" + +-#define F2FS_MINSIZE (100ULL * 1024ULL * 1024ULL) ++#define F2FS_MINSIZE (1024ULL * 1024ULL * 1024ULL) + + int read_uint_from_file(char *dirname, char *filename, unsigned int *i); + char *read_string_from_file(const char *dirname, const char *filename, char *buf, size_t bufsz); diff --git a/lede/target/linux/loongarch64/Makefile b/lede/target/linux/loongarch64/Makefile index c128c61779..ad38868e1a 100644 --- a/lede/target/linux/loongarch64/Makefile +++ b/lede/target/linux/loongarch64/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk ARCH:=loongarch64 BOARD:=loongarch64 BOARDNAME:=Loongson LoongArch -FEATURES:=audio display ext4 pcie boot-part rootfs-part rtc usb targz +FEATURES:=squashfs audio display ext4 pcie boot-part rootfs-part rtc usb targz SUBTARGETS:=generic KERNEL_PATCHVER:=6.12 @@ -18,6 +18,7 @@ KERNELNAME:=vmlinuz.efi dtbs include $(INCLUDE_DIR)/target.mk DEFAULT_PACKAGES += \ - partx-utils blkid e2fsprogs grub2-efi-loongarch64 kmod-yt6801 + partx-utils blkid e2fsprogs grub2-efi-loongarch64 kmod-yt6801 \ + kmod-fs-ext4 kmod-fs-f2fs losetup mkf2fs f2fsck e2fsprogs autocore-loongarch64 $(eval $(call BuildTarget)) diff --git a/mihomo/adapter/outboundgroup/fallback.go b/mihomo/adapter/outboundgroup/fallback.go index 8f8842a1c4..3772107bc1 100644 --- a/mihomo/adapter/outboundgroup/fallback.go +++ b/mihomo/adapter/outboundgroup/fallback.go @@ -10,7 +10,7 @@ import ( N "github.com/metacubex/mihomo/common/net" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) type Fallback struct { @@ -150,7 +150,7 @@ func (f *Fallback) ForceSet(name string) { f.selected = name } -func NewFallback(option *GroupCommonOption, providers []provider.ProxyProvider) *Fallback { +func NewFallback(option *GroupCommonOption, providers []P.ProxyProvider) *Fallback { return &Fallback{ GroupBase: NewGroupBase(GroupBaseOption{ Name: option.Name, diff --git a/mihomo/adapter/outboundgroup/groupbase.go b/mihomo/adapter/outboundgroup/groupbase.go index dc66976bba..9e705677e4 100644 --- a/mihomo/adapter/outboundgroup/groupbase.go +++ b/mihomo/adapter/outboundgroup/groupbase.go @@ -12,8 +12,7 @@ import ( "github.com/metacubex/mihomo/common/atomic" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/tunnel" @@ -26,7 +25,7 @@ type GroupBase struct { filterRegs []*regexp2.Regexp excludeFilterRegs []*regexp2.Regexp excludeTypeArray []string - providers []provider.ProxyProvider + providers []P.ProxyProvider failedTestMux sync.Mutex failedTimes int failedTime time.Time @@ -48,7 +47,7 @@ type GroupBaseOption struct { ExcludeType string TestTimeout int MaxFailedTimes int - Providers []provider.ProxyProvider + Providers []P.ProxyProvider } func NewGroupBase(opt GroupBaseOption) *GroupBase { @@ -125,7 +124,7 @@ func (gb *GroupBase) GetProxies(touch bool) []C.Proxy { } } else { for _, pd := range gb.providers { - if pd.VehicleType() == types.Compatible { // compatible provider unneeded filter + if pd.VehicleType() == P.Compatible { // compatible provider unneeded filter proxies = append(proxies, pd.Proxies()...) continue } diff --git a/mihomo/adapter/outboundgroup/loadbalance.go b/mihomo/adapter/outboundgroup/loadbalance.go index 9f609fbba2..dff9b5ed9d 100644 --- a/mihomo/adapter/outboundgroup/loadbalance.go +++ b/mihomo/adapter/outboundgroup/loadbalance.go @@ -14,7 +14,7 @@ import ( N "github.com/metacubex/mihomo/common/net" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "golang.org/x/net/publicsuffix" ) @@ -239,7 +239,7 @@ func (lb *LoadBalance) MarshalJSON() ([]byte, error) { }) } -func NewLoadBalance(option *GroupCommonOption, providers []provider.ProxyProvider, strategy string) (lb *LoadBalance, err error) { +func NewLoadBalance(option *GroupCommonOption, providers []P.ProxyProvider, strategy string) (lb *LoadBalance, err error) { var strategyFn strategyFn switch strategy { case "consistent-hashing": diff --git a/mihomo/adapter/outboundgroup/parser.go b/mihomo/adapter/outboundgroup/parser.go index 9c09a0f4a2..2dcdd628b2 100644 --- a/mihomo/adapter/outboundgroup/parser.go +++ b/mihomo/adapter/outboundgroup/parser.go @@ -11,7 +11,7 @@ import ( "github.com/metacubex/mihomo/common/structure" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/log" ) @@ -48,7 +48,7 @@ type GroupCommonOption struct { RoutingMark int `group:"routing-mark,omitempty"` } -func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, providersMap map[string]types.ProxyProvider, AllProxies []string, AllProviders []string) (C.ProxyAdapter, error) { +func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, providersMap map[string]P.ProxyProvider, AllProxies []string, AllProviders []string) (C.ProxyAdapter, error) { decoder := structure.NewDecoder(structure.Option{TagName: "group", WeaklyTypedInput: true}) groupOption := &GroupCommonOption{ @@ -71,7 +71,7 @@ func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, provide groupName := groupOption.Name - providers := []types.ProxyProvider{} + providers := []P.ProxyProvider{} if groupOption.IncludeAll { groupOption.IncludeAllProviders = true @@ -169,7 +169,7 @@ func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, provide return nil, fmt.Errorf("%s: %w", groupName, err) } - providers = append([]types.ProxyProvider{pd}, providers...) + providers = append([]P.ProxyProvider{pd}, providers...) providersMap[groupName] = pd } @@ -206,15 +206,15 @@ func getProxies(mapping map[string]C.Proxy, list []string) ([]C.Proxy, error) { return ps, nil } -func getProviders(mapping map[string]types.ProxyProvider, list []string) ([]types.ProxyProvider, error) { - var ps []types.ProxyProvider +func getProviders(mapping map[string]P.ProxyProvider, list []string) ([]P.ProxyProvider, error) { + var ps []P.ProxyProvider for _, name := range list { p, ok := mapping[name] if !ok { return nil, fmt.Errorf("'%s' not found", name) } - if p.VehicleType() == types.Compatible { + if p.VehicleType() == P.Compatible { return nil, fmt.Errorf("proxy group %s can't contains in `use`", name) } ps = append(ps, p) @@ -222,7 +222,7 @@ func getProviders(mapping map[string]types.ProxyProvider, list []string) ([]type return ps, nil } -func addTestUrlToProviders(providers []types.ProxyProvider, url string, expectedStatus utils.IntRanges[uint16], filter string, interval uint) { +func addTestUrlToProviders(providers []P.ProxyProvider, url string, expectedStatus utils.IntRanges[uint16], filter string, interval uint) { if len(providers) == 0 || len(url) == 0 { return } diff --git a/mihomo/adapter/outboundgroup/patch_android.go b/mihomo/adapter/outboundgroup/patch_android.go index c6566814f8..016ed6067b 100644 --- a/mihomo/adapter/outboundgroup/patch_android.go +++ b/mihomo/adapter/outboundgroup/patch_android.go @@ -4,22 +4,22 @@ package outboundgroup import ( C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) type ProxyGroup interface { C.ProxyAdapter - Providers() []provider.ProxyProvider + Providers() []P.ProxyProvider Proxies() []C.Proxy Now() string } -func (f *Fallback) Providers() []provider.ProxyProvider { +func (f *Fallback) Providers() []P.ProxyProvider { return f.providers } -func (lb *LoadBalance) Providers() []provider.ProxyProvider { +func (lb *LoadBalance) Providers() []P.ProxyProvider { return lb.providers } @@ -35,7 +35,7 @@ func (lb *LoadBalance) Now() string { return "" } -func (r *Relay) Providers() []provider.ProxyProvider { +func (r *Relay) Providers() []P.ProxyProvider { return r.providers } @@ -47,7 +47,7 @@ func (r *Relay) Now() string { return "" } -func (s *Selector) Providers() []provider.ProxyProvider { +func (s *Selector) Providers() []P.ProxyProvider { return s.providers } @@ -55,7 +55,7 @@ func (s *Selector) Proxies() []C.Proxy { return s.GetProxies(false) } -func (u *URLTest) Providers() []provider.ProxyProvider { +func (u *URLTest) Providers() []P.ProxyProvider { return u.providers } diff --git a/mihomo/adapter/outboundgroup/relay.go b/mihomo/adapter/outboundgroup/relay.go index 77a2f03b8e..8e93d89837 100644 --- a/mihomo/adapter/outboundgroup/relay.go +++ b/mihomo/adapter/outboundgroup/relay.go @@ -8,7 +8,7 @@ import ( "github.com/metacubex/mihomo/component/dialer" "github.com/metacubex/mihomo/component/proxydialer" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/log" ) @@ -149,7 +149,7 @@ func (r *Relay) Addr() string { return proxies[len(proxies)-1].Addr() } -func NewRelay(option *GroupCommonOption, providers []provider.ProxyProvider) *Relay { +func NewRelay(option *GroupCommonOption, providers []P.ProxyProvider) *Relay { log.Warnln("The group [%s] with relay type is deprecated, please using dialer-proxy instead", option.Name) return &Relay{ GroupBase: NewGroupBase(GroupBaseOption{ diff --git a/mihomo/adapter/outboundgroup/selector.go b/mihomo/adapter/outboundgroup/selector.go index 03ee192c9e..f8975df744 100644 --- a/mihomo/adapter/outboundgroup/selector.go +++ b/mihomo/adapter/outboundgroup/selector.go @@ -6,7 +6,7 @@ import ( "errors" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) type Selector struct { @@ -108,7 +108,7 @@ func (s *Selector) selectedProxy(touch bool) C.Proxy { return proxies[0] } -func NewSelector(option *GroupCommonOption, providers []provider.ProxyProvider) *Selector { +func NewSelector(option *GroupCommonOption, providers []P.ProxyProvider) *Selector { return &Selector{ GroupBase: NewGroupBase(GroupBaseOption{ Name: option.Name, diff --git a/mihomo/adapter/outboundgroup/urltest.go b/mihomo/adapter/outboundgroup/urltest.go index 5dc620547e..2adb3b814e 100644 --- a/mihomo/adapter/outboundgroup/urltest.go +++ b/mihomo/adapter/outboundgroup/urltest.go @@ -11,7 +11,7 @@ import ( "github.com/metacubex/mihomo/common/singledo" "github.com/metacubex/mihomo/common/utils" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) type urlTestOption func(*URLTest) @@ -202,7 +202,7 @@ func parseURLTestOption(config map[string]any) []urlTestOption { return opts } -func NewURLTest(option *GroupCommonOption, providers []provider.ProxyProvider, options ...urlTestOption) *URLTest { +func NewURLTest(option *GroupCommonOption, providers []P.ProxyProvider, options ...urlTestOption) *URLTest { urlTest := &URLTest{ GroupBase: NewGroupBase(GroupBaseOption{ Name: option.Name, diff --git a/mihomo/adapter/provider/parser.go b/mihomo/adapter/provider/parser.go index 57dc6e24f6..d6297b5662 100644 --- a/mihomo/adapter/provider/parser.go +++ b/mihomo/adapter/provider/parser.go @@ -10,7 +10,7 @@ import ( "github.com/metacubex/mihomo/common/utils" "github.com/metacubex/mihomo/component/resource" C "github.com/metacubex/mihomo/constant" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/dlclark/regexp2" ) @@ -73,7 +73,7 @@ type proxyProviderSchema struct { Header map[string][]string `provider:"header,omitempty"` } -func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvider, error) { +func ParseProxyProvider(name string, mapping map[string]any) (P.ProxyProvider, error) { decoder := structure.NewDecoder(structure.Option{TagName: "provider", WeaklyTypedInput: true}) schema := &proxyProviderSchema{ @@ -104,7 +104,7 @@ func ParseProxyProvider(name string, mapping map[string]any) (types.ProxyProvide return nil, err } - var vehicle types.Vehicle + var vehicle P.Vehicle switch schema.Type { case "file": path := C.Path.Resolve(schema.Path) diff --git a/mihomo/adapter/provider/provider.go b/mihomo/adapter/provider/provider.go index 2f71b41bb1..e5d3b8acd5 100644 --- a/mihomo/adapter/provider/provider.go +++ b/mihomo/adapter/provider/provider.go @@ -16,7 +16,7 @@ import ( "github.com/metacubex/mihomo/component/profile/cachefile" "github.com/metacubex/mihomo/component/resource" C "github.com/metacubex/mihomo/constant" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/tunnel/statistic" "github.com/dlclark/regexp2" @@ -68,8 +68,8 @@ func (bp *baseProvider) HealthCheck() { bp.healthCheck.check() } -func (bp *baseProvider) Type() types.ProviderType { - return types.Proxy +func (bp *baseProvider) Type() P.ProviderType { + return P.Proxy } func (bp *baseProvider) Proxies() []C.Proxy { @@ -171,7 +171,7 @@ func (pp *proxySetProvider) Close() error { return pp.Fetcher.Close() } -func NewProxySetProvider(name string, interval time.Duration, payload []map[string]any, parser resource.Parser[[]C.Proxy], vehicle types.Vehicle, hc *HealthCheck) (*ProxySetProvider, error) { +func NewProxySetProvider(name string, interval time.Duration, payload []map[string]any, parser resource.Parser[[]C.Proxy], vehicle P.Vehicle, hc *HealthCheck) (*ProxySetProvider, error) { pd := &proxySetProvider{ baseProvider: baseProvider{ name: name, @@ -238,8 +238,8 @@ func (ip *inlineProvider) MarshalJSON() ([]byte, error) { }) } -func (ip *inlineProvider) VehicleType() types.VehicleType { - return types.Inline +func (ip *inlineProvider) VehicleType() P.VehicleType { + return P.Inline } func (ip *inlineProvider) Update() error { @@ -303,8 +303,8 @@ func (cp *compatibleProvider) Update() error { return nil } -func (cp *compatibleProvider) VehicleType() types.VehicleType { - return types.Compatible +func (cp *compatibleProvider) VehicleType() P.VehicleType { + return P.Compatible } func NewCompatibleProvider(name string, proxies []C.Proxy, hc *HealthCheck) (*CompatibleProvider, error) { diff --git a/mihomo/component/resource/fetcher.go b/mihomo/component/resource/fetcher.go index 24f24d47b9..a48e7bc82f 100644 --- a/mihomo/component/resource/fetcher.go +++ b/mihomo/component/resource/fetcher.go @@ -8,7 +8,7 @@ import ( "github.com/metacubex/mihomo/common/utils" "github.com/metacubex/mihomo/component/slowdown" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/log" "github.com/metacubex/fswatch" @@ -22,7 +22,7 @@ type Fetcher[V any] struct { ctxCancel context.CancelFunc resourceType string name string - vehicle types.Vehicle + vehicle P.Vehicle updatedAt time.Time hash utils.HashType parser Parser[V] @@ -37,11 +37,11 @@ func (f *Fetcher[V]) Name() string { return f.name } -func (f *Fetcher[V]) Vehicle() types.Vehicle { +func (f *Fetcher[V]) Vehicle() P.Vehicle { return f.vehicle } -func (f *Fetcher[V]) VehicleType() types.VehicleType { +func (f *Fetcher[V]) VehicleType() P.VehicleType { return f.vehicle.Type() } @@ -88,7 +88,7 @@ func (f *Fetcher[V]) Update() (V, bool, error) { f.backoff.AddAttempt() // add a failed attempt to backoff return lo.Empty[V](), false, err } - return f.loadBuf(buf, hash, f.vehicle.Type() != types.File) + return f.loadBuf(buf, hash, f.vehicle.Type() != P.File) } func (f *Fetcher[V]) SideUpdate(buf []byte) (V, bool, error) { @@ -180,7 +180,7 @@ func (f *Fetcher[V]) pullLoop(forceUpdate bool) { func (f *Fetcher[V]) startPullLoop(forceUpdate bool) (err error) { // pull contents automatically - if f.vehicle.Type() == types.File { + if f.vehicle.Type() == P.File { f.watcher, err = fswatch.NewWatcher(fswatch.Options{ Path: []string{f.vehicle.Path()}, Callback: f.updateCallback, @@ -218,7 +218,7 @@ func (f *Fetcher[V]) updateWithLog() { return } -func NewFetcher[V any](name string, interval time.Duration, vehicle types.Vehicle, parser Parser[V], onUpdate func(V)) *Fetcher[V] { +func NewFetcher[V any](name string, interval time.Duration, vehicle P.Vehicle, parser Parser[V], onUpdate func(V)) *Fetcher[V] { ctx, cancel := context.WithCancel(context.Background()) minBackoff := 10 * time.Second if interval < minBackoff { diff --git a/mihomo/component/resource/vehicle.go b/mihomo/component/resource/vehicle.go index 67ab19b723..a34417aab2 100644 --- a/mihomo/component/resource/vehicle.go +++ b/mihomo/component/resource/vehicle.go @@ -12,7 +12,7 @@ import ( "github.com/metacubex/mihomo/common/utils" mihomoHttp "github.com/metacubex/mihomo/component/http" "github.com/metacubex/mihomo/component/profile/cachefile" - types "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" ) const ( @@ -50,8 +50,8 @@ type FileVehicle struct { path string } -func (f *FileVehicle) Type() types.VehicleType { - return types.File +func (f *FileVehicle) Type() P.VehicleType { + return P.File } func (f *FileVehicle) Path() string { @@ -91,15 +91,15 @@ type HTTPVehicle struct { timeout time.Duration sizeLimit int64 inRead func(response *http.Response) - provider types.ProxyProvider + provider P.ProxyProvider } func (h *HTTPVehicle) Url() string { return h.url } -func (h *HTTPVehicle) Type() types.VehicleType { - return types.HTTP +func (h *HTTPVehicle) Type() P.VehicleType { + return P.HTTP } func (h *HTTPVehicle) Path() string { diff --git a/mihomo/config/config.go b/mihomo/config/config.go index 5f5b0c05c8..efc8903248 100644 --- a/mihomo/config/config.go +++ b/mihomo/config/config.go @@ -20,15 +20,15 @@ import ( "github.com/metacubex/mihomo/component/cidr" "github.com/metacubex/mihomo/component/fakeip" "github.com/metacubex/mihomo/component/geodata" - P "github.com/metacubex/mihomo/component/process" + "github.com/metacubex/mihomo/component/process" "github.com/metacubex/mihomo/component/resolver" "github.com/metacubex/mihomo/component/sniffer" "github.com/metacubex/mihomo/component/trie" C "github.com/metacubex/mihomo/constant" - providerTypes "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" snifferTypes "github.com/metacubex/mihomo/constant/sniffer" "github.com/metacubex/mihomo/dns" - L "github.com/metacubex/mihomo/listener" + "github.com/metacubex/mihomo/listener" LC "github.com/metacubex/mihomo/listener/config" "github.com/metacubex/mihomo/log" R "github.com/metacubex/mihomo/rules" @@ -44,27 +44,27 @@ import ( // General config type General struct { Inbound - Mode T.TunnelMode `json:"mode"` - UnifiedDelay bool `json:"unified-delay"` - LogLevel log.LogLevel `json:"log-level"` - IPv6 bool `json:"ipv6"` - Interface string `json:"interface-name"` - RoutingMark int `json:"routing-mark"` - GeoXUrl GeoXUrl `json:"geox-url"` - GeoAutoUpdate bool `json:"geo-auto-update"` - GeoUpdateInterval int `json:"geo-update-interval"` - GeodataMode bool `json:"geodata-mode"` - GeodataLoader string `json:"geodata-loader"` - GeositeMatcher string `json:"geosite-matcher"` - TCPConcurrent bool `json:"tcp-concurrent"` - FindProcessMode P.FindProcessMode `json:"find-process-mode"` - Sniffing bool `json:"sniffing"` - GlobalClientFingerprint string `json:"global-client-fingerprint"` - GlobalUA string `json:"global-ua"` - ETagSupport bool `json:"etag-support"` - KeepAliveIdle int `json:"keep-alive-idle"` - KeepAliveInterval int `json:"keep-alive-interval"` - DisableKeepAlive bool `json:"disable-keep-alive"` + Mode T.TunnelMode `json:"mode"` + UnifiedDelay bool `json:"unified-delay"` + LogLevel log.LogLevel `json:"log-level"` + IPv6 bool `json:"ipv6"` + Interface string `json:"interface-name"` + RoutingMark int `json:"routing-mark"` + GeoXUrl GeoXUrl `json:"geox-url"` + GeoAutoUpdate bool `json:"geo-auto-update"` + GeoUpdateInterval int `json:"geo-update-interval"` + GeodataMode bool `json:"geodata-mode"` + GeodataLoader string `json:"geodata-loader"` + GeositeMatcher string `json:"geosite-matcher"` + TCPConcurrent bool `json:"tcp-concurrent"` + FindProcessMode process.FindProcessMode `json:"find-process-mode"` + Sniffing bool `json:"sniffing"` + GlobalClientFingerprint string `json:"global-client-fingerprint"` + GlobalUA string `json:"global-ua"` + ETagSupport bool `json:"etag-support"` + KeepAliveIdle int `json:"keep-alive-idle"` + KeepAliveInterval int `json:"keep-alive-interval"` + DisableKeepAlive bool `json:"disable-keep-alive"` } // Inbound config @@ -199,8 +199,8 @@ type Config struct { Users []auth.AuthUser Proxies map[string]C.Proxy Listeners map[string]C.InboundListener - Providers map[string]providerTypes.ProxyProvider - RuleProviders map[string]providerTypes.RuleProvider + Providers map[string]P.ProxyProvider + RuleProviders map[string]P.RuleProvider Tunnels []LC.Tunnel Sniffer *sniffer.Config TLS *TLS @@ -382,51 +382,51 @@ type RawTLS struct { } type RawConfig struct { - Port int `yaml:"port" json:"port"` - SocksPort int `yaml:"socks-port" json:"socks-port"` - RedirPort int `yaml:"redir-port" json:"redir-port"` - TProxyPort int `yaml:"tproxy-port" json:"tproxy-port"` - MixedPort int `yaml:"mixed-port" json:"mixed-port"` - ShadowSocksConfig string `yaml:"ss-config" json:"ss-config"` - VmessConfig string `yaml:"vmess-config" json:"vmess-config"` - InboundTfo bool `yaml:"inbound-tfo" json:"inbound-tfo"` - InboundMPTCP bool `yaml:"inbound-mptcp" json:"inbound-mptcp"` - Authentication []string `yaml:"authentication" json:"authentication"` - SkipAuthPrefixes []netip.Prefix `yaml:"skip-auth-prefixes" json:"skip-auth-prefixes"` - LanAllowedIPs []netip.Prefix `yaml:"lan-allowed-ips" json:"lan-allowed-ips"` - LanDisAllowedIPs []netip.Prefix `yaml:"lan-disallowed-ips" json:"lan-disallowed-ips"` - AllowLan bool `yaml:"allow-lan" json:"allow-lan"` - BindAddress string `yaml:"bind-address" json:"bind-address"` - Mode T.TunnelMode `yaml:"mode" json:"mode"` - UnifiedDelay bool `yaml:"unified-delay" json:"unified-delay"` - LogLevel log.LogLevel `yaml:"log-level" json:"log-level"` - IPv6 bool `yaml:"ipv6" json:"ipv6"` - ExternalController string `yaml:"external-controller" json:"external-controller"` - ExternalControllerPipe string `yaml:"external-controller-pipe" json:"external-controller-pipe"` - ExternalControllerUnix string `yaml:"external-controller-unix" json:"external-controller-unix"` - ExternalControllerTLS string `yaml:"external-controller-tls" json:"external-controller-tls"` - ExternalControllerCors RawCors `yaml:"external-controller-cors" json:"external-controller-cors"` - ExternalUI string `yaml:"external-ui" json:"external-ui"` - ExternalUIURL string `yaml:"external-ui-url" json:"external-ui-url"` - ExternalUIName string `yaml:"external-ui-name" json:"external-ui-name"` - ExternalDohServer string `yaml:"external-doh-server" json:"external-doh-server"` - Secret string `yaml:"secret" json:"secret"` - Interface string `yaml:"interface-name" json:"interface-name"` - RoutingMark int `yaml:"routing-mark" json:"routing-mark"` - Tunnels []LC.Tunnel `yaml:"tunnels" json:"tunnels"` - GeoAutoUpdate bool `yaml:"geo-auto-update" json:"geo-auto-update"` - GeoUpdateInterval int `yaml:"geo-update-interval" json:"geo-update-interval"` - GeodataMode bool `yaml:"geodata-mode" json:"geodata-mode"` - GeodataLoader string `yaml:"geodata-loader" json:"geodata-loader"` - GeositeMatcher string `yaml:"geosite-matcher" json:"geosite-matcher"` - TCPConcurrent bool `yaml:"tcp-concurrent" json:"tcp-concurrent"` - FindProcessMode P.FindProcessMode `yaml:"find-process-mode" json:"find-process-mode"` - GlobalClientFingerprint string `yaml:"global-client-fingerprint" json:"global-client-fingerprint"` - GlobalUA string `yaml:"global-ua" json:"global-ua"` - ETagSupport bool `yaml:"etag-support" json:"etag-support"` - KeepAliveIdle int `yaml:"keep-alive-idle" json:"keep-alive-idle"` - KeepAliveInterval int `yaml:"keep-alive-interval" json:"keep-alive-interval"` - DisableKeepAlive bool `yaml:"disable-keep-alive" json:"disable-keep-alive"` + Port int `yaml:"port" json:"port"` + SocksPort int `yaml:"socks-port" json:"socks-port"` + RedirPort int `yaml:"redir-port" json:"redir-port"` + TProxyPort int `yaml:"tproxy-port" json:"tproxy-port"` + MixedPort int `yaml:"mixed-port" json:"mixed-port"` + ShadowSocksConfig string `yaml:"ss-config" json:"ss-config"` + VmessConfig string `yaml:"vmess-config" json:"vmess-config"` + InboundTfo bool `yaml:"inbound-tfo" json:"inbound-tfo"` + InboundMPTCP bool `yaml:"inbound-mptcp" json:"inbound-mptcp"` + Authentication []string `yaml:"authentication" json:"authentication"` + SkipAuthPrefixes []netip.Prefix `yaml:"skip-auth-prefixes" json:"skip-auth-prefixes"` + LanAllowedIPs []netip.Prefix `yaml:"lan-allowed-ips" json:"lan-allowed-ips"` + LanDisAllowedIPs []netip.Prefix `yaml:"lan-disallowed-ips" json:"lan-disallowed-ips"` + AllowLan bool `yaml:"allow-lan" json:"allow-lan"` + BindAddress string `yaml:"bind-address" json:"bind-address"` + Mode T.TunnelMode `yaml:"mode" json:"mode"` + UnifiedDelay bool `yaml:"unified-delay" json:"unified-delay"` + LogLevel log.LogLevel `yaml:"log-level" json:"log-level"` + IPv6 bool `yaml:"ipv6" json:"ipv6"` + ExternalController string `yaml:"external-controller" json:"external-controller"` + ExternalControllerPipe string `yaml:"external-controller-pipe" json:"external-controller-pipe"` + ExternalControllerUnix string `yaml:"external-controller-unix" json:"external-controller-unix"` + ExternalControllerTLS string `yaml:"external-controller-tls" json:"external-controller-tls"` + ExternalControllerCors RawCors `yaml:"external-controller-cors" json:"external-controller-cors"` + ExternalUI string `yaml:"external-ui" json:"external-ui"` + ExternalUIURL string `yaml:"external-ui-url" json:"external-ui-url"` + ExternalUIName string `yaml:"external-ui-name" json:"external-ui-name"` + ExternalDohServer string `yaml:"external-doh-server" json:"external-doh-server"` + Secret string `yaml:"secret" json:"secret"` + Interface string `yaml:"interface-name" json:"interface-name"` + RoutingMark int `yaml:"routing-mark" json:"routing-mark"` + Tunnels []LC.Tunnel `yaml:"tunnels" json:"tunnels"` + GeoAutoUpdate bool `yaml:"geo-auto-update" json:"geo-auto-update"` + GeoUpdateInterval int `yaml:"geo-update-interval" json:"geo-update-interval"` + GeodataMode bool `yaml:"geodata-mode" json:"geodata-mode"` + GeodataLoader string `yaml:"geodata-loader" json:"geodata-loader"` + GeositeMatcher string `yaml:"geosite-matcher" json:"geosite-matcher"` + TCPConcurrent bool `yaml:"tcp-concurrent" json:"tcp-concurrent"` + FindProcessMode process.FindProcessMode `yaml:"find-process-mode" json:"find-process-mode"` + GlobalClientFingerprint string `yaml:"global-client-fingerprint" json:"global-client-fingerprint"` + GlobalUA string `yaml:"global-ua" json:"global-ua"` + ETagSupport bool `yaml:"etag-support" json:"etag-support"` + KeepAliveIdle int `yaml:"keep-alive-idle" json:"keep-alive-idle"` + KeepAliveInterval int `yaml:"keep-alive-interval" json:"keep-alive-interval"` + DisableKeepAlive bool `yaml:"disable-keep-alive" json:"disable-keep-alive"` ProxyProvider map[string]map[string]any `yaml:"proxy-providers" json:"proxy-providers"` RuleProvider map[string]map[string]any `yaml:"rule-providers" json:"rule-providers"` @@ -479,7 +479,7 @@ func DefaultRawConfig() *RawConfig { Proxy: []map[string]any{}, ProxyGroup: []map[string]any{}, TCPConcurrent: false, - FindProcessMode: P.FindProcessStrict, + FindProcessMode: process.FindProcessStrict, GlobalUA: "clash.meta/" + C.Version, ETagSupport: true, DNS: RawDNS{ @@ -653,11 +653,11 @@ func ParseRawConfig(rawCfg *RawConfig) (*Config, error) { config.Proxies = proxies config.Providers = providers - listener, err := parseListeners(rawCfg) + listeners, err := parseListeners(rawCfg) if err != nil { return nil, err } - config.Listeners = listener + config.Listeners = listeners log.Infoln("Geodata Loader mode: %s", geodata.LoaderName()) log.Infoln("Geosite Matcher implementation: %s", geodata.SiteMatcherName()) @@ -845,9 +845,9 @@ func parseTLS(cfg *RawConfig) (*TLS, error) { }, nil } -func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[string]providerTypes.ProxyProvider, err error) { +func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[string]P.ProxyProvider, err error) { proxies = make(map[string]C.Proxy) - providersMap = make(map[string]providerTypes.ProxyProvider) + providersMap = make(map[string]P.ProxyProvider) proxiesConfig := cfg.Proxy groupsConfig := cfg.ProxyGroup providersConfig := cfg.ProxyProvider @@ -947,7 +947,7 @@ func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[ &outboundgroup.GroupCommonOption{ Name: "GLOBAL", }, - []providerTypes.ProxyProvider{pd}, + []P.ProxyProvider{pd}, ) proxies["GLOBAL"] = adapter.NewProxy(global) } @@ -957,24 +957,25 @@ func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[ func parseListeners(cfg *RawConfig) (listeners map[string]C.InboundListener, err error) { listeners = make(map[string]C.InboundListener) for index, mapping := range cfg.Listeners { - listener, err := L.ParseListener(mapping) + inboundListener, err := listener.ParseListener(mapping) if err != nil { return nil, fmt.Errorf("proxy %d: %w", index, err) } - if _, exist := mapping[listener.Name()]; exist { - return nil, fmt.Errorf("listener %s is the duplicate name", listener.Name()) + name := inboundListener.Name() + if _, exist := mapping[name]; exist { + return nil, fmt.Errorf("listener %s is the duplicate name", name) } - listeners[listener.Name()] = listener + listeners[name] = inboundListener } return } -func parseRuleProviders(cfg *RawConfig) (ruleProviders map[string]providerTypes.RuleProvider, err error) { +func parseRuleProviders(cfg *RawConfig) (ruleProviders map[string]P.RuleProvider, err error) { RP.SetTunnel(T.Tunnel) - ruleProviders = map[string]providerTypes.RuleProvider{} + ruleProviders = map[string]P.RuleProvider{} // parse rule provider for name, mapping := range cfg.RuleProvider { rp, err := RP.ParseRuleProvider(name, mapping, R.ParseRule) @@ -987,7 +988,7 @@ func parseRuleProviders(cfg *RawConfig) (ruleProviders map[string]providerTypes. return } -func parseSubRules(cfg *RawConfig, proxies map[string]C.Proxy, ruleProviders map[string]providerTypes.RuleProvider) (subRules map[string][]C.Rule, err error) { +func parseSubRules(cfg *RawConfig, proxies map[string]C.Proxy, ruleProviders map[string]P.RuleProvider) (subRules map[string][]C.Rule, err error) { subRules = map[string][]C.Rule{} for name := range cfg.SubRules { subRules[name] = make([]C.Rule, 0) @@ -1050,7 +1051,7 @@ func verifySubRuleCircularReferences(n string, subRules map[string][]C.Rule, arr return nil } -func parseRules(rulesConfig []string, proxies map[string]C.Proxy, ruleProviders map[string]providerTypes.RuleProvider, subRules map[string][]C.Rule, format string) ([]C.Rule, error) { +func parseRules(rulesConfig []string, proxies map[string]C.Proxy, ruleProviders map[string]P.RuleProvider, subRules map[string][]C.Rule, format string) ([]C.Rule, error) { var rules []C.Rule // parse rules @@ -1273,7 +1274,7 @@ func parsePureDNSServer(server string) string { } } -func parseNameServerPolicy(nsPolicy *orderedmap.OrderedMap[string, any], ruleProviders map[string]providerTypes.RuleProvider, respectRules bool, preferH3 bool) ([]dns.Policy, error) { +func parseNameServerPolicy(nsPolicy *orderedmap.OrderedMap[string, any], ruleProviders map[string]P.RuleProvider, respectRules bool, preferH3 bool) ([]dns.Policy, error) { var policy []dns.Policy for pair := nsPolicy.Oldest(); pair != nil; pair = pair.Next() { @@ -1348,7 +1349,7 @@ func parseNameServerPolicy(nsPolicy *orderedmap.OrderedMap[string, any], rulePro return policy, nil } -func parseDNS(rawCfg *RawConfig, ruleProviders map[string]providerTypes.RuleProvider) (*DNS, error) { +func parseDNS(rawCfg *RawConfig, ruleProviders map[string]P.RuleProvider) (*DNS, error) { cfg := rawCfg.DNS if cfg.Enable && len(cfg.NameServer) == 0 { return nil, fmt.Errorf("if DNS configuration is turned on, NameServer cannot be empty") @@ -1632,7 +1633,7 @@ func parseTuicServer(rawTuic RawTuicServer, general *General) error { return nil } -func parseSniffer(snifferRaw RawSniffer, ruleProviders map[string]providerTypes.RuleProvider) (*sniffer.Config, error) { +func parseSniffer(snifferRaw RawSniffer, ruleProviders map[string]P.RuleProvider) (*sniffer.Config, error) { snifferConfig := &sniffer.Config{ Enable: snifferRaw.Enable, ForceDnsMapping: snifferRaw.ForceDnsMapping, @@ -1722,7 +1723,7 @@ func parseSniffer(snifferRaw RawSniffer, ruleProviders map[string]providerTypes. return snifferConfig, nil } -func parseIPCIDR(addresses []string, cidrSet *cidr.IpCidrSet, adapterName string, ruleProviders map[string]providerTypes.RuleProvider) (matchers []C.IpMatcher, err error) { +func parseIPCIDR(addresses []string, cidrSet *cidr.IpCidrSet, adapterName string, ruleProviders map[string]P.RuleProvider) (matchers []C.IpMatcher, err error) { var matcher C.IpMatcher for _, ipcidr := range addresses { ipcidrLower := strings.ToLower(ipcidr) @@ -1769,7 +1770,7 @@ func parseIPCIDR(addresses []string, cidrSet *cidr.IpCidrSet, adapterName string return } -func parseDomain(domains []string, domainTrie *trie.DomainTrie[struct{}], adapterName string, ruleProviders map[string]providerTypes.RuleProvider) (matchers []C.DomainMatcher, err error) { +func parseDomain(domains []string, domainTrie *trie.DomainTrie[struct{}], adapterName string, ruleProviders map[string]P.RuleProvider) (matchers []C.DomainMatcher, err error) { var matcher C.DomainMatcher for _, domain := range domains { domainLower := strings.ToLower(domain) @@ -1812,14 +1813,14 @@ func parseDomain(domains []string, domainTrie *trie.DomainTrie[struct{}], adapte return } -func parseIPRuleSet(domainSetName string, adapterName string, ruleProviders map[string]providerTypes.RuleProvider) (C.IpMatcher, error) { +func parseIPRuleSet(domainSetName string, adapterName string, ruleProviders map[string]P.RuleProvider) (C.IpMatcher, error) { if rp, ok := ruleProviders[domainSetName]; !ok { return nil, fmt.Errorf("not found rule-set: %s", domainSetName) } else { switch rp.Behavior() { - case providerTypes.Domain: + case P.Domain: return nil, fmt.Errorf("rule provider type error, except ipcidr,actual %s", rp.Behavior()) - case providerTypes.Classical: + case P.Classical: log.Warnln("%s provider is %s, only matching it contain ip rule", rp.Name(), rp.Behavior()) default: } @@ -1827,14 +1828,14 @@ func parseIPRuleSet(domainSetName string, adapterName string, ruleProviders map[ return RP.NewRuleSet(domainSetName, adapterName, false, true) } -func parseDomainRuleSet(domainSetName string, adapterName string, ruleProviders map[string]providerTypes.RuleProvider) (C.DomainMatcher, error) { +func parseDomainRuleSet(domainSetName string, adapterName string, ruleProviders map[string]P.RuleProvider) (C.DomainMatcher, error) { if rp, ok := ruleProviders[domainSetName]; !ok { return nil, fmt.Errorf("not found rule-set: %s", domainSetName) } else { switch rp.Behavior() { - case providerTypes.IPCIDR: + case P.IPCIDR: return nil, fmt.Errorf("rule provider type error, except domain,actual %s", rp.Behavior()) - case providerTypes.Classical: + case P.Classical: log.Warnln("%s provider is %s, only matching it contain domain rule", rp.Name(), rp.Behavior()) default: } diff --git a/mihomo/hub/executor/executor.go b/mihomo/hub/executor/executor.go index 6650176460..e92a8de448 100644 --- a/mihomo/hub/executor/executor.go +++ b/mihomo/hub/executor/executor.go @@ -31,7 +31,7 @@ import ( "github.com/metacubex/mihomo/component/updater" "github.com/metacubex/mihomo/config" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/dns" "github.com/metacubex/mihomo/listener" authStore "github.com/metacubex/mihomo/listener/auth" @@ -303,18 +303,18 @@ func updateHosts(tree *trie.DomainTrie[resolver.HostValue]) { resolver.DefaultHosts = resolver.NewHosts(tree) } -func updateProxies(proxies map[string]C.Proxy, providers map[string]provider.ProxyProvider) { +func updateProxies(proxies map[string]C.Proxy, providers map[string]P.ProxyProvider) { tunnel.UpdateProxies(proxies, providers) } -func updateRules(rules []C.Rule, subRules map[string][]C.Rule, ruleProviders map[string]provider.RuleProvider) { +func updateRules(rules []C.Rule, subRules map[string][]C.Rule, ruleProviders map[string]P.RuleProvider) { tunnel.UpdateRules(rules, subRules, ruleProviders) } -func loadProvider[P provider.Provider](providers map[string]P) { - load := func(pv P) { +func loadProvider[T P.Provider](providers map[string]T) { + load := func(pv T) { name := pv.Name() - if pv.VehicleType() == provider.Compatible { + if pv.VehicleType() == P.Compatible { log.Infoln("Start initial compatible provider %s", name) } else { log.Infoln("Start initial provider %s", name) @@ -322,11 +322,11 @@ func loadProvider[P provider.Provider](providers map[string]P) { if err := pv.Initial(); err != nil { switch pv.Type() { - case provider.Proxy: + case P.Proxy: { log.Errorln("initial proxy provider %s error: %v", name, err) } - case provider.Rule: + case P.Rule: { log.Errorln("initial rule provider %s error: %v", name, err) } diff --git a/mihomo/hub/route/configs.go b/mihomo/hub/route/configs.go index 92253c3f72..141a6c1559 100644 --- a/mihomo/hub/route/configs.go +++ b/mihomo/hub/route/configs.go @@ -13,7 +13,7 @@ import ( "github.com/metacubex/mihomo/config" C "github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/hub/executor" - P "github.com/metacubex/mihomo/listener" + "github.com/metacubex/mihomo/listener" LC "github.com/metacubex/mihomo/listener/config" "github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/tunnel" @@ -306,7 +306,7 @@ func patchConfigs(w http.ResponseWriter, r *http.Request) { } if general.AllowLan != nil { - P.SetAllowLan(*general.AllowLan) + listener.SetAllowLan(*general.AllowLan) } if general.SkipAuthPrefixes != nil { @@ -322,7 +322,7 @@ func patchConfigs(w http.ResponseWriter, r *http.Request) { } if general.BindAddress != nil { - P.SetBindAddress(*general.BindAddress) + listener.SetBindAddress(*general.BindAddress) } if general.Sniffing != nil { @@ -337,17 +337,17 @@ func patchConfigs(w http.ResponseWriter, r *http.Request) { dialer.DefaultInterface.Store(*general.InterfaceName) } - ports := P.GetPorts() + ports := listener.GetPorts() - P.ReCreateHTTP(pointerOrDefault(general.Port, ports.Port), tunnel.Tunnel) - P.ReCreateSocks(pointerOrDefault(general.SocksPort, ports.SocksPort), tunnel.Tunnel) - P.ReCreateRedir(pointerOrDefault(general.RedirPort, ports.RedirPort), tunnel.Tunnel) - P.ReCreateTProxy(pointerOrDefault(general.TProxyPort, ports.TProxyPort), tunnel.Tunnel) - P.ReCreateMixed(pointerOrDefault(general.MixedPort, ports.MixedPort), tunnel.Tunnel) - P.ReCreateTun(pointerOrDefaultTun(general.Tun, P.LastTunConf), tunnel.Tunnel) - P.ReCreateShadowSocks(pointerOrDefault(general.ShadowSocksConfig, ports.ShadowSocksConfig), tunnel.Tunnel) - P.ReCreateVmess(pointerOrDefault(general.VmessConfig, ports.VmessConfig), tunnel.Tunnel) - P.ReCreateTuic(pointerOrDefaultTuicServer(general.TuicServer, P.LastTuicConf), tunnel.Tunnel) + listener.ReCreateHTTP(pointerOrDefault(general.Port, ports.Port), tunnel.Tunnel) + listener.ReCreateSocks(pointerOrDefault(general.SocksPort, ports.SocksPort), tunnel.Tunnel) + listener.ReCreateRedir(pointerOrDefault(general.RedirPort, ports.RedirPort), tunnel.Tunnel) + listener.ReCreateTProxy(pointerOrDefault(general.TProxyPort, ports.TProxyPort), tunnel.Tunnel) + listener.ReCreateMixed(pointerOrDefault(general.MixedPort, ports.MixedPort), tunnel.Tunnel) + listener.ReCreateTun(pointerOrDefaultTun(general.Tun, listener.LastTunConf), tunnel.Tunnel) + listener.ReCreateShadowSocks(pointerOrDefault(general.ShadowSocksConfig, ports.ShadowSocksConfig), tunnel.Tunnel) + listener.ReCreateVmess(pointerOrDefault(general.VmessConfig, ports.VmessConfig), tunnel.Tunnel) + listener.ReCreateTuic(pointerOrDefaultTuicServer(general.TuicServer, listener.LastTuicConf), tunnel.Tunnel) if general.Mode != nil { tunnel.SetMode(*general.Mode) diff --git a/mihomo/hub/route/provider.go b/mihomo/hub/route/provider.go index a8611a7948..24b1989ed1 100644 --- a/mihomo/hub/route/provider.go +++ b/mihomo/hub/route/provider.go @@ -5,7 +5,7 @@ import ( "net/http" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" "github.com/metacubex/mihomo/tunnel" "github.com/go-chi/chi/v5" @@ -45,12 +45,12 @@ func getProviders(w http.ResponseWriter, r *http.Request) { } func getProvider(w http.ResponseWriter, r *http.Request) { - provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider) + provider := r.Context().Value(CtxKeyProvider).(P.ProxyProvider) render.JSON(w, r, provider) } func updateProvider(w http.ResponseWriter, r *http.Request) { - provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider) + provider := r.Context().Value(CtxKeyProvider).(P.ProxyProvider) if err := provider.Update(); err != nil { render.Status(r, http.StatusServiceUnavailable) render.JSON(w, r, newError(err.Error())) @@ -60,7 +60,7 @@ func updateProvider(w http.ResponseWriter, r *http.Request) { } func healthCheckProvider(w http.ResponseWriter, r *http.Request) { - provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider) + provider := r.Context().Value(CtxKeyProvider).(P.ProxyProvider) provider.HealthCheck() render.NoContent(w, r) } @@ -93,7 +93,7 @@ func findProviderProxyByName(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var ( name = r.Context().Value(CtxKeyProxyName).(string) - pd = r.Context().Value(CtxKeyProvider).(provider.ProxyProvider) + pd = r.Context().Value(CtxKeyProvider).(P.ProxyProvider) ) proxy, exist := lo.Find(pd.Proxies(), func(proxy C.Proxy) bool { return proxy.Name() == name @@ -128,7 +128,7 @@ func getRuleProviders(w http.ResponseWriter, r *http.Request) { } func updateRuleProvider(w http.ResponseWriter, r *http.Request) { - provider := r.Context().Value(CtxKeyProvider).(provider.RuleProvider) + provider := r.Context().Value(CtxKeyProvider).(P.RuleProvider) if err := provider.Update(); err != nil { render.Status(r, http.StatusServiceUnavailable) render.JSON(w, r, newError(err.Error())) diff --git a/mihomo/listener/sing_tun/server.go b/mihomo/listener/sing_tun/server.go index ccd12f42db..87f413d431 100644 --- a/mihomo/listener/sing_tun/server.go +++ b/mihomo/listener/sing_tun/server.go @@ -18,7 +18,7 @@ import ( "github.com/metacubex/mihomo/component/iface" "github.com/metacubex/mihomo/component/resolver" C "github.com/metacubex/mihomo/constant" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" LC "github.com/metacubex/mihomo/listener/config" "github.com/metacubex/mihomo/listener/sing" "github.com/metacubex/mihomo/log" @@ -133,7 +133,7 @@ func New(options LC.Tun, tunnel C.Tunnel, additions ...inbound.Addition) (l *Lis } } ctx := context.TODO() - rpTunnel := tunnel.(provider.Tunnel) + rpTunnel := tunnel.(P.Tunnel) if options.GSOMaxSize == 0 { options.GSOMaxSize = 65536 } @@ -504,7 +504,7 @@ func New(options LC.Tun, tunnel C.Tunnel, additions ...inbound.Addition) (l *Lis return } -func (l *Listener) ruleUpdateCallback(ruleProvider provider.RuleProvider) { +func (l *Listener) ruleUpdateCallback(ruleProvider P.RuleProvider) { name := ruleProvider.Name() if slices.Contains(l.options.RouteAddressSet, name) { l.updateRule(ruleProvider, false, true) @@ -520,7 +520,7 @@ type toIpCidr interface { ToIpCidr() *netipx.IPSet } -func (l *Listener) updateRule(ruleProvider provider.RuleProvider, exclude bool, update bool) { +func (l *Listener) updateRule(ruleProvider P.RuleProvider, exclude bool, update bool) { l.ruleUpdateMutex.Lock() defer l.ruleUpdateMutex.Unlock() name := ruleProvider.Name() diff --git a/mihomo/tunnel/tunnel.go b/mihomo/tunnel/tunnel.go index 4ad6e736ae..fc901eb354 100644 --- a/mihomo/tunnel/tunnel.go +++ b/mihomo/tunnel/tunnel.go @@ -17,13 +17,13 @@ import ( "github.com/metacubex/mihomo/common/utils" "github.com/metacubex/mihomo/component/loopback" "github.com/metacubex/mihomo/component/nat" - P "github.com/metacubex/mihomo/component/process" + "github.com/metacubex/mihomo/component/process" "github.com/metacubex/mihomo/component/resolver" "github.com/metacubex/mihomo/component/slowdown" "github.com/metacubex/mihomo/component/sniffer" C "github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/constant/features" - "github.com/metacubex/mihomo/constant/provider" + P "github.com/metacubex/mihomo/constant/provider" icontext "github.com/metacubex/mihomo/context" "github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/tunnel/statistic" @@ -43,8 +43,8 @@ var ( listeners = make(map[string]C.InboundListener) subRules map[string][]C.Rule proxies = make(map[string]C.Proxy) - providers map[string]provider.ProxyProvider - ruleProviders map[string]provider.RuleProvider + providers map[string]P.ProxyProvider + ruleProviders map[string]P.RuleProvider configMux sync.RWMutex // for compatibility, lazy init @@ -59,19 +59,19 @@ var ( // default timeout for UDP session udpTimeout = 60 * time.Second - findProcessMode = atomic.NewInt32Enum(P.FindProcessStrict) + findProcessMode = atomic.NewInt32Enum(process.FindProcessStrict) snifferDispatcher *sniffer.Dispatcher sniffingEnable = false - ruleUpdateCallback = utils.NewCallback[provider.RuleProvider]() + ruleUpdateCallback = utils.NewCallback[P.RuleProvider]() ) type tunnel struct{} var Tunnel = tunnel{} var _ C.Tunnel = Tunnel -var _ provider.Tunnel = Tunnel +var _ P.Tunnel = Tunnel func (t tunnel) HandleTCPConn(conn net.Conn, metadata *C.Metadata) { connCtx := icontext.NewConnContext(conn, metadata) @@ -112,15 +112,15 @@ func (t tunnel) NatTable() C.NatTable { return natTable } -func (t tunnel) Providers() map[string]provider.ProxyProvider { +func (t tunnel) Providers() map[string]P.ProxyProvider { return providers } -func (t tunnel) RuleProviders() map[string]provider.RuleProvider { +func (t tunnel) RuleProviders() map[string]P.RuleProvider { return ruleProviders } -func (t tunnel) RuleUpdateCallback() *utils.Callback[provider.RuleProvider] { +func (t tunnel) RuleUpdateCallback() *utils.Callback[P.RuleProvider] { return ruleUpdateCallback } @@ -195,7 +195,7 @@ func Listeners() map[string]C.InboundListener { } // UpdateRules handle update rules -func UpdateRules(newRules []C.Rule, newSubRule map[string][]C.Rule, rp map[string]provider.RuleProvider) { +func UpdateRules(newRules []C.Rule, newSubRule map[string][]C.Rule, rp map[string]P.RuleProvider) { configMux.Lock() rules = newRules ruleProviders = rp @@ -223,17 +223,17 @@ func ProxiesWithProviders() map[string]C.Proxy { } // Providers return all compatible providers -func Providers() map[string]provider.ProxyProvider { +func Providers() map[string]P.ProxyProvider { return providers } // RuleProviders return all loaded rule providers -func RuleProviders() map[string]provider.RuleProvider { +func RuleProviders() map[string]P.RuleProvider { return ruleProviders } // UpdateProxies handle update proxies -func UpdateProxies(newProxies map[string]C.Proxy, newProviders map[string]provider.ProxyProvider) { +func UpdateProxies(newProxies map[string]C.Proxy, newProviders map[string]P.ProxyProvider) { configMux.Lock() proxies = newProxies providers = newProviders @@ -263,13 +263,13 @@ func SetMode(m TunnelMode) { mode = m } -func FindProcessMode() P.FindProcessMode { +func FindProcessMode() process.FindProcessMode { return findProcessMode.Load() } // SetFindProcessMode replace SetAlwaysFindProcess // always find process info if legacyAlways = true or mode.Always() = true, may be increase many memory -func SetFindProcessMode(mode P.FindProcessMode) { +func SetFindProcessMode(mode process.FindProcessMode) { findProcessMode.Store(mode) } @@ -358,7 +358,7 @@ func resolveMetadata(metadata *C.Metadata) (proxy C.Proxy, rule C.Rule, err erro attemptProcessLookup = false if !features.CMFA { // normal check for process - uid, path, err := P.FindProcessName(metadata.NetWork.String(), metadata.SrcIP, int(metadata.SrcPort)) + uid, path, err := process.FindProcessName(metadata.NetWork.String(), metadata.SrcIP, int(metadata.SrcPort)) if err != nil { log.Debugln("[Process] find process error for %s: %v", metadata.String(), err) } else { @@ -366,13 +366,13 @@ func resolveMetadata(metadata *C.Metadata) (proxy C.Proxy, rule C.Rule, err erro metadata.ProcessPath = path metadata.Uid = uid - if pkg, err := P.FindPackageName(metadata); err == nil { // for android (not CMFA) package names + if pkg, err := process.FindPackageName(metadata); err == nil { // for android (not CMFA) package names metadata.Process = pkg } } } else { // check package names - pkg, err := P.FindPackageName(metadata) + pkg, err := process.FindPackageName(metadata) if err != nil { log.Debugln("[Process] find process error for %s: %v", metadata.String(), err) } else { @@ -384,10 +384,10 @@ func resolveMetadata(metadata *C.Metadata) (proxy C.Proxy, rule C.Rule, err erro } switch FindProcessMode() { - case P.FindProcessAlways: + case process.FindProcessAlways: helper.FindProcess() helper.FindProcess = nil - case P.FindProcessOff: + case process.FindProcessOff: helper.FindProcess = nil } diff --git a/openwrt-packages/luci-app-ddns-go/Makefile b/openwrt-packages/luci-app-ddns-go/Makefile index b5ae5035e5..1ce97cce5a 100644 --- a/openwrt-packages/luci-app-ddns-go/Makefile +++ b/openwrt-packages/luci-app-ddns-go/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-ddns-go -PKG_VERSION:=1.6.3 -PKG_RELEASE:=20251025 +PKG_VERSION:=1.6.4 +PKG_RELEASE:=20251106 PKG_MAINTAINER:=sirpdboy PKG_CONFIG_DEPENDS:= diff --git a/openwrt-packages/luci-app-ddns-go/htdocs/luci-static/resources/view/ddns-go/config.js b/openwrt-packages/luci-app-ddns-go/htdocs/luci-static/resources/view/ddns-go/config.js index 112d710cd0..f56a145ce9 100644 --- a/openwrt-packages/luci-app-ddns-go/htdocs/luci-static/resources/view/ddns-go/config.js +++ b/openwrt-packages/luci-app-ddns-go/htdocs/luci-static/resources/view/ddns-go/config.js @@ -77,8 +77,8 @@ function renderStatus(isRunning, listen_port, noweb, version) { ); if (isRunning) { - html += String.format(' %s', - window.location.protocol, window.location.hostname, listen_port, _('Open Web Interface')); + html += String.format(' %s', + window.location.hostname, listen_port, _('Open Web Interface')); } return html; diff --git a/openwrt-packages/luci-app-ddns-go/htdocs/luci-static/resources/view/ddns-go/ddns-go.js b/openwrt-packages/luci-app-ddns-go/htdocs/luci-static/resources/view/ddns-go/ddns-go.js index 951f3ec973..328170d1b0 100644 --- a/openwrt-packages/luci-app-ddns-go/htdocs/luci-static/resources/view/ddns-go/ddns-go.js +++ b/openwrt-packages/luci-app-ddns-go/htdocs/luci-static/resources/view/ddns-go/ddns-go.js @@ -21,57 +21,84 @@ return view.extend({ }); }); }, - - render: function() { - var self = this; +render: function() { + var self = this; + + return this.checkRunning().then(function(checkResult) { + var isRunning = checkResult.isRunning; + var port = uci.get('ddns-go', 'config', 'port') || '[::]:9876'; + var noweb = uci.get('ddns-go', 'config', 'noweb'); + port = port.split(':').pop(); - return this.checkRunning().then(function(checkResult) { - var isRunning = checkResult.isRunning; - var port = uci.get('ddns-go', 'config', 'port') || '[::]:9876'; - var noweb = uci.get('ddns-go', 'config', 'noweb') ; - port = port.split(':').pop(); - - var container = E('div'); - console.log('Debug: isRunning=' + isRunning + ', noweb=' + noweb + ', port=' + port); - if (!isRunning || noweb === '1') { + var container = E('div'); + if (!isRunning || noweb === '1') { if (!isRunning) { var message = _('DDNS-GO Service Not Running'); } - if (noweb === '1') { + if (noweb === '1') { var message = _('DDNS-GO Web Interface Disabled'); } - container.appendChild(E('div', { - style: 'text-align: center; padding: 2em;' + container.appendChild(E('div', { + style: 'text-align: center; padding: 2em;' + }, [ + E('img', { + src: 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMjQiIGhlaWdodD0iMTAyNCIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCI+PHBhdGggZmlsbD0iI2RmMDAwMCIgZD0iTTk0Mi40MjEgMjM0LjYyNGw4MC44MTEtODAuODExLTE1My4wNDUtMTUzLjA0NS04MC44MTEgODAuODExYy03OS45NTctNTEuNjI3LTE3NS4xNDctODEuNTc5LTI3Ny4zNzYtODEuNTc5LTI4Mi43NTIgMC01MTIgMjI5LjI0OC01MTIgNTEyIDAgMTAyLjIyOSAyOS45NTIgMTk3LjQxOSA4MS41NzkgMjc3LjM3NmwtODAuODExIDgwLjgxMSAxNTMuMDQ1IDE1My4wNDUgODAuODExLTgwLjgxMWM3OS45NTcgNTEuNjI3IDE3NS4xNDcgODEuNTc5IDI3Ny4zNzYgODEuNTc5IDI4Mi43NTIgMCA1MTItMjI5LjI0OCA1MTItNTEyIDAtMTAyLjIyOS0yOS45NTItMTk3LjQxOS04MS41NzktMjc3LjM3NnpNMTk0Ljk0NCA1MTJjMC0xNzUuMTA0IDE0MS45NTItMzE3LjA1NiAzMTcuMDU2LTMxNy4wNTYgNDggMCA5My40ODMgMTAuNjY3IDEzNC4yMjkgMjkuNzgxbC00MjEuNTQ3IDQyMS41NDdjLTE5LjA3Mi00MC43ODktMjkuNzM5LTg2LjI3Mi0yOS43MzktMTM0LjI3MnpNNTEyIDgyOS4wNTZjLTQ4IDAtOTMuNDgzLTEwLjY2Ny0xMzQuMjI5LTI5Ljc4MWw0MjEuNTQ3LTQyMS41NDdjMTkuMDcyIDQwLjc4OSAyOS43ODEgODYuMjcyIDI5Ljc4MSAxMzQuMjI5LTAuMDQzIDE3NS4xNDctMTQxLjk5NSAzMTcuMDk5LTMxNy4wOTkgMzE3LjA5OXoiLz48L3N2Zz4=', + style: 'width: 100px; height: 100px; margin-bottom: 1em;' + }), + E('h2', {}, message) + ])); + } else { + var isHttps = window.location.protocol === 'https:'; + + if (isHttps) { + var buttonContainer = E('div', { + style: 'text-align: center; padding: 2em;' }, [ - E('img', { - src: 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMjQiIGhlaWdodD0iMTAyNCIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCI+PHBhdGggZmlsbD0iI2RmMDAwMCIgZD0iTTk0Mi40MjEgMjM0LjYyNGw4MC44MTEtODAuODExLTE1My4wNDUtMTUzLjA0NS04MC44MTEgODAuODExYy03OS45NTctNTEuNjI3LTE3NS4xNDctODEuNTc5LTI3Ny4zNzYtODEuNTc5LTI4Mi43NTIgMC01MTIgMjI5LjI0OC01MTIgNTEyIDAgMTAyLjIyOSAyOS45NTIgMTk3LjQxOSA4MS41NzkgMjc3LjM3NmwtODAuODExIDgwLjgxMSAxNTMuMDQ1IDE1My4wNDUgODAuODExLTgwLjgxMWM3OS45NTcgNTEuNjI3IDE3NS4xNDcgODEuNTc5IDI3Ny4zNzYgODEuNTc5IDI4Mi43NTIgMCA1MTItMjI5LjI0OCA1MTItNTEyIDAtMTAyLjIyOS0yOS45NTItMTk3LjQxOS04MS41NzktMjc3LjM3NnpNMTk0Ljk0NCA1MTJjMC0xNzUuMTA0IDE0MS45NTItMzE3LjA1NiAzMTcuMDU2LTMxNy4wNTYgNDggMCA5My40ODMgMTAuNjY3IDEzNC4yMjkgMjkuNzgxbC00MjEuNTQ3IDQyMS41NDdjLTE5LjA3Mi00MC43ODktMjkuNzM5LTg2LjI3Mi0yOS43MzktMTM0LjI3MnpNNTEyIDgyOS4wNTZjLTQ4IDAtOTMuNDgzLTEwLjY2Ny0xMzQuMjI5LTI5Ljc4MWw0MjEuNTQ3LTQyMS41NDdjMTkuMDcyIDQwLjc4OSAyOS43ODEgODYuMjcyIDI5Ljc4MSAxMzQuMjI5LTAuMDQzIDE3NS4xNDctMTQxLjk5NSAzMTcuMDk5LTMxNy4wOTkgMzE3LjA5OXoiLz48L3N2Zz4=', - style: 'width: 100px; height: 100px; margin-bottom: 1em;' - }), - E('h2', {}, message) - ])); + E('h2', {}, _('DDNS-GO Control panel')), + E('p', {}, _('Due to browser security policies, the DDNS-GO interface https cannot be embedded directly.')), + E('a', { + href: 'http://' + window.location.hostname + ':' + port, + target: '_blank', + class: 'cbi-button cbi-button-apply', + style: 'display: inline-block; margin-top: 1em; padding: 10px 20px; font-size: 16px; text-decoration: none; color: white;' + }, _('Open Web Interface')), + E('div', { 'style': 'text-align: right; font-style: italic;' }, [ + E('span', {}, [ + _('© github '), + E('a', { + 'href': 'https://github.com/sirpdboy', + 'target': '_blank', + 'style': 'text-decoration: none;' + }, 'by sirpdboy') + ]) + ]) + ]); + container.appendChild(buttonContainer); } else { var iframe = E('iframe', { - src: window.location.protocol + '//' + window.location.hostname + ':' + port, + src: 'http://' + window.location.hostname + ':' + port, style: 'width: 100%; min-height: 100vh; border: none;' }); container.appendChild(iframe); } - - poll.add(function() { - return self.checkRunning().then(function(checkResult) { - var newStatus = checkResult.isRunning; - if (newStatus !== isRunning) { - window.location.reload(); - } - }); - }, 5); - - poll.start(); - - return container; - }); - }, + } + + poll.add(function() { + return self.checkRunning().then(function(checkResult) { + var newStatus = checkResult.isRunning; + if (newStatus !== isRunning) { + window.location.reload(); + } + }); + }, 5); + + poll.start(); + + return container; + }); +}, + handleSaveApply: null, handleSave: null, diff --git a/openwrt-packages/luci-app-ddns-go/po/zh_Hans/ddns-go.po b/openwrt-packages/luci-app-ddns-go/po/zh_Hans/ddns-go.po index ab61b54360..bb1ef00e40 100644 --- a/openwrt-packages/luci-app-ddns-go/po/zh_Hans/ddns-go.po +++ b/openwrt-packages/luci-app-ddns-go/po/zh_Hans/ddns-go.po @@ -118,5 +118,5 @@ msgstr "立刻重启服务" msgid "Restart Later" msgstr "稍后重启" -msgid "" -msgstr "" +msgid "Due to browser security policies, the DDNS-GO interface https cannot be embedded directly." +msgstr "由于浏览器安全策略,DDNS-GO接口https不能直接嵌入。" diff --git a/openwrt-packages/luci-theme-kucat/Makefile b/openwrt-packages/luci-theme-kucat/Makefile index 17f8ae0772..b3bbac8d94 100644 --- a/openwrt-packages/luci-theme-kucat/Makefile +++ b/openwrt-packages/luci-theme-kucat/Makefile @@ -10,8 +10,8 @@ THEME_TITLE:=Kucat Theme PKG_NAME:=luci-theme-$(THEME_NAME) LUCI_TITLE:=Kucat Theme by sirpdboy LUCI_DEPENDS:= -PKG_VERSION:=2.7.3 -PKG_RELEASE:=20251028 +PKG_VERSION:=2.7.4 +PKG_RELEASE:=20251106 define Package/luci-theme-$(THEME_NAME)/conffiles /www/luci-static/resources/background/ diff --git a/openwrt-packages/luci-theme-kucat/htdocs/luci-static/kucat/css/style.css b/openwrt-packages/luci-theme-kucat/htdocs/luci-static/kucat/css/style.css index eb9e7beb80..78f25e5cf5 100644 --- a/openwrt-packages/luci-theme-kucat/htdocs/luci-static/kucat/css/style.css +++ b/openwrt-packages/luci-theme-kucat/htdocs/luci-static/kucat/css/style.css @@ -869,7 +869,7 @@ small { .main-right>#maincontent { position: relative; background-color: rgba(var(--primary-rgbbody),var(--primary-rgbm-ts)); - padding: 0.2rem 0.2rem 3rem 0.2rem; + padding: 0.2rem 0.2rem 3rem 0.5rem; z-index: 50 } @@ -960,7 +960,51 @@ header .fill .status span { flex-wrap: nowrap } -span[data-indicator="uci-changes"],span[data-indicator="poll-status"] { +span[data-indicator="poll-status"] { + font-size: 0 !important; + cursor: pointer; + background-repeat: no-repeat; + background-position: center; + color: transparent !important; + -webkit-appearance: none; + display: flex; + background-color: rgba(255, 255, 255, 0); + -moz-appearance: none; + padding: 1rem; + transition: all .3s +} + +span[data-indicator="poll-status"]:not([data-style="inactive"]):before { + font-size: 1.5rem !important; + font-family: 'kucat' !important; + content: "\e20b"; + color: var(--body-color); + text-decoration: none +} + +span[data-indicator="poll-status"]:not([data-style="active"]):before { + font-size: 1.5rem !important; + font-family: 'kucat' !important; + content: "\e20a"; + color: var(--body-color); + text-decoration: none +} + +#indicators span[data-indicator="poll-status"],{ + line-height: 1; + padding: 1rem; + cursor: pointer !important; + font-weight: normal !important; + margin: 0; + display: inline-block +} + +#indicators span[data-indicator="poll-status"]:hover { + border-radius: var(--radius1); + text-decoration: none +} + +span[data-indicator="uci-changes"],#indicators span[data-indicator="poll-status"] { font-size: 0 !important; cursor: pointer; background-repeat: no-repeat; @@ -979,7 +1023,7 @@ span[data-indicator="uci-changes"]:before { text-decoration: none } -span[data-indicator="poll-status"]:not([data-style="inactive"]):before { +#indicators span[data-indicator="poll-status"]:not([data-style="inactive"]):before { font-size: 1.5rem !important; font-family: 'kucat' !important; content: "\e936"; @@ -987,7 +1031,7 @@ span[data-indicator="poll-status"]:not([data-style="inactive"]):before { text-decoration: none } -span[data-indicator="poll-status"]:not([data-style="active"]):before { +#indicators span[data-indicator="poll-status"]:not([data-style="active"]):before { font-family: 'kucat' !important; font-size: 1.5rem !important; content: "\e932"; @@ -995,7 +1039,7 @@ span[data-indicator="poll-status"]:not([data-style="active"]):before { text-decoration: none } .pdboy-dark:hover,.pdboy-light:hover, -span[data-indicator="uci-changes"]:hover,span[data-indicator="poll-status"]:hover,.pdboy-qlogout:hover,.showSide:hover { +span[data-indicator="uci-changes"]:hover,#indicators span[data-indicator="poll-status"]:hover,.pdboy-qlogout:hover,.showSide:hover { background-color: var(--menu-hover-barbgcolor) !important; color: var(--menu-hover-color); border-radius: var(--radius1); @@ -1003,7 +1047,7 @@ span[data-indicator="uci-changes"]:hover,span[data-indicator="poll-status"]:hove } .pdboy-dark,.pdboy-light, -span[data-indicator="uci-changes"],span[data-indicator="poll-status"],.pdboy-qlogout { +span[data-indicator="uci-changes"],#indicators span[data-indicator="poll-status"],.pdboy-qlogout { line-height: 1; padding: 1rem; cursor: pointer !important; @@ -1089,63 +1133,6 @@ span[data-indicator="uci-changes"],span[data-indicator="poll-status"],.pdboy-qlo -moz-osx-font-smoothing: grayscale } -.danger { - background-color: #d9534f !important; - color: #eee -} - -.warning { - background-color: #b98413 !important; - margin: 0 0 0.5rem 0; - color: #eee -} - -.success { - background-color: #1a8361 !important; - color: #eee; - width: 14rem !important -} - -#log_textarea { - box-shadow: 0 1px 1px 0 rgba(0,0,0,0.16),0 0 1px 0 var(--input-boxcolor) -} - -.error { - color: #f00 -} - -.alert,.alert-message { - padding: 1rem; - border: 0; - font-weight: normal; - font-style: normal; - line-height: 1.6em; - font-family: inherit; - min-width: inherit; - overflow: unset; - border-radius: var(--radius1); - background-color: rgba(var(--primary-rgbbody),var(--primary-rgbm-ts)); - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 var(--input-boxcolor) -} - -.alert-message>* { - margin: 0; - white-space: normal -} - -.alert-message>h4 { - margin: 0.5rem; - color: red; - padding: 0.5rem 1rem; - font-weight: bold -} - -.errorbox { - color: #f8f8f8; - background-color: #f0ad4e; - border-color: #eea236 -} - .container .alert,.container .alert-message { margin-top: 1rem } @@ -1420,7 +1407,7 @@ h2 { h3 { font-size: var(--font-d); display: block; - margin: 0.5rem 0; + margin: 0.5rem 0 0 1rem; color: var(--primary-title-color); font-weight: bold; letter-spacing: 0.1rem; @@ -1433,7 +1420,7 @@ h4 { padding: 0.75rem 1.25rem; font-weight: 600; font-size: var(--font-z); - color: var(--primary-title-color) !important; + color: var(--primary-title-color) ; padding-bottom: 10px } @@ -2529,11 +2516,68 @@ select,input { min-width: 270px; max-width: 900px; min-height: 32px; + border-radius: var(--radius2) !important; + background-color: rgba(var(--primary-rgbbody), 1)!important; + color: var(--primary-title-color)!important; + box-shadow: 0 2px 10px 0px rgba(255, 255, 255, .16), 0 0 10px 0 rgba(255, 255, 255, .12); margin: 5em auto; padding: 1rem; - border-radius: var(--radius2) !important; - background-color: rgba(var(--primary-rgbbody),1)!important; - box-shadow: 0 2px 10px 0px rgba(255,255,255,.16),0 0 10px 0 rgba(255,255,255,.12) +} + +.danger { + background-color: #d9534f ; + color: #eee +} + +#log_textarea { + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.16),0 0 1px 0 var(--input-boxcolor) +} + +.error { + color: #f00 +} + +.alert,.alert-message { + padding: 1rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1.6em; + font-family: inherit; + min-width: inherit; + overflow: unset; + border-radius: var(--radius1); + background-color: rgba(var(--primary-rgbbody),var(--primary-rgbm-ts)); + box-shadow: 0 2px 2px 0 rgba(0,0,0,0.16),0 0 2px 0 var(--input-boxcolor) +} + +.alert-message>* { + margin: 0; + white-space: normal +} + +.alert-message>h4 { + margin: 0.5rem; + color: red; + padding: 0.5rem 1rem; + font-weight: bold +} + +.warning { + background-color: #b98413 !important; + color: #eee!important; +} + +.success { + background-color: #1a8361 !important; + color: #eee!important; + width: 14rem !important +} + +.errorbox { + color: #f8f8f8!important; + background-color: #f0ad4e!important; + border-color: #eea236 } #modal_overlay .cbi-section,.modal .cbi-section { @@ -2599,10 +2643,9 @@ select,input { } .notice { - background-color: #b98413 !important; - background-color: rgba(var(--primary-rgbm),1) !important; + color: var(--primary-title-color); + background-color: rgba(var(--primary-rgbbody), 1); padding: 2rem 1rem; - color: #eee } .modal>p { font-size: var(--font-x); @@ -2718,9 +2761,8 @@ body.modal-overlay-active #modal_overlay { bottom: 0; left: .2em; width: 32px; - color: var(--body-color); content: ""; - + color: var(--body-color); background: url(../../resources/icons/loading.svg) no-repeat center, url(../../resources/icons/loading.gif) no-repeat center; background-size: 20px; @@ -4028,6 +4070,7 @@ pre.command-output { --bg-light: rgba(255, 255, 255, 0); --bg-gray: rgba(var(--primary-rgbm), 0.02); --text-title: var(--primary-title-color); + --text-secondary: var(--body-color); --border-color: rgba(255, 255, 255, 0); --border-light: rgba(255, 255, 255, 0); --text-primary: var(--inputtext-color); @@ -4189,12 +4232,11 @@ pre.command-output { .bandix-card , .stats-card { - background-color: rgba(var(--primary-rgbm), 0.1)!important; - border-radius: 0 !important; - box-shadow: 0 0 0 0 rgba(0, 0, 0, 0) !important; - margin-bottom: 0 !important; + background-color: rgba(var(--primary-rgbm), 0.05)!important; + box-shadow: 0 1px 3px 0 var(--input-boxcolor) !important; border: 0px solid #333!important; border-bottom: 0px solid var(--input-boxcolor)!important; + margin-bottom: 0 !important; overflow: auto!important; } @@ -4283,6 +4325,9 @@ border-bottom: 0px solid #f1f5f9!important; [data-page="admin-system-package-manager"] .modal>textarea { white-space: nowrap } +[data-page="admin-status-overview"] #view>div { + padding: 0rem 0rem 1rem 0.5rem; +} .main>.main-left,.cbi-section,[data-tab-title],[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear),#maincontent>.container>form,#maincontent>.container>form>div,.tabs,.cbi-tabmenu,.cbi-tooltip,#view>p,#view>div,#view>table { backdrop-filter: var(--ufilter); @@ -4392,24 +4437,29 @@ div#add_link_div { padding: 0.5rem } -div#file-manager-container { +#file-manager-container { margin-left: 0.5rem } -div#content-filemanager>div#file-list-container { - margin-top: 10px !important +#content-filemanager>#file-list-container { + margin-top: 10px !important; + min-width: 800px !important; + max-width: 100% !important; + width: auto !important; } -div#file-manager-container #file-table tr>th { +#file-manager-container #file-table tr>th { background-color: rgba(var(--primary-rgbm),1); color: var(--menu-color) } - -div#file-manager-container #status-bar { +#file-list-container table>tbody>tr>td span { + padding: 0.5rem; +} +#file-manager-container #status-bar { background-color: rgba(var(--primary-rgbm),0.3) } -div#file-manager-container #status-bar #status-info { +#file-manager-container #status-bar #status-info { color: var(--title-color) } @@ -4417,6 +4467,9 @@ div#file-manager-container #status-bar #status-info { background-color: rgba(var(--primary-rgbm),0.4) !important } +#file-list-container table>tbody>tr>td { + padding: 0.2rem +} .cbi-tabcontainer-content #editor-container { width: 100%; border: 1px solid var(--inputborder-color) @@ -4441,9 +4494,6 @@ div#file-manager-container #status-bar #status-info { --clr-header: var(--title-color) } -#file-list-container table>tbody>tr>td { - padding: 0.2rem -} .tr.cbi-section-table-row[id*="wolplus"],.tr.cbi-section-table-row[id*="firewall"] { flex-wrap: wrap; diff --git a/openwrt-passwall/luci-app-passwall/luasrc/controller/passwall.lua b/openwrt-passwall/luci-app-passwall/luasrc/controller/passwall.lua index 91b8c1a76b..d8161351b7 100644 --- a/openwrt-passwall/luci-app-passwall/luasrc/controller/passwall.lua +++ b/openwrt-passwall/luci-app-passwall/luasrc/controller/passwall.lua @@ -140,6 +140,7 @@ function link_add_node() local chunk = http.formvalue("chunk") local chunk_index = tonumber(http.formvalue("chunk_index")) local total_chunks = tonumber(http.formvalue("total_chunks")) + local group = http.formvalue("group") or "default" if chunk and chunk_index ~= nil and total_chunks ~= nil then -- 按顺序拼接到文件 @@ -154,7 +155,7 @@ function link_add_node() end -- 如果是最后一片,才执行 if chunk_index + 1 == total_chunks then - luci.sys.call("lua /usr/share/passwall/subscribe.lua add log") + luci.sys.call("lua /usr/share/passwall/subscribe.lua add " .. group) end end end diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua index 03d6fab6ce..f2ced5f226 100644 --- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua +++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua @@ -23,10 +23,12 @@ o.default = translate("Remarks") o.rmempty = false o = s:option(Value, "group", translate("Group Name")) +o.default = "" +o:value("", translate("default")) local groups = {} m.uci:foreach(appname, "nodes", function(s) if s[".name"] ~= arg[1] then - if s.group then + if s.group and s.group ~= "" then groups[s.group] = true end end diff --git a/openwrt-passwall/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm b/openwrt-passwall/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm index a91103c6b5..7e1859b1d8 100644 --- a/openwrt-passwall/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm +++ b/openwrt-passwall/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm @@ -4,7 +4,7 @@ local api = require "luci.passwall.api" @@ -93,6 +173,24 @@ local api = require "luci.passwall.api" +