Fix ending in vmess reader.

pull/168/head v1.12.5
v2ray 2016-05-05 00:24:18 +02:00
parent a7f61af79b
commit 0bc846f016
3 changed files with 14 additions and 9 deletions

View File

@ -129,6 +129,8 @@ func (this *DokodemoDoor) HandleTCPConnection(conn *hub.Connection) {
outputFinish.Lock() outputFinish.Lock()
reader := v2net.NewTimeOutReader(this.config.Timeout, conn) reader := v2net.NewTimeOutReader(this.config.Timeout, conn)
defer reader.Release()
go func() { go func() {
v2reader := v2io.NewAdaptiveReader(reader) v2reader := v2io.NewAdaptiveReader(reader)
defer v2reader.Release() defer v2reader.Release()
@ -147,4 +149,5 @@ func (this *DokodemoDoor) HandleTCPConnection(conn *hub.Connection) {
}() }()
outputFinish.Lock() outputFinish.Lock()
inputFinish.Lock()
} }

View File

@ -62,12 +62,6 @@ func (this *AuthChunkReader) Read() (*alloc.Buffer, error) {
buffer = AllocBuffer(this.chunkLength).Clear() buffer = AllocBuffer(this.chunkLength).Clear()
} }
_, err := buffer.FillFrom(this.reader)
if err != nil {
buffer.Release()
return nil, err
}
if this.chunkLength == -1 { if this.chunkLength == -1 {
for buffer.Len() < 6 { for buffer.Len() < 6 {
_, err := buffer.FillFrom(this.reader) _, err := buffer.FillFrom(this.reader)
@ -80,6 +74,12 @@ func (this *AuthChunkReader) Read() (*alloc.Buffer, error) {
this.chunkLength = int(length) - 4 this.chunkLength = int(length) - 4
this.validator = NewValidator(serial.BytesLiteral(buffer.Value[2:6]).Uint32Value()) this.validator = NewValidator(serial.BytesLiteral(buffer.Value[2:6]).Uint32Value())
buffer.SliceFrom(6) buffer.SliceFrom(6)
} else if buffer.Len() < this.chunkLength {
_, err := buffer.FillFrom(this.reader)
if err != nil {
buffer.Release()
return nil, err
}
} }
if this.chunkLength == 0 { if this.chunkLength == 0 {

View File

@ -1,6 +1,8 @@
package scenarios package scenarios
import ( import (
"bytes"
"io"
"net" "net"
"testing" "testing"
@ -42,10 +44,10 @@ func TestDynamicVMess(t *testing.T) {
conn.CloseWrite() conn.CloseWrite()
response := make([]byte, 1024) response := bytes.NewBuffer(nil)
nBytes, err = conn.Read(response) _, err = io.Copy(response, conn)
assert.Error(err).IsNil() assert.Error(err).IsNil()
assert.StringLiteral("Processed: " + payload).Equals(string(response[:nBytes])) assert.StringLiteral("Processed: " + payload).Equals(string(response.Bytes()))
conn.Close() conn.Close()
} }