|
|
@ -109,6 +109,8 @@ func (v *Handler) Process(ctx context.Context, outboundRay ray.OutboundRay, dial |
|
|
|
timer := signal.CancelAfterInactivity(ctx, cancel, sessionPolicy.Timeouts.ConnectionIdle) |
|
|
|
timer := signal.CancelAfterInactivity(ctx, cancel, sessionPolicy.Timeouts.ConnectionIdle) |
|
|
|
|
|
|
|
|
|
|
|
requestDone := signal.ExecuteAsync(func() error { |
|
|
|
requestDone := signal.ExecuteAsync(func() error { |
|
|
|
|
|
|
|
defer timer.SetTimeout(sessionPolicy.Timeouts.DownlinkOnly) |
|
|
|
|
|
|
|
|
|
|
|
writer := buf.NewBufferedWriter(buf.NewWriter(conn)) |
|
|
|
writer := buf.NewBufferedWriter(buf.NewWriter(conn)) |
|
|
|
if err := session.EncodeRequestHeader(request, writer); err != nil { |
|
|
|
if err := session.EncodeRequestHeader(request, writer); err != nil { |
|
|
|
return newError("failed to encode request").Base(err).AtWarning() |
|
|
|
return newError("failed to encode request").Base(err).AtWarning() |
|
|
@ -139,23 +141,23 @@ func (v *Handler) Process(ctx context.Context, outboundRay ray.OutboundRay, dial |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
timer.SetTimeout(sessionPolicy.Timeouts.DownlinkOnly) |
|
|
|
|
|
|
|
return nil |
|
|
|
return nil |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
responseDone := signal.ExecuteAsync(func() error { |
|
|
|
responseDone := signal.ExecuteAsync(func() error { |
|
|
|
defer output.Close() |
|
|
|
|
|
|
|
defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly) |
|
|
|
defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly) |
|
|
|
|
|
|
|
|
|
|
|
reader := buf.NewBufferedReader(buf.NewReader(conn)) |
|
|
|
reader := buf.NewBufferedReader(buf.NewReader(conn)) |
|
|
|
header, err := session.DecodeResponseHeader(reader) |
|
|
|
header, err := session.DecodeResponseHeader(reader) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
return newError("failed to read header").Base(err) |
|
|
|
} |
|
|
|
} |
|
|
|
v.handleCommand(rec.Destination(), header.Command) |
|
|
|
v.handleCommand(rec.Destination(), header.Command) |
|
|
|
|
|
|
|
|
|
|
|
reader.SetBuffered(false) |
|
|
|
reader.SetBuffered(false) |
|
|
|
bodyReader := session.DecodeResponseBody(request, reader) |
|
|
|
bodyReader := session.DecodeResponseBody(request, reader) |
|
|
|
|
|
|
|
|
|
|
|
return buf.Copy(bodyReader, output, buf.UpdateActivity(timer)) |
|
|
|
return buf.Copy(bodyReader, output, buf.UpdateActivity(timer)) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|