add optional encryption flag to login server and update ServeLogin behavior

This commit is contained in:
adman
2026-05-30 15:53:35 +02:00
parent 3e5b141ec7
commit 58c9a60236
3 changed files with 23 additions and 10 deletions
+1
View File
@@ -67,6 +67,7 @@ func Help(args []string) (err error) {
func mainE() (err error) { func mainE() (err error) {
subcommands["help"] = Help subcommands["help"] = Help
args := os.Args args := os.Args
args = []string{"TEST", "packet-spy", "-addr", "127.0.0.1:25571"}
if len(args) < 2 { if len(args) < 2 {
err = ExpectedASubcommandErr err = ExpectedASubcommandErr
+1 -1
View File
@@ -102,7 +102,7 @@ func Run(args []string) (err error) {
return return
} }
} }
_, err = server.ServeLogin(serveeConn, server.WithOtherAccount(acc), server.WithStatus(StatusResponse), server.WithoutOnlineMode()) _, err = server.ServeLogin(serveeConn, server.WithOtherAccount(acc), server.WithStatus(StatusResponse), server.WithoutOnlineMode(), server.WithoutEncryption())
if err != nil { if err != nil {
return return
} }
+21 -9
View File
@@ -38,14 +38,14 @@ func (u UnexpectedNextStateError) Error() string {
type LoginServer struct { type LoginServer struct {
*proto.Conn *proto.Conn
DontEncrypt, OnlineMode bool Encryption, OnlineMode bool
ServerHost string ServerHost string
ServerPort uint16 ServerPort uint16
Requested NameAndUUID Requested NameAndUUID
Given *NameAndUUID Given *NameAndUUID
CompressionThreshold int32 CompressionThreshold int32
Status []byte Status []byte
CompatibleVersions []int32 CompatibleVersions []int32
ServerId string // always empty for now ServerId string // always empty for now
VerifyToken []byte VerifyToken []byte
@@ -107,7 +107,7 @@ func (l *LoginServer) OnLoginStart(packet *v1_21_8.LoginToServerPacketLoginStart
} }
l.Requested = NameAndUUID{packet.Username, packet.PlayerUUID} l.Requested = NameAndUUID{packet.Username, packet.PlayerUUID}
if !l.DontEncrypt { if l.Encryption {
return l.Encrypt() return l.Encrypt()
} }
return l.FinishLogin() return l.FinishLogin()
@@ -241,9 +241,16 @@ func WithoutOnlineMode() LoginServerSetting {
} }
} }
func WithoutEncryption() LoginServerSetting {
return func(s *LoginServer) {
s.Encryption = false
}
}
func ServeLogin(c *proto.Conn, settings ...LoginServerSetting) (ret *LoginServer, err error) { func ServeLogin(c *proto.Conn, settings ...LoginServerSetting) (ret *LoginServer, err error) {
ret = &LoginServer{Conn: c} ret = &LoginServer{Conn: c}
ret.OnlineMode = true ret.OnlineMode = true
ret.Encryption = true
ret.RegisterCritical(ret.OnDefault) ret.RegisterCritical(ret.OnDefault)
ret.RegisterCriticalUntilLatest(ret.OnHandshake) ret.RegisterCriticalUntilLatest(ret.OnHandshake)
@@ -255,6 +262,11 @@ func ServeLogin(c *proto.Conn, settings ...LoginServerSetting) (ret *LoginServer
for _, s := range settings { for _, s := range settings {
s(ret) s(ret)
} }
if ret.OnlineMode && !ret.Encryption {
err = fmt.Errorf("online mode requires encryption")
return
}
ret.CompressionThreshold = 256 ret.CompressionThreshold = 256
err = ret.StartConn() err = ret.StartConn()
return return