Change: replace FINAL with MATCH in a progressive way

This commit is contained in:
Dreamacro 2018-11-21 18:21:24 +08:00
parent c7a349e1fe
commit 05bf4d44ab
3 changed files with 28 additions and 13 deletions

View File

@ -145,8 +145,9 @@ Rule:
- DOMAIN-SUFFIX,ad.com,REJECT - DOMAIN-SUFFIX,ad.com,REJECT
- IP-CIDR,127.0.0.0/8,DIRECT - IP-CIDR,127.0.0.0/8,DIRECT
- GEOIP,CN,DIRECT - GEOIP,CN,DIRECT
# note: there is two "," # FINAL would remove after prerelease
- FINAL,,Proxy # you also can use `FINAL,Proxy` or `FINAL,,Proxy` now
- MATCH,Proxy
``` ```
## Thanks ## Thanks

View File

@ -275,25 +275,39 @@ func parseRules(cfg *rawConfig) ([]C.Rule, error) {
rulesConfig := cfg.Rule rulesConfig := cfg.Rule
// parse rules // parse rules
for _, line := range rulesConfig { for idx, line := range rulesConfig {
rule := strings.Split(line, ",") rule := trimArr(strings.Split(line, ","))
if len(rule) < 3 { var (
continue payload string
target string
)
switch len(rule) {
case 2:
target = rule[1]
case 3:
payload = rule[1]
target = rule[2]
default:
return nil, fmt.Errorf("Rules[%d] error: format invalid", idx)
} }
rule = trimArr(rule) rule = trimArr(rule)
switch rule[0] { switch rule[0] {
case "DOMAIN": case "DOMAIN":
rules = append(rules, R.NewDomain(rule[1], rule[2])) rules = append(rules, R.NewDomain(payload, target))
case "DOMAIN-SUFFIX": case "DOMAIN-SUFFIX":
rules = append(rules, R.NewDomainSuffix(rule[1], rule[2])) rules = append(rules, R.NewDomainSuffix(payload, target))
case "DOMAIN-KEYWORD": case "DOMAIN-KEYWORD":
rules = append(rules, R.NewDomainKeyword(rule[1], rule[2])) rules = append(rules, R.NewDomainKeyword(payload, target))
case "GEOIP": case "GEOIP":
rules = append(rules, R.NewGEOIP(rule[1], rule[2])) rules = append(rules, R.NewGEOIP(payload, target))
case "IP-CIDR", "IP-CIDR6": case "IP-CIDR", "IP-CIDR6":
rules = append(rules, R.NewIPCIDR(rule[1], rule[2])) rules = append(rules, R.NewIPCIDR(payload, target))
case "MATCH":
fallthrough
case "FINAL": case "FINAL":
rules = append(rules, R.NewFinal(rule[2])) rules = append(rules, R.NewFinal(target))
} }
} }

View File

@ -97,7 +97,7 @@ func (t *Tunnel) handleConn(localConn C.ServerAdapter) {
} }
remoConn, err := proxy.Generator(metadata) remoConn, err := proxy.Generator(metadata)
if err != nil { if err != nil {
log.Warnln("Proxy connect error: %s", err.Error()) log.Warnln("Proxy[%s] connect [%s] error: %s", proxy.Name(), metadata.String(), err.Error())
return return
} }
defer remoConn.Close() defer remoConn.Close()