Handle legacy server list ping for handshake

This commit is contained in:
Geoff Bourne
2019-07-13 15:40:34 -05:00
parent 3699931af0
commit 4c99daafa3
4 changed files with 300 additions and 78 deletions
+24 -4
View File
@@ -7,6 +7,12 @@ type Frame struct {
Payload []byte
}
type State int
const (
StateHandshaking = iota
)
var trimLimit = 64
func trimBytes(data []byte) ([]byte, string) {
@@ -25,15 +31,23 @@ func (f *Frame) String() string {
type Packet struct {
Length int
PacketID int
Data []byte
// Data is either a byte slice of raw content or a parsed message
Data interface{}
}
func (p *Packet) String() string {
trimmed, cont := trimBytes(p.Data)
return fmt.Sprintf("Frame:[len=%d, packetId=%d, data=%#X%s]", p.Length, p.PacketID, trimmed, cont)
if dataBytes, ok := p.Data.([]byte); ok {
trimmed, cont := trimBytes(dataBytes)
return fmt.Sprintf("Frame:[len=%d, packetId=%d, data=%#X%s]", p.Length, p.PacketID, trimmed, cont)
} else {
return fmt.Sprintf("Frame:[len=%d, packetId=%d, data=%+v]", p.Length, p.PacketID, p.Data)
}
}
const PacketIdHandshake = 0x00
const (
PacketIdHandshake = 0x00
PacketIdLegacyServerListPing = 0xFE
)
type Handshake struct {
ProtocolVersion int
@@ -42,6 +56,12 @@ type Handshake struct {
NextState int
}
type LegacyServerListPing struct {
ProtocolVersion int
ServerAddress string
ServerPort uint16
}
type ByteReader interface {
ReadByte() (byte, error)
}