pest: client interaction complete
This commit is contained in:
61
binutil.go
Normal file
61
binutil.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"io"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
var BE = binary.BigEndian
|
||||
|
||||
func readU8(r io.Reader) (uint8, error) {
|
||||
var result uint8
|
||||
err := binary.Read(r, BE, &result);
|
||||
return result, err
|
||||
}
|
||||
|
||||
func readU16(r io.Reader) (uint16, error) {
|
||||
var result uint16
|
||||
err := binary.Read(r, BE, &result);
|
||||
return result, err
|
||||
}
|
||||
func readU32(r io.Reader) (uint32, error) {
|
||||
var result uint32
|
||||
err := binary.Read(r, BE, &result);
|
||||
return result, err
|
||||
}
|
||||
func readString(r io.Reader) (string, error) {
|
||||
l, err := readU8(r)
|
||||
if err == nil && l == 0 {
|
||||
err = fmt.Errorf("invalid string length 0")
|
||||
}
|
||||
if err != nil { return "", err}
|
||||
buf := make([]byte, l)
|
||||
_, err = io.ReadFull(r, buf)
|
||||
return string(buf), err
|
||||
}
|
||||
|
||||
func readLString(r io.Reader) (string, error) {
|
||||
l, err := readU32(r)
|
||||
if err == nil && l == 0 {
|
||||
err = fmt.Errorf("invalid string length 0")
|
||||
}
|
||||
if err != nil { return "", err}
|
||||
buf := make([]byte, l)
|
||||
_, err = io.ReadFull(r, buf)
|
||||
return string(buf), err
|
||||
}
|
||||
|
||||
func writeLString(w io.Writer, s string) error {
|
||||
writeU32(w,uint32(len(s)))
|
||||
_, err := w.Write([]byte(s))
|
||||
return err
|
||||
}
|
||||
|
||||
func writeU8(w io.Writer, i uint8) error {
|
||||
return binary.Write(w, BE, i);
|
||||
}
|
||||
|
||||
func writeU32(w io.Writer, i uint32) error {
|
||||
return binary.Write(w, BE, i);
|
||||
}
|
||||
Reference in New Issue
Block a user