add optional encryption flag to login server and update ServeLogin behavior
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-2
@@ -38,7 +38,7 @@ 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
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user