56 lines
966 B
Go
56 lines
966 B
Go
package constant
|
|
|
|
import (
|
|
"net/netip"
|
|
"strings"
|
|
|
|
"github.com/Dreamacro/clash/component/geodata/router"
|
|
)
|
|
|
|
type RuleExtra struct {
|
|
Network NetWork
|
|
SourceIPs []*netip.Prefix
|
|
ProcessNames []string
|
|
}
|
|
|
|
func (re *RuleExtra) NotMatchNetwork(network NetWork) bool {
|
|
return re.Network != ALLNet && re.Network != network
|
|
}
|
|
|
|
func (re *RuleExtra) NotMatchSourceIP(srcIP netip.Addr) bool {
|
|
if re.SourceIPs == nil {
|
|
return false
|
|
}
|
|
|
|
for _, ips := range re.SourceIPs {
|
|
if ips.Contains(srcIP) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (re *RuleExtra) NotMatchProcessName(processName string) bool {
|
|
if re.ProcessNames == nil {
|
|
return false
|
|
}
|
|
|
|
for _, pn := range re.ProcessNames {
|
|
if strings.EqualFold(pn, processName) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
type RuleGeoSite interface {
|
|
GetDomainMatcher() *router.DomainMatcher
|
|
}
|
|
|
|
type RuleGeoIP interface {
|
|
GetIPMatcher() *router.GeoIPMatcher
|
|
}
|
|
|
|
type RuleGroup interface {
|
|
GetRecodeSize() int
|
|
}
|