add support of the byte array with varint len.

This commit is contained in:
Tnze
2019-06-03 13:01:15 +08:00
parent 6feed6f193
commit 4a0dc34854
3 changed files with 23 additions and 18 deletions

View File

@ -377,8 +377,8 @@ func (c *Client) encryptionResponse() ([]byte, []byte, error) {
}
var (
SharedSecret ByteArray
VerifyToken ByteArray
SharedSecret pk.ByteArray
VerifyToken pk.ByteArray
)
if err := p.Scan(&SharedSecret, &VerifyToken); err != nil {
return nil, nil, err
@ -386,20 +386,6 @@ func (c *Client) encryptionResponse() ([]byte, []byte, error) {
return SharedSecret, VerifyToken, nil
}
//ByteArray is []byte with perfix VarInt as length
type ByteArray []byte
// Decode a ByteArray
func (b *ByteArray) Decode(r pk.DecodeReader) error {
var Len pk.VarInt
if err := Len.Decode(r); err != nil {
return err
}
*b = make([]byte, Len)
_, err := r.Read(*b)
return err
}
type authResp struct {
ID, Name string
Properties [1]struct {

View File

@ -19,7 +19,7 @@ var PackedVarInts = [][]byte{
[]byte{0x80, 0x80, 0x80, 0x80, 0x08},
}
func TestPackInt(t *testing.T) {
func TestPackVarInt(t *testing.T) {
for i, v := range VarInts {
p := v.Encode()
if !bytes.Equal(p, PackedVarInts[i]) {
@ -27,7 +27,7 @@ func TestPackInt(t *testing.T) {
}
}
}
func TestUnpackInt(t *testing.T) {
func TestUnpackVarInt(t *testing.T) {
for i, v := range PackedVarInts {
var vi VarInt
if err := vi.Decode(bytes.NewReader(v)); err != nil {

View File

@ -76,6 +76,9 @@ type (
NBT struct {
V interface{}
}
//ByteArray is []byte with perfix VarInt as length
ByteArray []byte
)
//ReadNBytes read N bytes from bytes.Reader
@ -354,3 +357,19 @@ func (d *Double) Decode(r DecodeReader) error {
func (n NBT) Decode(r DecodeReader) error {
return nbt.NewDecoder(r).Decode(n.V)
}
// Encode a ByteArray
func (b *ByteArray) Encode() []byte {
return append(VarInt(len(*b)).Encode(), *b...)
}
// Decode a ByteArray
func (b *ByteArray) Decode(r DecodeReader) error {
var Len VarInt
if err := Len.Decode(r); err != nil {
return err
}
*b = make([]byte, Len)
_, err := r.Read(*b)
return err
}