71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
|
package protocol
|
||
|
|
||
|
import "io"
|
||
|
import "fmt"
|
||
|
|
||
|
// ReadBuf reads a size-prefixed buffer.
|
||
|
func ReadBuf (sizeBytes int, reader io.Reader) (buf []byte, err error) {
|
||
|
size, err := ReadInt(reader, sizeBytes)
|
||
|
if err != nil { return nil, err }
|
||
|
buf = make([]byte, size)
|
||
|
_, err = io.ReadFull(reader, buf)
|
||
|
return buf, err
|
||
|
}
|
||
|
|
||
|
// ReadBuf8 reads a size-prefixed buffer with an 8-bit size.
|
||
|
func ReadBuf8 (reader io.Reader) (buf []byte, err error) {
|
||
|
return ReadBuf(1, reader)
|
||
|
}
|
||
|
|
||
|
// ReadBuf16 reads a size-prefixed buffer with a 16-bit size.
|
||
|
func ReadBuf16 (reader io.Reader) (buf []byte, err error) {
|
||
|
return ReadBuf(2, reader)
|
||
|
}
|
||
|
|
||
|
// ReadString reads a size-prefixed string.
|
||
|
func ReadString (sizeBytes int, reader io.Reader) (str string, err error) {
|
||
|
buf, err := ReadBuf(sizeBytes, reader)
|
||
|
return string(buf), err
|
||
|
}
|
||
|
|
||
|
// ReadString8 reads a size-prefixed string with an 8-bit size.
|
||
|
func ReadString8 (reader io.Reader) (str string, err error) {
|
||
|
return ReadString(1, reader)
|
||
|
}
|
||
|
|
||
|
// ReadString16 reads a size-prefixed string with a 16-bit size.
|
||
|
func ReadString16 (reader io.Reader) (str string, err error) {
|
||
|
return ReadString(2, reader)
|
||
|
}
|
||
|
|
||
|
func WriteBuf (writer io.Writer, sizeBytes int, buf []byte) (err error) {
|
||
|
if uint(len(buf)) > MaxIntOfSize(sizeBytes) {
|
||
|
panic(fmt.Sprintf("len %d cannot fit in U%d", len(buf), sizeBytes * 8))
|
||
|
}
|
||
|
|
||
|
err = WriteInt(writer, sizeBytes, uint(len(buf)))
|
||
|
if err != nil { return }
|
||
|
_, err = writer.Write(buf)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func WriteBuf8 (writer io.Writer, buf []byte) error {
|
||
|
return WriteBuf(writer, 1, buf)
|
||
|
}
|
||
|
|
||
|
func WriteBuf16 (writer io.Writer, buf []byte) error {
|
||
|
return WriteBuf(writer, 2, buf)
|
||
|
}
|
||
|
|
||
|
func WriteString (writer io.Writer, sizeBytes int, str string) (err error) {
|
||
|
return WriteBuf(writer, sizeBytes, []byte(str))
|
||
|
}
|
||
|
|
||
|
func WriteString8 (writer io.Writer, str string) (err error) {
|
||
|
return WriteBuf8(writer, []byte(str))
|
||
|
}
|
||
|
|
||
|
func WriteString16 (writer io.Writer, str string) (err error) {
|
||
|
return WriteBuf16(writer, []byte(str))
|
||
|
}
|