From 14824c8451c6ef75d4a3ccc31e970c19cb5884a3 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Mon, 27 Mar 2017 11:14:55 +0200 Subject: [PATCH] fix timeout reader usage --- common/buf/merge_reader.go | 14 ++++++++++---- proxy/vmess/outbound/outbound.go | 2 +- transport/ray/direct.go | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/common/buf/merge_reader.go b/common/buf/merge_reader.go index 33e97c39d..2a03b66b2 100644 --- a/common/buf/merge_reader.go +++ b/common/buf/merge_reader.go @@ -1,13 +1,15 @@ package buf type MergingReader struct { - reader Reader - leftover *Buffer + reader Reader + timeoutReader TimeoutReader + leftover *Buffer } func NewMergingReader(reader Reader) Reader { return &MergingReader{ - reader: reader, + reader: reader, + timeoutReader: reader.(TimeoutReader), } } @@ -25,7 +27,11 @@ func (r *MergingReader) Read() (*Buffer, error) { return b, nil } - b2, err := r.reader.Read() + if r.timeoutReader == nil { + return b, nil + } + + b2, err := r.timeoutReader.ReadTimeout(0) if err != nil { return b, nil } diff --git a/proxy/vmess/outbound/outbound.go b/proxy/vmess/outbound/outbound.go index c2e67a7e2..192cfbf36 100644 --- a/proxy/vmess/outbound/outbound.go +++ b/proxy/vmess/outbound/outbound.go @@ -114,7 +114,7 @@ func (v *Handler) Process(ctx context.Context, outboundRay ray.OutboundRay, dial bodyWriter := session.EncodeRequestBody(request, writer) firstPayload, err := input.ReadTimeout(time.Millisecond * 500) - if err != nil && err != ray.ErrReadTimeout { + if err != nil && err != buf.ErrReadTimeout { return errors.Base(err).Message("VMess|Outbound: Failed to get first payload.") } if !firstPayload.IsEmpty() { diff --git a/transport/ray/direct.go b/transport/ray/direct.go index 073f6df29..c069bc5b0 100644 --- a/transport/ray/direct.go +++ b/transport/ray/direct.go @@ -89,7 +89,7 @@ func (v *Stream) ReadTimeout(timeout time.Duration) (*buf.Buffer, error) { return b, nil default: if timeout == 0 { - return nil, ErrReadTimeout + return nil, buf.ErrReadTimeout } select {