2
0
mirror of synced 2025-02-23 06:08:07 +00:00
Matt Joiner c18e0abe52 Fix incomplete Integer.Read
Possibly on read buffer boundaries, this would have caused errant io.ErrUnexpectedEOF.

(cherry picked from commit 22569449dad48e1c5cdeac171625585f8ca976c9)
2021-10-19 14:07:23 +11:00

44 lines
688 B
Go

package peer_protocol
import (
"encoding/binary"
"io"
"github.com/pkg/errors"
)
type Integer uint32
func (i *Integer) UnmarshalBinary(b []byte) error {
if len(b) != 4 {
return errors.New("expected 4 bytes")
}
*i = Integer(binary.BigEndian.Uint32(b))
return nil
}
func (i *Integer) Read(r io.Reader) error {
var b [4]byte
n, err := io.ReadFull(r, b[:])
if err == nil {
if n != 4 {
panic(n)
}
return i.UnmarshalBinary(b[:])
}
return err
}
// It's perfectly fine to cast these to an int. TODO: Or is it?
func (i Integer) Int() int {
return int(i)
}
func (i Integer) Uint64() uint64 {
return uint64(i)
}
func (i Integer) Uint32() uint32 {
return uint32(i)
}