ceremonyclient/go-libp2p/p2p/protocol/autonatv2/msg_reader.go
Cassandra Heart dbd95bd9e9
v2.1.0 (#439)
* v2.1.0 [omit consensus and adjacent] - this commit will be amended with the full release after the file copy is complete

* 2.1.0 main node rollup
2025-09-30 02:48:15 -05:00

39 lines
643 B
Go

package autonatv2
import (
"io"
"github.com/multiformats/go-varint"
)
// msgReader reads a varint prefixed message from R without any buffering
type msgReader struct {
R io.Reader
Buf []byte
}
func (m *msgReader) ReadByte() (byte, error) {
buf := m.Buf[:1]
_, err := m.R.Read(buf)
return buf[0], err
}
func (m *msgReader) ReadMsg() ([]byte, error) {
sz, err := varint.ReadUvarint(m)
if err != nil {
return nil, err
}
if sz > uint64(len(m.Buf)) {
return nil, io.ErrShortBuffer
}
n := 0
for n < int(sz) {
nr, err := m.R.Read(m.Buf[n:sz])
if err != nil {
return nil, err
}
n += nr
}
return m.Buf[:sz], nil
}