summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-01-23 01:35:53 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-01-23 01:35:53 +0300
commitace11449468ebd41b84d5a41811db240c5d35eda (patch)
treeca5fafd1b42a2de3568e5c693552f428db0011a0
parentbd9866835bc61d7eb5e98fbd6f85252298974506 (diff)
add help
-rw-r--r--TODO6
-rw-r--r--cmd/tunneld/main.go2
-rw-r--r--pkg/server/cmds.go54
-rw-r--r--pkg/server/env.go1
-rw-r--r--pkg/server/server.go2
5 files changed, 62 insertions, 3 deletions
diff --git a/TODO b/TODO
index ed039ac..73ece23 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,8 @@
1. DONE ./pkg/server/server.go make request
2. DONE make chain commands
-3. add help command
+3. DONE add help command
4. DONE env set/get
+5. add simple tcp proxy:
+ add tcp server host port
+ add tcp client addr port
+ add stream $id1 $id2
diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go
index addb002..8bd4460 100644
--- a/cmd/tunneld/main.go
+++ b/cmd/tunneld/main.go
@@ -26,6 +26,8 @@ func main() {
s.Stop()
}()
+ log.Print("ready")
+
s.Run()
log.Print("exit")
diff --git a/pkg/server/cmds.go b/pkg/server/cmds.go
index f148991..e383dac 100644
--- a/pkg/server/cmds.go
+++ b/pkg/server/cmds.go
@@ -2,6 +2,7 @@ package server
import (
"strings"
+ "sort"
"log"
)
@@ -17,6 +18,10 @@ type node struct {
var cmds = newNode()
+func init() {
+ newCmd(help, "help")
+}
+
func newNode() *node {
return &node{m: map[string]*node{}}
}
@@ -61,3 +66,52 @@ func getCmd(path []string) (*cmd, []string) {
return nil, nil
}
+
+func help(r *request) {
+ var ss []string
+
+ var walker func ([]string, *node)
+
+ walker = func (path []string, node *node) {
+ if node.c != nil {
+ ss = append(ss, strings.Join(path, " "))
+ return
+ }
+
+ n := len(path)
+ path = append(path, "")
+
+ for k, v := range node.m {
+ path[n] = k
+ walker(path, v)
+ }
+ }
+
+ root := cmds
+
+ for _, s := range r.args {
+ root = root.m[s]
+
+ if root == nil {
+ break
+ }
+ }
+
+ if root == nil {
+ r.Print("nothing to help")
+ return
+ }
+
+ if root.c != nil {
+ r.Print("usage: ", root.c.name, " [...]")
+ return
+ }
+
+ walker(nil, root)
+
+ sort.Strings(ss)
+
+ for _, s := range ss {
+ r.Println(s)
+ }
+}
diff --git a/pkg/server/env.go b/pkg/server/env.go
index 6434432..eed6e67 100644
--- a/pkg/server/env.go
+++ b/pkg/server/env.go
@@ -98,7 +98,6 @@ func envShow(r *request) {
r.Println(k, v)
return true
})
-
case 1:
envGet(r)
}
diff --git a/pkg/server/server.go b/pkg/server/server.go
index 8b803e7..1248b1d 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -229,7 +229,7 @@ func (r *request) parse(query string) bool {
c, args := getCmd(strings.Split(query, " "))
if c == nil {
- r.Print("unknown command")
+ r.Print("command not found")
return false
}