diff --git a/proxy/vmess/inbound/inbound.go b/proxy/vmess/inbound/inbound.go index ae42015e1..dd0f40a22 100644 --- a/proxy/vmess/inbound/inbound.go +++ b/proxy/vmess/inbound/inbound.go @@ -174,15 +174,7 @@ func (h *Handler) RemoveUser(ctx context.Context, email string) error { return nil } -func transferRequest(timer signal.ActivityUpdater, session *encoding.ServerSession, request *protocol.RequestHeader, input io.Reader, output buf.Writer) error { - bodyReader := session.DecodeRequestBody(request, input) - if err := buf.Copy(bodyReader, output, buf.UpdateActivity(timer)); err != nil { - return newError("failed to transfer request").Base(err) - } - return nil -} - -func transferResponse(timer signal.ActivityUpdater, session *encoding.ServerSession, request *protocol.RequestHeader, response *protocol.ResponseHeader, input buf.Reader, output io.Writer) error { +func transferResponse(timer signal.ActivityUpdater, session *encoding.ServerSession, request *protocol.RequestHeader, response *protocol.ResponseHeader, input buf.Reader, output *buf.BufferedWriter) error { session.EncodeResponseHeader(response, output) bodyWriter := session.EncodeResponseBody(request, output) @@ -199,10 +191,8 @@ func transferResponse(timer signal.ActivityUpdater, session *encoding.ServerSess } } - if bufferedWriter, ok := output.(*buf.BufferedWriter); ok { - if err := bufferedWriter.SetBuffered(false); err != nil { - return err - } + if err := output.SetBuffered(false); err != nil { + return err } if err := buf.Copy(input, bodyWriter, buf.UpdateActivity(timer)); err != nil { @@ -285,7 +275,12 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection i requestDone := func() error { defer timer.SetTimeout(sessionPolicy.Timeouts.DownlinkOnly) - return transferRequest(timer, svrSession, request, reader, link.Writer) + + bodyReader := svrSession.DecodeRequestBody(request, reader) + if err := buf.Copy(bodyReader, link.Writer, buf.UpdateActivity(timer)); err != nil { + return newError("failed to transfer request").Base(err) + } + return nil } responseDone := func() error {