diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2022-03-08 15:27:14 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2022-03-08 15:32:47 +0300 |
| commit | 31a627f670fc24302d8cbd74f5696d7639c87585 (patch) | |
| tree | 8d508567a0493de086812381cf94f3388d5d701d /cmd/tunneld/main.go | |
| parent | 58e7593e2a187b798eaf8852859e0a1b730ffbfd (diff) | |
add socket name option
Diffstat (limited to 'cmd/tunneld/main.go')
| -rw-r--r-- | cmd/tunneld/main.go | 79 |
1 files changed, 48 insertions, 31 deletions
diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go index 86402ca..c03f4c9 100644 --- a/cmd/tunneld/main.go +++ b/cmd/tunneld/main.go @@ -21,33 +21,49 @@ import ( "tunnel/pkg/server" ) -var ( - debugFlag = flag.Bool("d", false, "debug: print time and source info") - forceFlag = flag.Bool("f", false, "try start with force") - syslogFlag = flag.Bool("s", false, "write log to syslog instead of stdout") - outputFlag = flag.String("o", "", "write log to file instead of stdout") - configFlag = flag.String("c", "", "path to configuration file") - socketFlag = flag.String("S", "", "path to control socket") - versionFlag = flag.Bool("version", false, "print version and exit") -) - var BuildVersion string const trimSize = 32 -func initLog() { - if *outputFlag != "" && *syslogFlag { +type programArgs struct { + debug bool + force bool + syslog bool + output string + config string + ctlrpath string + ctlrname string + version bool +} + +func parseArgs() programArgs { + var args programArgs + flag.BoolVar(&args.debug, "d", false, "debug: print time and source info") + flag.BoolVar(&args.force, "f", false, "try start with force") + flag.BoolVar(&args.syslog, "syslog", false, "write log to syslog instead of stdout") + flag.StringVar(&args.output, "o", "", "write log to file instead of stdout") + flag.StringVar(&args.config, "c", "", "path to configuration file") + flag.StringVar(&args.ctlrpath, "S", "", "path to control socket") + flag.StringVar(&args.ctlrname, "s", "", "name of control socket") + flag.BoolVar(&args.version, "version", false, "print version and exit") + + flag.Parse() + return args +} + +func initLog(args programArgs) { + if args.output != "" && args.syslog { log.Fatal("bad usage: duplicate log write flag") } - if *debugFlag && *syslogFlag { + if args.debug && args.syslog { log.Fatal("bad usage: debug with syslog is out of sense") } - if *outputFlag != "" { + if args.output != "" { const fileFlags = os.O_APPEND | os.O_CREATE | os.O_WRONLY - f, err := os.OpenFile(*outputFlag, fileFlags, 0644) + f, err := os.OpenFile(args.output, fileFlags, 0644) if err != nil { log.Fatalf("log: %s", err) } @@ -55,7 +71,7 @@ func initLog() { log.SetOutput(f) } - if *syslogFlag { + if args.syslog { sysLog, err := syslog.New(syslog.LOG_INFO, "tunneld") if err != nil { log.Fatalf("log: %s", err) @@ -66,11 +82,11 @@ func initLog() { var logFlags int - if *debugFlag { + if args.debug { logFlags |= log.Ldate | log.Ltime | log.Lshortfile } - if *outputFlag != "" { + if args.output != "" { logFlags |= log.Ldate | log.Ltime } @@ -99,12 +115,12 @@ func initSignals(s *server.Server) { go sighandler(c, s) } -func getSocketPath() string { - if *socketFlag != "" { - return *socketFlag +func getSocketPath(args programArgs) string { + if args.ctlrpath != "" { + return args.ctlrpath } - s := config.GetSocketPath() + s := config.GetSocketPath(args.ctlrname) if err := os.Mkdir(path.Dir(s), 0700); err != nil { if !errors.Is(err, syscall.EEXIST) { @@ -312,12 +328,12 @@ func runCommand(s *server.Server, name string) error { return nil } -func configure(s *server.Server) error { +func configure(s *server.Server, args programArgs) error { var file string var skip bool - if *configFlag != "" { - file = *configFlag + if args.config != "" { + file = args.config } else { file = config.GetConfigPath() skip = true @@ -350,21 +366,22 @@ func deconfigure(s *server.Server) error { func main() { log.SetFlags(0) - flag.Parse() - if *versionFlag { + args := parseArgs() + + if args.version { fmt.Fprintln(os.Stderr, BuildVersion) os.Exit(1) } - initLog() + initLog(args) if flag.NArg() > 0 { log.Fatal("bad usage: extra args") } - socket := getSocketPath() - if *forceFlag { + socket := getSocketPath(args) + if args.force { if err := os.Remove(socket); err != nil { if !errors.Is(err, syscall.ENOENT) { log.Fatal(err) @@ -377,7 +394,7 @@ func main() { log.Fatal(err) } - if err := configure(s); err != nil { + if err := configure(s, args); err != nil { s.Stop() log.Fatal(err) } |
