refactor: adjust provider loading order, remove meaningless pointers
This commit is contained in:
parent
30eaa8add6
commit
2e74986fe4
3 changed files with 35 additions and 32 deletions
|
@ -151,7 +151,7 @@ type Config struct {
|
||||||
Users []auth.AuthUser
|
Users []auth.AuthUser
|
||||||
Proxies map[string]C.Proxy
|
Proxies map[string]C.Proxy
|
||||||
Providers map[string]providerTypes.ProxyProvider
|
Providers map[string]providerTypes.ProxyProvider
|
||||||
RuleProviders map[string]*providerTypes.RuleProvider
|
RuleProviders map[string]providerTypes.RuleProvider
|
||||||
Sniffer *Sniffer
|
Sniffer *Sniffer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,8 +523,8 @@ func parseProxies(cfg *RawConfig) (proxies map[string]C.Proxy, providersMap map[
|
||||||
return proxies, providersMap, nil
|
return proxies, providersMap, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseRules(cfg *RawConfig, proxies map[string]C.Proxy) ([]C.Rule, map[string]*providerTypes.RuleProvider, error) {
|
func parseRules(cfg *RawConfig, proxies map[string]C.Proxy) ([]C.Rule, map[string]providerTypes.RuleProvider, error) {
|
||||||
ruleProviders := map[string]*providerTypes.RuleProvider{}
|
ruleProviders := map[string]providerTypes.RuleProvider{}
|
||||||
log.Infoln("Geodata Loader mode: %s", geodata.LoaderName())
|
log.Infoln("Geodata Loader mode: %s", geodata.LoaderName())
|
||||||
// parse rule provider
|
// parse rule provider
|
||||||
for name, mapping := range cfg.RuleProvider {
|
for name, mapping := range cfg.RuleProvider {
|
||||||
|
@ -533,7 +533,7 @@ func parseRules(cfg *RawConfig, proxies map[string]C.Proxy) ([]C.Rule, map[strin
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ruleProviders[name] = &rp
|
ruleProviders[name] = rp
|
||||||
RP.SetRuleProvider(rp)
|
RP.SetRuleProvider(rp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,8 +82,9 @@ func ApplyConfig(cfg *config.Config, force bool) {
|
||||||
updateTun(cfg.Tun, cfg.DNS)
|
updateTun(cfg.Tun, cfg.DNS)
|
||||||
updateExperimental(cfg)
|
updateExperimental(cfg)
|
||||||
updateHosts(cfg.Hosts)
|
updateHosts(cfg.Hosts)
|
||||||
loadProvider(cfg.RuleProviders, cfg.Providers)
|
loadProxyProvider(cfg.Providers)
|
||||||
updateProfile(cfg)
|
updateProfile(cfg)
|
||||||
|
loadRuleProvider(cfg.RuleProviders)
|
||||||
|
|
||||||
log.SetLevel(cfg.General.LogLevel)
|
log.SetLevel(cfg.General.LogLevel)
|
||||||
}
|
}
|
||||||
|
@ -181,39 +182,41 @@ func updateProxies(proxies map[string]C.Proxy, providers map[string]provider.Pro
|
||||||
tunnel.UpdateProxies(proxies, providers)
|
tunnel.UpdateProxies(proxies, providers)
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateRules(rules []C.Rule, ruleProviders map[string]*provider.RuleProvider) {
|
func updateRules(rules []C.Rule, ruleProviders map[string]provider.RuleProvider) {
|
||||||
tunnel.UpdateRules(rules, ruleProviders)
|
tunnel.UpdateRules(rules, ruleProviders)
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadProvider(ruleProviders map[string]*provider.RuleProvider, proxyProviders map[string]provider.ProxyProvider) {
|
func loadProvider(pv provider.Provider) {
|
||||||
load := func(pv provider.Provider) {
|
if pv.VehicleType() == provider.Compatible {
|
||||||
if pv.VehicleType() == provider.Compatible {
|
log.Infoln("Start initial compatible provider %s", pv.Name())
|
||||||
log.Infoln("Start initial compatible provider %s", pv.Name())
|
} else {
|
||||||
} else {
|
log.Infoln("Start initial provider %s", (pv).Name())
|
||||||
log.Infoln("Start initial provider %s", (pv).Name())
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if err := (pv).Initial(); err != nil {
|
|
||||||
switch pv.Type() {
|
|
||||||
case provider.Proxy:
|
|
||||||
{
|
|
||||||
log.Warnln("initial proxy provider %s error: %v", (pv).Name(), err)
|
|
||||||
}
|
|
||||||
case provider.Rule:
|
|
||||||
{
|
|
||||||
log.Warnln("initial rule provider %s error: %v", (pv).Name(), err)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if err := (pv).Initial(); err != nil {
|
||||||
|
switch pv.Type() {
|
||||||
|
case provider.Proxy:
|
||||||
|
{
|
||||||
|
log.Warnln("initial proxy provider %s error: %v", (pv).Name(), err)
|
||||||
}
|
}
|
||||||
|
case provider.Rule:
|
||||||
|
{
|
||||||
|
log.Warnln("initial rule provider %s error: %v", (pv).Name(), err)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, proxyProvider := range proxyProviders {
|
func loadRuleProvider(ruleProviders map[string]provider.RuleProvider) {
|
||||||
load(proxyProvider)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, ruleProvider := range ruleProviders {
|
for _, ruleProvider := range ruleProviders {
|
||||||
load(*ruleProvider)
|
loadProvider(ruleProvider)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadProxyProvider(ruleProviders map[string]provider.ProxyProvider) {
|
||||||
|
for _, ruleProvider := range ruleProviders {
|
||||||
|
loadProvider(ruleProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ var (
|
||||||
rules []C.Rule
|
rules []C.Rule
|
||||||
proxies = make(map[string]C.Proxy)
|
proxies = make(map[string]C.Proxy)
|
||||||
providers map[string]provider.ProxyProvider
|
providers map[string]provider.ProxyProvider
|
||||||
ruleProviders map[string]*provider.RuleProvider
|
ruleProviders map[string]provider.RuleProvider
|
||||||
configMux sync.RWMutex
|
configMux sync.RWMutex
|
||||||
|
|
||||||
// Outbound Rule
|
// Outbound Rule
|
||||||
|
@ -62,7 +62,7 @@ func Rules() []C.Rule {
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateRules handle update rules
|
// UpdateRules handle update rules
|
||||||
func UpdateRules(newRules []C.Rule, rp map[string]*provider.RuleProvider) {
|
func UpdateRules(newRules []C.Rule, rp map[string]provider.RuleProvider) {
|
||||||
configMux.Lock()
|
configMux.Lock()
|
||||||
rules = newRules
|
rules = newRules
|
||||||
ruleProviders = rp
|
ruleProviders = rp
|
||||||
|
@ -80,7 +80,7 @@ func Providers() map[string]provider.ProxyProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
// RuleProviders return all loaded rule providers
|
// RuleProviders return all loaded rule providers
|
||||||
func RuleProviders() map[string]*provider.RuleProvider {
|
func RuleProviders() map[string]provider.RuleProvider {
|
||||||
return ruleProviders
|
return ruleProviders
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue