From 1d784231b09597d6bff17689c0149fe31bc18cb7 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Wed, 9 Nov 2022 08:41:30 +0800 Subject: [PATCH] fix: exclude-filter not work when filter is empty --- adapter/outboundgroup/groupbase.go | 69 ++++++++++++++---------------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/adapter/outboundgroup/groupbase.go b/adapter/outboundgroup/groupbase.go index 8dd57861..426a1282 100644 --- a/adapter/outboundgroup/groupbase.go +++ b/adapter/outboundgroup/groupbase.go @@ -71,59 +71,54 @@ func (gb *GroupBase) Touch() { } func (gb *GroupBase) GetProxies(touch bool) []C.Proxy { + var proxies []C.Proxy if len(gb.filterRegs) == 0 { - var proxies []C.Proxy for _, pd := range gb.providers { if touch { pd.Touch() } proxies = append(proxies, pd.Proxies()...) } - if len(proxies) == 0 { - return append(proxies, tunnel.Proxies()["COMPATIBLE"]) - } - return proxies - } + } else { + for i, pd := range gb.providers { + if touch { + pd.Touch() + } - for i, pd := range gb.providers { - if touch { - pd.Touch() - } + if pd.VehicleType() == types.Compatible { + gb.versions[i].Store(pd.Version()) + gb.proxies[i] = pd.Proxies() + continue + } - if pd.VehicleType() == types.Compatible { - gb.versions[i].Store(pd.Version()) - gb.proxies[i] = pd.Proxies() - continue - } + version := gb.versions[i].Load() + if version != pd.Version() && gb.versions[i].CompareAndSwap(version, pd.Version()) { + var ( + proxies []C.Proxy + newProxies []C.Proxy + ) - version := gb.versions[i].Load() - if version != pd.Version() && gb.versions[i].CompareAndSwap(version, pd.Version()) { - var ( - proxies []C.Proxy - newProxies []C.Proxy - ) - - proxies = pd.Proxies() - proxiesSet := map[string]struct{}{} - for _, filterReg := range gb.filterRegs { - for _, p := range proxies { - name := p.Name() - if mat, _ := filterReg.FindStringMatch(name); mat != nil { - if _, ok := proxiesSet[name]; !ok { - proxiesSet[name] = struct{}{} - newProxies = append(newProxies, p) + proxies = pd.Proxies() + proxiesSet := map[string]struct{}{} + for _, filterReg := range gb.filterRegs { + for _, p := range proxies { + name := p.Name() + if mat, _ := filterReg.FindStringMatch(name); mat != nil { + if _, ok := proxiesSet[name]; !ok { + proxiesSet[name] = struct{}{} + newProxies = append(newProxies, p) + } } } } + + gb.proxies[i] = newProxies } - - gb.proxies[i] = newProxies } - } - var proxies []C.Proxy - for _, p := range gb.proxies { - proxies = append(proxies, p...) + for _, p := range gb.proxies { + proxies = append(proxies, p...) + } } if len(proxies) == 0 {