summaryrefslogtreecommitdiff
path: root/pkg/server/help.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/help.go')
-rw-r--r--pkg/server/help.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/pkg/server/help.go b/pkg/server/help.go
new file mode 100644
index 0000000..16f2776
--- /dev/null
+++ b/pkg/server/help.go
@@ -0,0 +1,77 @@
+package server
+
+import (
+ "fmt"
+ "io"
+
+ "tunnel/pkg/server/hook"
+ "tunnel/pkg/server/opts"
+ "tunnel/pkg/server/socket"
+)
+
+func showHookList(r *request) {
+ for _, h := range hook.GetList() {
+ r.Println(h)
+ }
+}
+
+func showSocketList(r *request) {
+ for _, s := range socket.GetList() {
+ r.Println(s)
+ }
+}
+
+func showUsage(r *request, name, desc string, param []opts.Param) {
+ r.Printf("usage: %s", name)
+
+ for _, p := range param {
+ formatParamShort(r, p)
+ }
+
+ r.Printf("\n\n%s", desc)
+}
+
+func showHookHelp(r *request, name string) {
+ t := hook.GetType(name)
+ if t == nil {
+ r.Fatal("no such hook")
+ }
+
+ showUsage(r, t.Name, t.Desc, t.Param)
+}
+
+func formatParamShort(w io.Writer, p opts.Param) {
+ if !p.Required {
+ fmt.Fprint(w, "[")
+ }
+ fmt.Fprintf(w, ",%s", p.Name)
+
+ if p.Kind != opts.Bool {
+ fmt.Fprintf(w, "=%s", p.Kind)
+
+ if p.Default != "" {
+ fmt.Fprintf(w, "(%s)", p.Default)
+ }
+ }
+
+ if !p.Required {
+ fmt.Fprint(w, "]")
+ }
+}
+
+func showSocketHelp(r *request, name string) {
+ t := socket.GetType(name)
+ if t == nil {
+ r.Fatal("no such socket")
+ }
+
+ showUsage(r, t.Name, t.Desc, t.Param)
+}
+
+func init() {
+ newCmd("hook list", showHookList, "")
+ newCmd("hook help", showHookHelp, "hook-name")
+
+ newCmd("socket list", showSocketList, "")
+ newCmd("socket help", showSocketHelp, "socket-name")
+}