From e9b8332d84874c8b81959ecb55056a2bd7d56c68 Mon Sep 17 00:00:00 2001 From: shoopea Date: Sun, 14 Jun 2020 22:39:17 +0200 Subject: [PATCH] test --- main.go | 61 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/main.go b/main.go index 66c87f3..3cca360 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "encoding/binary" "net" ) @@ -21,38 +22,42 @@ func main() { failError(err, "conn.Write") logInfoDebug("Authentication sent (%v)", p.Bytes()) r := bufio.NewReader(conn) + b := make([]byte, 0xFFFF) + read := 0 + n := 0 - b := make([]byte, 65536) - _, err = r.Read(b) - logInfoDebug("r.Read : %v", b) - /* + for { + p := Packet{} for { - p := Packet{} - b, err := r.ReadByte() - logErrorDebug(err, "r.ReadByte") - p.PLength = uint16(b) << 8 - b, err = r.ReadByte() - logErrorDebug(err, "r.ReadByte") - p.PLength += uint16(b) - b, err = r.ReadByte() - logErrorDebug(err, "r.ReadByte") - p.PType = uint8(b) - if p.PLength <= 3 { - logInfoAlert("Wrong packet length") + n, err = r.Read(b[read:]) + logErrorDebug(err, "r.Read") + read += n + if read >= 3 { break } - d := make([]byte, p.PLength-3) - - for { - _, err := r.Read(d[len(d):]) - logErrorDebug(err, "r.Read") - if len(d) == int(p.PLength-3) { - break - } - } - logInfoDebug("Packet read : len : %d / type : %d", p.PLength, p.PType) - } - */ + p.PLength = binary.LittleEndian.Uint16(b[0:]) + p.PType = b[2] + if p.PLength <= 3 { + logInfoAlert("Wrong packet length") + break + } + + for { + n, err = r.Read(b[read:]) + logErrorDebug(err, "r.Read") + read += n + if read >= p.PLength { + break + } + } + + logInfoDebug("Packet read : len : %d / type : %d", p.PLength, p.PType) + c := make([]byte, 0xFFFF) + copy(c, b[p.PLength:]) + b = c + read -= p.PLength + } + }