refactor: Geodata initialization
This commit is contained in:
parent
cca701c641
commit
68bf6f16ac
2 changed files with 9 additions and 22 deletions
|
@ -51,6 +51,7 @@ type General struct {
|
||||||
IPv6 bool `json:"ipv6"`
|
IPv6 bool `json:"ipv6"`
|
||||||
Interface string `json:"interface-name"`
|
Interface string `json:"interface-name"`
|
||||||
RoutingMark int `json:"-"`
|
RoutingMark int `json:"-"`
|
||||||
|
GeoXUrl GeoXUrl `json:"geox-url"`
|
||||||
GeodataMode bool `json:"geodata-mode"`
|
GeodataMode bool `json:"geodata-mode"`
|
||||||
GeodataLoader string `json:"geodata-loader"`
|
GeodataLoader string `json:"geodata-loader"`
|
||||||
TCPConcurrent bool `json:"tcp-concurrent"`
|
TCPConcurrent bool `json:"tcp-concurrent"`
|
||||||
|
@ -273,7 +274,7 @@ type RawConfig struct {
|
||||||
IPTables IPTables `yaml:"iptables"`
|
IPTables IPTables `yaml:"iptables"`
|
||||||
Experimental Experimental `yaml:"experimental"`
|
Experimental Experimental `yaml:"experimental"`
|
||||||
Profile Profile `yaml:"profile"`
|
Profile Profile `yaml:"profile"`
|
||||||
GeoXUrl RawGeoXUrl `yaml:"geox-url"`
|
GeoXUrl GeoXUrl `yaml:"geox-url"`
|
||||||
Proxy []map[string]any `yaml:"proxies"`
|
Proxy []map[string]any `yaml:"proxies"`
|
||||||
ProxyGroup []map[string]any `yaml:"proxy-groups"`
|
ProxyGroup []map[string]any `yaml:"proxy-groups"`
|
||||||
Rule []string `yaml:"rules"`
|
Rule []string `yaml:"rules"`
|
||||||
|
@ -282,7 +283,7 @@ type RawConfig struct {
|
||||||
Listeners []map[string]any `yaml:"listeners"`
|
Listeners []map[string]any `yaml:"listeners"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type RawGeoXUrl struct {
|
type GeoXUrl struct {
|
||||||
GeoIp string `yaml:"geoip" json:"geoip"`
|
GeoIp string `yaml:"geoip" json:"geoip"`
|
||||||
Mmdb string `yaml:"mmdb" json:"mmdb"`
|
Mmdb string `yaml:"mmdb" json:"mmdb"`
|
||||||
GeoSite string `yaml:"geosite" json:"geosite"`
|
GeoSite string `yaml:"geosite" json:"geosite"`
|
||||||
|
@ -418,7 +419,7 @@ func UnmarshalRawConfig(buf []byte) (*RawConfig, error) {
|
||||||
Profile: Profile{
|
Profile: Profile{
|
||||||
StoreSelected: true,
|
StoreSelected: true,
|
||||||
},
|
},
|
||||||
GeoXUrl: RawGeoXUrl{
|
GeoXUrl: GeoXUrl{
|
||||||
Mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb",
|
Mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb",
|
||||||
GeoIp: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat",
|
GeoIp: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat",
|
||||||
GeoSite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat",
|
GeoSite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat",
|
||||||
|
@ -448,7 +449,7 @@ func ParseRawConfig(rawCfg *RawConfig) (*Config, error) {
|
||||||
config.General = general
|
config.General = general
|
||||||
|
|
||||||
if len(config.General.GlobalClientFingerprint) != 0 {
|
if len(config.General.GlobalClientFingerprint) != 0 {
|
||||||
log.Debugln("GlobalClientFingerprint:%s", config.General.GlobalClientFingerprint)
|
log.Debugln("GlobalClientFingerprint: %s", config.General.GlobalClientFingerprint)
|
||||||
tlsC.SetGlobalUtlsClient(config.General.GlobalClientFingerprint)
|
tlsC.SetGlobalUtlsClient(config.General.GlobalClientFingerprint)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,6 +533,9 @@ func ParseRawConfig(rawCfg *RawConfig) (*Config, error) {
|
||||||
func parseGeneral(cfg *RawConfig) (*General, error) {
|
func parseGeneral(cfg *RawConfig) (*General, error) {
|
||||||
externalUI := cfg.ExternalUI
|
externalUI := cfg.ExternalUI
|
||||||
geodata.SetLoader(cfg.GeodataLoader)
|
geodata.SetLoader(cfg.GeodataLoader)
|
||||||
|
C.GeoIpUrl = cfg.GeoXUrl.GeoIp
|
||||||
|
C.GeoSiteUrl = cfg.GeoXUrl.GeoSite
|
||||||
|
C.MmdbUrl = cfg.GeoXUrl.Mmdb
|
||||||
// checkout externalUI exist
|
// checkout externalUI exist
|
||||||
if externalUI != "" {
|
if externalUI != "" {
|
||||||
externalUI = C.Path.Resolve(externalUI)
|
externalUI = C.Path.Resolve(externalUI)
|
||||||
|
@ -565,6 +569,7 @@ func parseGeneral(cfg *RawConfig) (*General, error) {
|
||||||
IPv6: cfg.IPv6,
|
IPv6: cfg.IPv6,
|
||||||
Interface: cfg.Interface,
|
Interface: cfg.Interface,
|
||||||
RoutingMark: cfg.RoutingMark,
|
RoutingMark: cfg.RoutingMark,
|
||||||
|
GeoXUrl: cfg.GeoXUrl,
|
||||||
GeodataMode: cfg.GeodataMode,
|
GeodataMode: cfg.GeodataMode,
|
||||||
GeodataLoader: cfg.GeodataLoader,
|
GeodataLoader: cfg.GeodataLoader,
|
||||||
TCPConcurrent: cfg.TCPConcurrent,
|
TCPConcurrent: cfg.TCPConcurrent,
|
||||||
|
|
|
@ -2,7 +2,6 @@ package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/Dreamacro/clash/component/geodata"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
C "github.com/Dreamacro/clash/constant"
|
C "github.com/Dreamacro/clash/constant"
|
||||||
|
@ -28,23 +27,6 @@ func Init(dir string) error {
|
||||||
f.Write([]byte(`mixed-port: 7890`))
|
f.Write([]byte(`mixed-port: 7890`))
|
||||||
f.Close()
|
f.Close()
|
||||||
}
|
}
|
||||||
buf, _ := os.ReadFile(C.Path.Config())
|
|
||||||
rawCfg, err := UnmarshalRawConfig(buf)
|
|
||||||
if err != nil {
|
|
||||||
log.Errorln(err.Error())
|
|
||||||
fmt.Printf("configuration file %s test failed\n", C.Path.Config())
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if !C.GeodataMode {
|
|
||||||
C.GeodataMode = rawCfg.GeodataMode
|
|
||||||
}
|
|
||||||
C.GeoIpUrl = rawCfg.GeoXUrl.GeoIp
|
|
||||||
C.GeoSiteUrl = rawCfg.GeoXUrl.GeoSite
|
|
||||||
C.MmdbUrl = rawCfg.GeoXUrl.Mmdb
|
|
||||||
// initial GeoIP
|
|
||||||
if err := geodata.InitGeoIP(); err != nil {
|
|
||||||
return fmt.Errorf("can't initial GeoIP: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue