summaryrefslogtreecommitdiff
path: root/tmp/socket.go
diff options
context:
space:
mode:
Diffstat (limited to 'tmp/socket.go')
-rw-r--r--tmp/socket.go84
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")
+}