mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2026-02-26 08:47:09 +00:00
45 lines
820 B
Go
45 lines
820 B
Go
package fakeip
|
|
|
|
import (
|
|
C "github.com/metacubex/mihomo/constant"
|
|
)
|
|
|
|
const (
|
|
UseFakeIP = "fake-ip"
|
|
UseRealIP = "real-ip"
|
|
)
|
|
|
|
type Skipper struct {
|
|
Rules []C.Rule
|
|
Host []C.DomainMatcher
|
|
Mode C.FilterMode
|
|
}
|
|
|
|
// ShouldSkipped return if domain should be skipped
|
|
func (p *Skipper) ShouldSkipped(domain string) bool {
|
|
if len(p.Rules) > 0 {
|
|
metadata := &C.Metadata{Host: domain}
|
|
for _, rule := range p.Rules {
|
|
if matched, action := rule.Match(metadata, C.RuleMatchHelper{}); matched {
|
|
return action == UseRealIP
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
should := p.shouldSkipped(domain)
|
|
if p.Mode == C.FilterWhiteList {
|
|
return !should
|
|
}
|
|
return should
|
|
}
|
|
|
|
func (p *Skipper) shouldSkipped(domain string) bool {
|
|
for _, matcher := range p.Host {
|
|
if matcher.MatchDomain(domain) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|