summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/tunnel/main.go44
-rw-r--r--cmd/tunneld/main.go28
2 files changed, 61 insertions, 11 deletions
diff --git a/cmd/tunnel/main.go b/cmd/tunnel/main.go
index 302b60e..5c6029e 100644
--- a/cmd/tunnel/main.go
+++ b/cmd/tunnel/main.go
@@ -1,31 +1,63 @@
package main
import (
+ "errors"
+ "flag"
"fmt"
"log"
"os"
"strings"
+ "syscall"
"tunnel/pkg/client"
+ "tunnel/pkg/config"
)
+var systemSocketVar bool
+
func init() {
log.SetFlags(0)
+
+ flag.BoolVar(&systemSocketVar, "system", false, "use system instance")
+}
+
+func getSocketPath() string {
+ if systemSocketVar {
+ return getSystemSocketPath()
+ }
+
+ s, err := config.GetSocketPath()
+ if err != nil {
+ log.Fatal(err)
+ }
+ return s
+}
+
+func getSystemSocketPath() string {
+ s, err := config.GetSystemSocketPath()
+ if err != nil {
+ log.Fatal(err)
+ }
+ return s
}
func main() {
- var args = os.Args
+ flag.Parse()
- if len(args) < 2 {
- fmt.Fprintln(os.Stderr, "bad usage")
- os.Exit(1)
+ if flag.NArg() < 1 {
+ log.Fatalf("Usage: %s command [arguments], try help", os.Args[0])
}
- c, err := client.New()
+ user, system := getSocketPath(), getSystemSocketPath()
+
+ c, err := client.New(user)
if err != nil {
+ if user != system && errors.Is(err, syscall.ENOENT) {
+ c, err = client.New(system)
+ }
log.Fatal(err)
}
- reply, err := c.Send(args[1:])
+ reply, err := c.Send(flag.Args())
if err != nil {
c.Close()
log.Fatal(err)
diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go
index 1ffb99e..cd8afda 100644
--- a/cmd/tunneld/main.go
+++ b/cmd/tunneld/main.go
@@ -1,11 +1,14 @@
package main
import (
+ "errors"
"flag"
"log"
"os"
"os/signal"
+ "path"
"syscall"
+ "tunnel/pkg/config"
"tunnel/pkg/server"
)
@@ -39,19 +42,34 @@ func sighandler(c chan os.Signal, s *server.Server) {
}
}
+func getSocketPath() string {
+ s, err := config.GetSocketPath()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ if err := os.Mkdir(path.Dir(s), 0700); err != nil {
+ if !errors.Is(err, syscall.EEXIST) {
+ log.Fatal(err)
+ }
+ }
+
+ return s
+}
+
func main() {
flag.Parse()
initLog()
- var c = make(chan os.Signal)
-
- signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
-
- s, err := server.New()
+ s, err := server.New(getSocketPath())
if err != nil {
log.Fatal(err)
}
+ var c = make(chan os.Signal)
+
+ signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
+
go sighandler(c, s)
log.Print("ready")