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") }