diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2021-08-27 21:38:16 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2021-08-27 21:38:16 +0300 |
| commit | 2f01cc1db51368f36ba6ae664a3b0db9234f683f (patch) | |
| tree | fb4a869419816fe4fd83440611a9bc7b6a8140df /pkg/server/socket/listen.go | |
| parent | 3015840d9835717762de52e091adb58f1e2e3b63 (diff) | |
add origin host and port to env
Diffstat (limited to 'pkg/server/socket/listen.go')
| -rw-r--r-- | pkg/server/socket/listen.go | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/pkg/server/socket/listen.go b/pkg/server/socket/listen.go index 9d19677..6848620 100644 --- a/pkg/server/socket/listen.go +++ b/pkg/server/socket/listen.go @@ -52,36 +52,48 @@ func (s *listenSocket) Prepare(e env.Env) error { return nil } +func setOriginHostPort(env env.Env, origin, host, port string) { + env.Set("origin", origin) + env.Set("origin.host", host) + env.Set("origin.port", port) +} + func (s *listenSocket) New(env env.Env) (Conn, error) { - var original string + var origin string conn, err := s.listen.Accept() if err != nil { return nil, err } - la, ra := conn.LocalAddr(), conn.RemoteAddr() - desc := fmt.Sprintf("%s/%s->%s", la.Network(), ra, la) + ra := conn.RemoteAddr() + desc := fmt.Sprintf("%s/%s->%s", s.Proto, ra, s.Addr) info := fmt.Sprintf("<%s/%s", ra.Network(), ra) if s.Redirect { - if err := getConnOriginalAddr(conn, &original); err != nil { - log.Println("accept", desc, "failed") - conn.Close() - return nil, err - } else { - env.Set("original", original) + host, port, err := getConnOriginalHostPort(conn) + if err != nil { + defer conn.Close() + return nil, fmt.Errorf("accept %s failed: %s", desc, err) } + origin = net.JoinHostPort(host, port) + setOriginHostPort(env, origin, host, port) } if s.Tproxy { - env.Set("original", la.String()) + origin = conn.LocalAddr().String() + host, port, err := net.SplitHostPort(origin) + if err != nil { + defer conn.Close() + return nil, fmt.Errorf("accept %s failed: %s", desc, err) + } + setOriginHostPort(env, origin, host, port) } - if original == "" { + if origin == "" { log.Println("accept", desc) } else { - log.Println("accept", desc, "original", original) + log.Println("accept", desc, "origin", origin) } return newConn(conn, desc, info), nil |
