Fix login start packet decoding for 1.18.2 up to 1.20.2 (#421)

Signed-off-by: Fred Heinecke <fred.heinecke@yahoo.com>
This commit is contained in:
solidDoWant
2025-06-29 07:37:26 -05:00
committed by GitHub
parent 749b090c73
commit 805cebd856
10 changed files with 217 additions and 33 deletions
+6 -4
View File
@@ -6,13 +6,14 @@ import (
"context"
"errors"
"fmt"
"github.com/google/uuid"
"io"
"net"
"sync"
"sync/atomic"
"time"
"github.com/google/uuid"
"golang.ngrok.com/ngrok"
"golang.ngrok.com/ngrok/config"
@@ -65,6 +66,7 @@ func (p *PlayerInfo) String() string {
if p == nil {
return ""
}
return fmt.Sprintf("%s/%s", p.Name, p.Uuid)
}
@@ -318,7 +320,7 @@ func (c *Connector) HandleConnection(ctx context.Context, frontendConn net.Conn)
var playerInfo *PlayerInfo = nil
if handshake.NextState == mcproto.StateLogin {
playerInfo, err = c.readPlayerInfo(bufferedReader, clientAddr, handshake.NextState)
playerInfo, err = c.readPlayerInfo(handshake.ProtocolVersion, bufferedReader, clientAddr, handshake.NextState)
if err != nil {
if errors.Is(err, io.EOF) {
logrus.
@@ -372,14 +374,14 @@ func (c *Connector) HandleConnection(ctx context.Context, frontendConn net.Conn)
}
}
func (c *Connector) readPlayerInfo(bufferedReader *bufio.Reader, clientAddr net.Addr, state mcproto.State) (*PlayerInfo, error) {
func (c *Connector) readPlayerInfo(protocolVersion mcproto.ProtocolVersion, bufferedReader *bufio.Reader, clientAddr net.Addr, state mcproto.State) (*PlayerInfo, error) {
loginPacket, err := mcproto.ReadPacket(bufferedReader, clientAddr, state)
if err != nil {
return nil, fmt.Errorf("failed to read login packet: %w", err)
}
if loginPacket.PacketID == mcproto.PacketIdLogin {
loginStart, err := mcproto.DecodeLoginStart(loginPacket.Data)
loginStart, err := mcproto.DecodeLoginStart(protocolVersion, loginPacket.Data)
if err != nil {
return nil, fmt.Errorf("failed to decode login start: %w", err)
}