1
0

cProtocol handles the initial handshake up to player login

git-svn-id: http://mc-server.googlecode.com/svn/trunk@804 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com
2012-08-30 08:19:19 +00:00
parent 658383edf8
commit fa93c0cf54
6 changed files with 61 additions and 69 deletions

View File

@@ -15,6 +15,8 @@
#include "cPlayer.h"
#include "cChatColor.h"
#include "cWindow.h"
#include "cRoot.h"
#include "cServer.h"
@@ -958,7 +960,26 @@ int cProtocol125::ParseEntityAction(void)
int cProtocol125::ParseHandshake(void)
{
HANDLE_PACKET_READ(ReadBEUTF16String16, AString, Username);
m_Client->HandleHandshake(Username);
AStringVector UserData = StringSplit(Username, ";"); // "FakeTruth;localhost:25565"
if (UserData.empty())
{
m_Client->Kick("Did not receive username");
return PARSE_OK;
}
m_Username = UserData[0];
LOGD("HANDSHAKE %s", Username.c_str());
if (cRoot::Get()->GetDefaultWorld()->GetNumPlayers() >= cRoot::Get()->GetDefaultWorld()->GetMaxPlayers())
{
m_Client->Kick("The server is currently full :(-- Try again later");
return PARSE_OK;
}
SendHandshake(cRoot::Get()->GetServer()->GetServerID());
LOGD("User \"%s\" was sent a handshake response", m_Username.c_str());
return PARSE_OK;
}
@@ -987,6 +1008,29 @@ int cProtocol125::ParseLogin(void)
HANDLE_PACKET_READ(ReadChar, char, Difficulty);
HANDLE_PACKET_READ(ReadByte, Byte, WorldHeight);
HANDLE_PACKET_READ(ReadByte, Byte, MaxPlayers);
if (ProtocolVersion < 29)
{
m_Client->Kick("Your client is outdated!");
return PARSE_OK;
}
else if (ProtocolVersion > 29)
{
m_Client->Kick("Your client version is higher than the server!");
return PARSE_OK;
}
if (m_Username.compare(Username) != 0)
{
LOGWARNING("Login Username (\"%s\") does not match Handshake username (\"%s\") for client @ \"%s\", kicking",
Username.c_str(),
m_Username.c_str(),
m_Client->GetSocket().GetIPString().c_str()
);
m_Client->Kick("Hacked client"); // Don't tell them why we don't want them
return PARSE_OK;
}
m_Client->HandleLogin(ProtocolVersion, Username);
return PARSE_OK;
}