Finished handling of LoginStart: Now sending EncryptionRequest back

This commit is contained in:
Verox001 2025-02-24 19:07:12 +01:00
parent 887a82564f
commit 4b25fafbe5

29
main.go
View File

@ -30,11 +30,16 @@ type HandshakePacket struct {
NextState int NextState int
} }
type LoginStartPacket struct { type EncryptionPacket struct {
SharedSecret PrefixedByteArray SharedSecret PrefixedByteArray
VerifyToken PrefixedByteArray VerifyToken PrefixedByteArray
} }
type LoginStartPacket struct {
Name string
UUID string
}
type StatusResponse struct { type StatusResponse struct {
Version VersionInfo `json:"version"` Version VersionInfo `json:"version"`
Players PlayerInfo `json:"players"` Players PlayerInfo `json:"players"`
@ -106,6 +111,8 @@ func handleConnection(client *ClientState) {
reader := bytes.NewReader(buf[:n]) reader := bytes.NewReader(buf[:n])
fmt.Println("Received data:", buf[:n])
// Read packet length // Read packet length
packetLength, err := readVarInt(reader) packetLength, err := readVarInt(reader)
if err != nil { if err != nil {
@ -230,17 +237,16 @@ func handleLoginStart(reader *bytes.Reader) (LoginStartPacket, error) {
var packet LoginStartPacket var packet LoginStartPacket
var err error var err error
packet.SharedSecret, err = readPrefixedByteArray(reader) packet.Name, err = readString(reader)
if err != nil { if err != nil {
return packet, err return packet, err
} }
packet.VerifyToken, err = readPrefixedByteArray(reader) packet.UUID, err = readUUID(reader)
if err != nil { if err != nil {
return packet, err return packet, err
} }
fmt.Printf("Login Start received: %+v\n", packet)
return packet, nil return packet, nil
} }
@ -331,15 +337,12 @@ func readString(reader *bytes.Reader) (string, error) {
return string(strBuf), nil return string(strBuf), nil
} }
func readPrefixedByteArray(reader *bytes.Reader) (PrefixedByteArray, error) { func readUUID(reader *bytes.Reader) (string, error) {
length, err := readVarInt(reader) // UUID is 16 bytes
if err != nil { uuid := make([]byte, 16)
return PrefixedByteArray{}, err if _, err := reader.Read(uuid); err != nil {
return "", err
} }
data := make([]byte, length) return fmt.Sprintf("%x-%x-%x-%x-%x", uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10], uuid[10:]), nil
if _, err := reader.Read(data); err != nil {
return PrefixedByteArray{}, err
}
return PrefixedByteArray{Length: length, Data: data}, nil
} }