require header match
This commit is contained in:
33
packet.go
33
packet.go
@@ -31,11 +31,44 @@ type Packet struct {
|
||||
StatusCode uint32
|
||||
}
|
||||
|
||||
var headerData = make([]byte, 4)
|
||||
|
||||
func matchHeader(conn io.Reader) error {
|
||||
|
||||
pos := 0
|
||||
for pos < 4 {
|
||||
|
||||
l, err := conn.Read(headerData)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for i := 0; i < l; i++ {
|
||||
if headerData[i] == header[pos] {
|
||||
pos++
|
||||
if pos == 4 {
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
pos = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReadPacket(conn io.Reader, packet *Packet) error {
|
||||
err := matchHeader(conn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return binary.Read(conn, binary.LittleEndian, packet)
|
||||
}
|
||||
|
||||
func ReadCartPacket(conn io.Reader, packet *CartPacket) error {
|
||||
err := matchHeader(conn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return binary.Read(conn, binary.LittleEndian, packet)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user