func argsCheck() *tunnel.Options { var options tunnel.Options var tgw string var rc4Key string flag.BoolVar(&options.TunnelServer, "tunnel_server", false, "work as tunnel server or client") flag.BoolVar(&options.Front, "front", false, "work as front door or back door") flag.StringVar(&tgw, "tgw", "", "tgw header") flag.StringVar(&rc4Key, "rc4", "the answer to life, the universe and everything", "rc4 key, disable if no key") flag.StringVar(&options.FrontAddr, "front_addr", "0.0.0.0:8001", "front door address(0.0.0.0:8001)") flag.StringVar(&options.TunnelAddr, "tunnel_addr", "0.0.0.0:8002", "tunnel door address(0.0.0.0:8002)") flag.IntVar(&options.LogLevel, "log", 1, "larger value for detail log") flag.Usage = usage flag.Parse() options.Capacity = 65535 options.Tgw = bytes.ToLower([]byte(tgw)) options.Rc4Key = []byte(rc4Key) if len(options.Rc4Key) > 256 { fmt.Println("rc4 key at most 256 bytes") os.Exit(1) } if !options.Front { args := flag.Args() if len(args) < 1 { usage() } else { options.ConfigFile = args[0] } } return &options }