This commit is contained in:
MetaCubeX
2022-03-17 23:24:07 +08:00
parent 30f1b29257
commit 435bee0ca2
37 changed files with 329 additions and 727 deletions

View File

@ -1,8 +1,12 @@
package logic
import C "github.com/Dreamacro/clash/constant"
import (
C "github.com/Dreamacro/clash/constant"
"github.com/Dreamacro/clash/rule/common"
)
type AND struct {
common.Base
rules []C.Rule
payload string
adapter string
@ -56,7 +60,3 @@ func (A *AND) Payload() string {
func (A *AND) ShouldResolveIP() bool {
return A.needIP
}
func (A *AND) RuleExtra() *C.RuleExtra {
return nil
}

View File

@ -74,31 +74,31 @@ func parseRule(tp, payload string, params []string) (C.Rule, error) {
switch tp {
case "DOMAIN":
parsed = RC.NewDomain(payload, "", nil)
parsed = RC.NewDomain(payload, "")
case "DOMAIN-SUFFIX":
parsed = RC.NewDomainSuffix(payload, "", nil)
parsed = RC.NewDomainSuffix(payload, "")
case "DOMAIN-KEYWORD":
parsed = RC.NewDomainKeyword(payload, "", nil)
parsed = RC.NewDomainKeyword(payload, "")
case "GEOSITE":
parsed, parseErr = RC.NewGEOSITE(payload, "", nil)
parsed, parseErr = RC.NewGEOSITE(payload, "")
case "GEOIP":
noResolve := RC.HasNoResolve(params)
parsed, parseErr = RC.NewGEOIP(payload, "", noResolve, nil)
parsed, parseErr = RC.NewGEOIP(payload, "", noResolve)
case "IP-CIDR", "IP-CIDR6":
noResolve := RC.HasNoResolve(params)
parsed, parseErr = RC.NewIPCIDR(payload, "", nil, RC.WithIPCIDRNoResolve(noResolve))
case "SRC-IP-CIDR":
parsed, parseErr = RC.NewIPCIDR(payload, "", nil, RC.WithIPCIDRSourceIP(true), RC.WithIPCIDRNoResolve(true))
case "SRC-PORT":
parsed, parseErr = RC.NewPort(payload, "", true, nil)
parsed, parseErr = RC.NewPort(payload, "", true)
case "DST-PORT":
parsed, parseErr = RC.NewPort(payload, "", false, nil)
parsed, parseErr = RC.NewPort(payload, "", false)
case "PROCESS-NAME":
parsed, parseErr = RC.NewProcess(payload, "", true, nil)
parsed, parseErr = RC.NewProcess(payload, "", true)
case "PROCESS-PATH":
parsed, parseErr = RC.NewProcess(payload, "", false, nil)
parsed, parseErr = RC.NewProcess(payload, "", false)
case "RULE-SET":
parsed, parseErr = provider.NewRuleSet(payload, "", nil)
parsed, parseErr = provider.NewRuleSet(payload, "")
case "NOT":
parsed, parseErr = NewNOT(payload, "")
case "AND":

View File

@ -3,9 +3,11 @@ package logic
import (
"fmt"
C "github.com/Dreamacro/clash/constant"
"github.com/Dreamacro/clash/rule/common"
)
type NOT struct {
common.Base
rule C.Rule
payload string
adapter string
@ -49,7 +51,3 @@ func (not *NOT) Payload() string {
func (not *NOT) ShouldResolveIP() bool {
return not.rule.ShouldResolveIP()
}
func (not *NOT) RuleExtra() *C.RuleExtra {
return nil
}

View File

@ -1,8 +1,12 @@
package logic
import C "github.com/Dreamacro/clash/constant"
import (
C "github.com/Dreamacro/clash/constant"
"github.com/Dreamacro/clash/rule/common"
)
type OR struct {
common.Base
rules []C.Rule
payload string
adapter string
@ -39,10 +43,6 @@ func (or *OR) ShouldResolveIP() bool {
return or.needIP
}
func (or *OR) RuleExtra() *C.RuleExtra {
return nil
}
func NewOR(payload string, adapter string) (*OR, error) {
or := &OR{payload: payload, adapter: adapter}
rules, err := parseRuleByPayload(payload)