mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-02-23 19:37:27 +08:00
* 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
39 lines
643 B
Go
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
|
|
}
|