|
|
@@ -118,11 +118,12 @@ func (h *Handler) Process(ctx context.Context, link *core.Link, dialer proxy.Dia
|
|
|
}
|
|
|
defer conn.Close() // nolint: errcheck
|
|
|
|
|
|
+ plcy := h.policy()
|
|
|
ctx, cancel := context.WithCancel(ctx)
|
|
|
- timer := signal.CancelAfterInactivity(ctx, cancel, h.policy().Timeouts.ConnectionIdle)
|
|
|
+ timer := signal.CancelAfterInactivity(ctx, cancel, plcy.Timeouts.ConnectionIdle)
|
|
|
|
|
|
requestDone := func() error {
|
|
|
- defer timer.SetTimeout(h.policy().Timeouts.DownlinkOnly)
|
|
|
+ defer timer.SetTimeout(plcy.Timeouts.DownlinkOnly)
|
|
|
|
|
|
var writer buf.Writer
|
|
|
if destination.Network == net.Network_TCP {
|
|
|
@@ -138,10 +139,15 @@ func (h *Handler) Process(ctx context.Context, link *core.Link, dialer proxy.Dia
|
|
|
}
|
|
|
|
|
|
responseDone := func() error {
|
|
|
- defer timer.SetTimeout(h.policy().Timeouts.UplinkOnly)
|
|
|
+ defer timer.SetTimeout(plcy.Timeouts.UplinkOnly)
|
|
|
|
|
|
- v2reader := buf.NewReader(conn)
|
|
|
- if err := buf.Copy(v2reader, output, buf.UpdateActivity(timer)); err != nil {
|
|
|
+ var reader buf.Reader
|
|
|
+ if plcy.Buffer.PerConnection == 0 {
|
|
|
+ reader = &buf.SingleReader{Reader: conn}
|
|
|
+ } else {
|
|
|
+ reader = buf.NewReader(conn)
|
|
|
+ }
|
|
|
+ if err := buf.Copy(reader, output, buf.UpdateActivity(timer)); err != nil {
|
|
|
return newError("failed to process response").Base(err)
|
|
|
}
|
|
|
|