From d9b59133cca3c23017b9d8df3c7290030359f27d Mon Sep 17 00:00:00 2001 From: v2ray Date: Sat, 11 Jun 2016 01:37:33 +0200 Subject: [PATCH] Properly close inbound when no payload --- proxy/vmess/inbound/inbound.go | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/proxy/vmess/inbound/inbound.go b/proxy/vmess/inbound/inbound.go index 9ef428b9..715c3373 100644 --- a/proxy/vmess/inbound/inbound.go +++ b/proxy/vmess/inbound/inbound.go @@ -191,14 +191,13 @@ func (this *VMessInboundHandler) HandleConnection(connection *hub.Connection) { session.EncodeResponseHeader(response, writer) bodyWriter := session.EncodeResponseBody(writer) + var v2writer v2io.Writer = v2io.NewAdaptiveWriter(bodyWriter) + if request.Option.Has(protocol.RequestOptionChunkStream) { + v2writer = vmessio.NewAuthChunkWriter(v2writer) + } // Optimize for small response packet if data, err := output.Read(); err == nil { - var v2writer v2io.Writer = v2io.NewAdaptiveWriter(bodyWriter) - if request.Option.Has(protocol.RequestOptionChunkStream) { - v2writer = vmessio.NewAuthChunkWriter(v2writer) - } - if err := v2writer.Write(data); err != nil { connection.SetReusable(false) } @@ -210,14 +209,14 @@ func (this *VMessInboundHandler) HandleConnection(connection *hub.Connection) { connection.SetReusable(false) } - output.Release() - if request.Option.Has(protocol.RequestOptionChunkStream) { - if err := v2writer.Write(alloc.NewSmallBuffer().Clear()); err != nil { - connection.SetReusable(false) - } - } - v2writer.Release() } + output.Release() + if request.Option.Has(protocol.RequestOptionChunkStream) { + if err := v2writer.Write(alloc.NewSmallBuffer().Clear()); err != nil { + connection.SetReusable(false) + } + } + v2writer.Release() readFinish.Lock() }