diff options
Diffstat (limited to 'tmp/socket.go')
| -rw-r--r-- | tmp/socket.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/tmp/socket.go b/tmp/socket.go new file mode 100644 index 0000000..febd650 --- /dev/null +++ b/tmp/socket.go @@ -0,0 +1,84 @@ +package server + +import ( + "strconv" + "fmt" +) + +const MAXPORT = 1 << 16 - 1 + +type tcpListen struct { + addr string +} + +type tcpOut struct { + addr string +} + +func (t *tcpListen) Open() (proto, error) { + return nil, errNotImplemented +} + +func (t *tcpListen) Close() error { + return nil +} + +func (t *tcpListen) String() string { + return fmt.Sprintf("tcp <- %s", t.addr) +} + +func (t *tcpOut) Open() (proto, error) { + return nil, errNotImplemented +} + +func (t *tcpOut) Close() error { + return nil +} + +func (t *tcpOut) String() string { + return fmt.Sprintf("tcp -> %s", t.addr) +} + +func parsePort(r *request, s string) int { + port, err := strconv.Atoi(s) + if err != nil { + r.Fatalf("bad port value: %v", err) + } + if port <= 0 || port > MAXPORT { + r.Fatal("bad port value") + } + return port +} + +func addTcpListen(r *request) { + r.expect(1, 2) + + var host string + var n int + + if r.argc > 1 { + host = r.args[n] + n++ + } + + port := parsePort(r, r.args[n]) + t := &tcpListen{addr: fmt.Sprintf("%s:%d", host, port)} + + r.c.s.proto.add(t) +} + +func addTcpOut(r *request) { + r.expect(2) + + host := r.args[0] + port := parsePort(r, r.args[1]) + + t := &tcpOut{addr: fmt.Sprintf("%s:%d", host, port)} + + r.c.s.proto.add(t) +} + +func init() { + newCmd(addTcpListen, "add", "tcp", "listen") + newCmd(addTcpOut, "add", "tcp", "out") +} |
