diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2020-05-19 01:47:49 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2020-05-23 01:14:11 +0300 |
| commit | 1c4c61c90272fe251245da5f30b6134ba5a410f1 (patch) | |
| tree | d2809dd944de691e66422aec1becb4acc17b9a19 /pkg/server/socket/dial.go | |
| parent | 2c5259a594f5d8ddf12691deb6a79a0b566f024e (diff) | |
add redirect listen option
Diffstat (limited to 'pkg/server/socket/dial.go')
| -rw-r--r-- | pkg/server/socket/dial.go | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/pkg/server/socket/dial.go b/pkg/server/socket/dial.go index d7b232c..728269e 100644 --- a/pkg/server/socket/dial.go +++ b/pkg/server/socket/dial.go @@ -2,6 +2,7 @@ package socket import ( "fmt" + "log" "net" "strings" "tunnel/pkg/server/env" @@ -12,13 +13,6 @@ type dialSocket struct { } func newDialSocket(proto, addr string) (S, error) { - switch proto { - case "tcp", "udp": - if !strings.Contains(addr, ":") { - addr = "localhost:" + addr - } - } - return &dialSocket{proto: proto, addr: addr}, nil } @@ -27,15 +21,27 @@ func (s *dialSocket) String() string { } func (s *dialSocket) Open(e env.Env) (Conn, error) { - conn, err := net.Dial(s.proto, e.Eval(s.addr)) + addr := e.Eval(s.addr) + + switch s.proto { + case "tcp", "udp": + if !strings.Contains(addr, ":") { + addr = "localhost:" + addr + } + } + + conn, err := net.Dial(s.proto, addr) if err != nil { return nil, err } - addr := conn.RemoteAddr() - info := fmt.Sprintf(">%s/%s", addr.Network(), addr) + la, ra := conn.LocalAddr(), conn.RemoteAddr() + desc := fmt.Sprintf("%s/%s->%s", la.Network(), la, ra) + info := fmt.Sprintf(">%s/%s", ra.Network(), ra) + + log.Println("dial", desc) - return exported{info, newConn(conn)}, nil + return newConn(conn, desc, info), nil } func (s *dialSocket) Close() { |
