func readRaw(reader io.Reader, raw *packet.RawPacket, buf []byte) (err error) { var sz uint32 err = binary.Read(reader, binary.LittleEndian, &raw.Id) if err != nil { return } err = binary.Read(reader, binary.LittleEndian, &sz) if err != nil { return } err = binary.Read(reader, binary.LittleEndian, &raw.Seq) if err != nil { return } if sz > uint32(len(buf)) { return errors.New("packet size too large") } n, err := io.ReadFull(reader, buf[:sz]) if err != nil { return } if n != int(sz) { err = errors.New("read get less data than needed") return } raw.Data = buf[:sz] return nil }