|  | @@ -4,6 +4,7 @@ import (
 | 
	
		
			
				|  |  |  	"io"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	"v2ray.com/core/common/buf"
 | 
	
		
			
				|  |  | +	"v2ray.com/core/common/crypto"
 | 
	
		
			
				|  |  |  	"v2ray.com/core/common/serial"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -64,35 +65,7 @@ func (r *PacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
 | 
	
		
			
				|  |  |  	return buf.NewMultiBufferValue(b), nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// StreamReader reads Mux frame as a stream.
 | 
	
		
			
				|  |  | -type StreamReader struct {
 | 
	
		
			
				|  |  | -	reader   *buf.BufferedReader
 | 
	
		
			
				|  |  | -	leftOver int32
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  // NewStreamReader creates a new StreamReader.
 | 
	
		
			
				|  |  | -func NewStreamReader(reader *buf.BufferedReader) *StreamReader {
 | 
	
		
			
				|  |  | -	return &StreamReader{
 | 
	
		
			
				|  |  | -		reader:   reader,
 | 
	
		
			
				|  |  | -		leftOver: -1,
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// ReadMultiBuffer implmenets buf.Reader.
 | 
	
		
			
				|  |  | -func (r *StreamReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
 | 
	
		
			
				|  |  | -	if r.leftOver == 0 {
 | 
	
		
			
				|  |  | -		return nil, io.EOF
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	if r.leftOver == -1 {
 | 
	
		
			
				|  |  | -		size, err := serial.ReadUint16(r.reader)
 | 
	
		
			
				|  |  | -		if err != nil {
 | 
	
		
			
				|  |  | -			return nil, err
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		r.leftOver = int32(size)
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	mb, err := r.reader.ReadAtMost(r.leftOver)
 | 
	
		
			
				|  |  | -	r.leftOver -= mb.Len()
 | 
	
		
			
				|  |  | -	return mb, err
 | 
	
		
			
				|  |  | +func NewStreamReader(reader *buf.BufferedReader) buf.Reader {
 | 
	
		
			
				|  |  | +	return crypto.NewChunkStreamReaderWithChunkCount(crypto.PlainChunkSizeParser{}, reader, 1)
 | 
	
		
			
				|  |  |  }
 |