mirror of https://github.com/v2ray/v2ray-core
read size to multi buffer
parent
5af3580bcf
commit
03512a6a9b
|
@ -30,6 +30,26 @@ func ReadAllToMultiBuffer(reader io.Reader) (MultiBuffer, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReadSizeToMultiBuffer reads specific number of bytes from reader into a MultiBuffer.
|
||||||
|
func ReadSizeToMultiBuffer(reader io.Reader, size int32) (MultiBuffer, error) {
|
||||||
|
mb := NewMultiBufferCap(32)
|
||||||
|
|
||||||
|
for size > 0 {
|
||||||
|
bSize := size
|
||||||
|
if bSize > Size {
|
||||||
|
bSize = Size
|
||||||
|
}
|
||||||
|
b := NewSize(uint32(bSize))
|
||||||
|
if err := b.Reset(ReadFullFrom(reader, int(bSize))); err != nil {
|
||||||
|
mb.Release()
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
size -= bSize
|
||||||
|
mb.Append(b)
|
||||||
|
}
|
||||||
|
return mb, nil
|
||||||
|
}
|
||||||
|
|
||||||
// ReadAllToBytes reads all content from the reader into a byte array, until EOF.
|
// ReadAllToBytes reads all content from the reader into a byte array, until EOF.
|
||||||
func ReadAllToBytes(reader io.Reader) ([]byte, error) {
|
func ReadAllToBytes(reader io.Reader) ([]byte, error) {
|
||||||
mb, err := ReadAllToMultiBuffer(reader)
|
mb, err := ReadAllToMultiBuffer(reader)
|
||||||
|
|
|
@ -173,11 +173,11 @@ func (s *Server) handleConnect(ctx context.Context, request *http.Request, reade
|
||||||
}
|
}
|
||||||
|
|
||||||
if reader.Buffered() > 0 {
|
if reader.Buffered() > 0 {
|
||||||
payload := buf.NewSize(uint32(reader.Buffered()))
|
payload, err := buf.ReadSizeToMultiBuffer(reader, int32(reader.Buffered()))
|
||||||
common.Must(payload.Reset(func(b []byte) (int, error) {
|
if err != nil {
|
||||||
return reader.Read(b[:reader.Buffered()])
|
return err
|
||||||
}))
|
}
|
||||||
if err := ray.InboundInput().WriteMultiBuffer(buf.NewMultiBufferValue(payload)); err != nil {
|
if err := ray.InboundInput().WriteMultiBuffer(payload); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
reader = nil
|
reader = nil
|
||||||
|
|
Loading…
Reference in New Issue