summaryrefslogtreecommitdiff
path: root/cmd/tunneld
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/tunneld')
-rw-r--r--cmd/tunneld/main.go79
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)
}