read size to multi buffer

pull/1008/head
Darien Raymond 2018-04-02 00:25:42 +02:00
parent 5af3580bcf
commit 03512a6a9b
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
2 changed files with 25 additions and 5 deletions

View File

@ -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)

View File

@ -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