general: use string slice instead of custom arrFlags type.

This commit is contained in:
nadoo 2017-08-12 12:20:25 +08:00
parent 085e6ba040
commit ed788fd1c7
2 changed files with 14 additions and 33 deletions

31
main.go
View File

@ -19,9 +19,9 @@ var conf struct {
Strategy string
CheckWebSite string
CheckDuration int
Listen arrFlags
Forward arrFlags
RuleFile arrFlags
Listen []string
Forward []string
RuleFile []string
}
var flag = conflag.New()
@ -108,34 +108,15 @@ func usage() {
fmt.Fprintf(os.Stderr, "\n")
}
type arrFlags []string
// implement flag.Value interface
func (i *arrFlags) String() string {
return ""
}
// implement flag.Value interface
func (i *arrFlags) Set(value string) error {
// for _, v := range *i {
// if v == value {
// return nil
// }
// }
*i = append(*i, value)
return nil
}
func main() {
flag.BoolVar(&conf.Verbose, "verbose", false, "verbose mode")
flag.StringVar(&conf.Strategy, "strategy", "rr", "forward strategy, default: rr")
flag.StringVar(&conf.CheckWebSite, "checkwebsite", "www.apple.com", "proxy check HTTP(NOT HTTPS) website address, format: HOST[:PORT], default port: 80")
flag.IntVar(&conf.CheckDuration, "checkduration", 30, "proxy check duration(seconds)")
flag.Var(&conf.Listen, "listen", "listen url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT")
flag.Var(&conf.Forward, "forward", "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]")
flag.Var(&conf.RuleFile, "rulefile", "rule file path")
flag.StringSliceVar(&conf.Listen, "listen", nil, "listen url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT")
flag.StringSliceVar(&conf.Forward, "forward", nil, "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]")
flag.StringSliceVar(&conf.RuleFile, "rulefile", nil, "rule file path")
flag.Usage = usage
err := flag.Parse()

16
rule.go
View File

@ -11,14 +11,14 @@ import (
// ruleForwarder, every ruleForwarder points to a rule file
type ruleForwarder struct {
Forward arrFlags
Forward []string
Strategy string
CheckWebSite string
CheckDuration int
Domain arrFlags
IP arrFlags
CIDR arrFlags
Domain []string
IP []string
CIDR []string
name string
Proxy
@ -29,14 +29,14 @@ func newRuleProxyFromFile(ruleFile string) (*ruleForwarder, error) {
p := &ruleForwarder{name: ruleFile}
f := conflag.NewFromFile("rule", ruleFile)
f.Var(&p.Forward, "forward", "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]")
f.StringSliceVar(&p.Forward, "forward", nil, "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]")
f.StringVar(&p.Strategy, "strategy", "rr", "forward strategy, default: rr")
f.StringVar(&p.CheckWebSite, "checkwebsite", "www.apple.com", "proxy check HTTP(NOT HTTPS) website address, format: HOST[:PORT], default port: 80")
f.IntVar(&p.CheckDuration, "checkduration", 30, "proxy check duration(seconds)")
f.Var(&p.Domain, "domain", "domain")
f.Var(&p.IP, "ip", "ip")
f.Var(&p.CIDR, "cidr", "cidr")
f.StringSliceVar(&p.Domain, "domain", nil, "domain")
f.StringSliceVar(&p.IP, "ip", nil, "ip")
f.StringSliceVar(&p.CIDR, "cidr", nil, "cidr")
err := f.Parse()
if err != nil {