(logger *clog.CondLogger, dialer HandlerDialer, address string, forward ForwardFunc)
| 10 | ) |
| 11 | |
| 12 | func PortForwardHandler(logger *clog.CondLogger, dialer HandlerDialer, address string, forward ForwardFunc) func(context.Context, net.Conn) { |
| 13 | return func(ctx context.Context, c net.Conn) { |
| 14 | if err := func() error { |
| 15 | defer c.Close() |
| 16 | username := "" |
| 17 | localAddr := c.LocalAddr().String() |
| 18 | ctx = ddto.BoundDialerParamsToContext(ctx, nil, trimAddrPort(localAddr)) |
| 19 | ctx = ddto.FilterParamsToContext(ctx, nil, username) |
| 20 | logger.Info("Request: %v => %v %q %v %v %v", c.RemoteAddr().String(), localAddr, username, "STREAM", "CONNECT", address) |
| 21 | target, err := dialer.DialContext(ctx, "tcp", address) |
| 22 | if err != nil { |
| 23 | return fmt.Errorf("connect to %s failed: %w", address, err) |
| 24 | } |
| 25 | defer target.Close() |
| 26 | return forward(ctx, username, c, target, "tcp", address) |
| 27 | }(); err != nil { |
| 28 | logger.Error("handler failure: %v", err) |
| 29 | } |
| 30 | } |
| 31 | } |
no test coverage detected