diff --git a/README.md b/README.md index efb29d43e..d5e502034 100644 --- a/README.md +++ b/README.md @@ -145,8 +145,9 @@ Rule: - DOMAIN-SUFFIX,ad.com,REJECT - IP-CIDR,127.0.0.0/8,DIRECT - GEOIP,CN,DIRECT -# note: there is two "," -- FINAL,,Proxy +# FINAL would remove after prerelease +# you also can use `FINAL,Proxy` or `FINAL,,Proxy` now +- MATCH,Proxy ``` ## Thanks diff --git a/config/config.go b/config/config.go index b62ba9d07..e3fdb848d 100644 --- a/config/config.go +++ b/config/config.go @@ -275,25 +275,39 @@ func parseRules(cfg *rawConfig) ([]C.Rule, error) { rulesConfig := cfg.Rule // parse rules - for _, line := range rulesConfig { - rule := strings.Split(line, ",") - if len(rule) < 3 { - continue + for idx, line := range rulesConfig { + rule := trimArr(strings.Split(line, ",")) + var ( + 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) switch rule[0] { case "DOMAIN": - rules = append(rules, R.NewDomain(rule[1], rule[2])) + rules = append(rules, R.NewDomain(payload, target)) case "DOMAIN-SUFFIX": - rules = append(rules, R.NewDomainSuffix(rule[1], rule[2])) + rules = append(rules, R.NewDomainSuffix(payload, target)) case "DOMAIN-KEYWORD": - rules = append(rules, R.NewDomainKeyword(rule[1], rule[2])) + rules = append(rules, R.NewDomainKeyword(payload, target)) case "GEOIP": - rules = append(rules, R.NewGEOIP(rule[1], rule[2])) + rules = append(rules, R.NewGEOIP(payload, target)) 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": - rules = append(rules, R.NewFinal(rule[2])) + rules = append(rules, R.NewFinal(target)) } } diff --git a/tunnel/tunnel.go b/tunnel/tunnel.go index c574adadd..264e0e8c8 100644 --- a/tunnel/tunnel.go +++ b/tunnel/tunnel.go @@ -97,7 +97,7 @@ func (t *Tunnel) handleConn(localConn C.ServerAdapter) { } remoConn, err := proxy.Generator(metadata) 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 } defer remoConn.Close()