|  | @@ -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 {
 |