| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | package muximport (	"io"	"v2ray.com/core/common/buf"	"v2ray.com/core/common/crypto"	"v2ray.com/core/common/serial")// PacketReader is an io.Reader that reads whole chunk of Mux frames every time.type PacketReader struct {	reader io.Reader	eof    bool}// NewPacketReader creates a new PacketReader.func NewPacketReader(reader io.Reader) *PacketReader {	return &PacketReader{		reader: reader,		eof:    false,	}}// ReadMultiBuffer implements buf.Reader.func (r *PacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) {	if r.eof {		return nil, io.EOF	}	size, err := serial.ReadUint16(r.reader)	if err != nil {		return nil, err	}	if size > buf.Size {		return nil, newError("packet size too large: ", size)	}	b := buf.New()	if err := b.Reset(buf.ReadFullFrom(r.reader, int32(size))); err != nil {		b.Release()		return nil, err	}	r.eof = true	return buf.NewMultiBufferValue(b), nil}// NewStreamReader creates a new StreamReader.func NewStreamReader(reader *buf.BufferedReader) buf.Reader {	return crypto.NewChunkStreamReaderWithChunkCount(crypto.PlainChunkSizeParser{}, reader, 1)}
 |