1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package common
- import (
- "fmt"
- "github.com/metacubex/mihomo/component/geodata"
- _ "github.com/metacubex/mihomo/component/geodata/memconservative"
- "github.com/metacubex/mihomo/component/geodata/router"
- _ "github.com/metacubex/mihomo/component/geodata/standard"
- C "github.com/metacubex/mihomo/constant"
- "github.com/metacubex/mihomo/log"
- )
- type GEOSITE struct {
- *Base
- country string
- adapter string
- matcher router.DomainMatcher
- recodeSize int
- }
- func (gs *GEOSITE) RuleType() C.RuleType {
- return C.GEOSITE
- }
- func (gs *GEOSITE) Match(metadata *C.Metadata) (bool, string) {
- domain := metadata.RuleHost()
- if len(domain) == 0 {
- return false, ""
- }
- return gs.matcher.ApplyDomain(domain), gs.adapter
- }
- func (gs *GEOSITE) Adapter() string {
- return gs.adapter
- }
- func (gs *GEOSITE) Payload() string {
- return gs.country
- }
- func (gs *GEOSITE) GetDomainMatcher() router.DomainMatcher {
- return gs.matcher
- }
- func (gs *GEOSITE) GetRecodeSize() int {
- return gs.recodeSize
- }
- func NewGEOSITE(country string, adapter string) (*GEOSITE, error) {
- if err := geodata.InitGeoSite(); err != nil {
- log.Errorln("can't initial GeoSite: %s", err)
- return nil, err
- }
- matcher, size, err := geodata.LoadGeoSiteMatcher(country)
- if err != nil {
- return nil, fmt.Errorf("load GeoSite data error, %s", err.Error())
- }
- log.Infoln("Start initial GeoSite rule %s => %s, records: %d", country, adapter, size)
- geoSite := &GEOSITE{
- Base: &Base{},
- country: country,
- adapter: adapter,
- matcher: matcher,
- recodeSize: size,
- }
- return geoSite, nil
- }
- var _ C.Rule = (*GEOSITE)(nil)
|