Core/NetworkIO: Applied 4.3.4 changes to "new" network code

This commit is contained in:
Shauren committed 2014-09-12 22:09:07 +02:00
1 parent de4aea093b
commit ee0df6aa86
7 files changed
+61 -31

No files matched your search

+14 -10
View File
@@ -36,7 +36,7 @@ std::string const WorldSocket::ClientConnectionInitialize("WORLD OF WARCRAFT CON
WorldSocket::WorldSocket(tcp::socket&& socket)
: Socket(std::move(socket)), _authSeed(rand32()), _OverSpeedPings(0), _worldSession(nullptr), _initialized(false)
{
_headerBuffer.Resize(sizeof(ClientPktHeader));
_headerBuffer.Resize(2);
}
void WorldSocket::Start()
@@ -46,7 +46,7 @@ void WorldSocket::Start()
MessageBuffer initializer;
ServerPktHeader header(ServerConnectionInitialize.size(), 0);
initializer.Write(header.header, header.getHeaderLength() - 2);
initializer.Write((void*)ServerConnectionInitialize.c_str(), ServerConnectionInitialize.length());
initializer.Write(ServerConnectionInitialize.c_str(), ServerConnectionInitialize.length());
std::unique_lock<std::mutex> dummy(_writeLock, std::defer_lock);
QueuePacket(std::move(initializer), dummy);
@@ -123,15 +123,17 @@ void WorldSocket::ReadHandler()
bool WorldSocket::ReadHeaderHandler()
{
ASSERT(_headerBuffer.GetActiveSize() == sizeof(ClientPktHeader));
ASSERT(_headerBuffer.GetActiveSize() == (_initialized ? sizeof(ClientPktHeader) : 2));
_authCrypt.DecryptRecv(_headerBuffer.GetReadPointer(), sizeof(ClientPktHeader));
_authCrypt.DecryptRecv(_headerBuffer.GetReadPointer(), _headerBuffer.GetActiveSize());
ClientPktHeader* header = reinterpret_cast<ClientPktHeader*>(_headerBuffer.GetReadPointer());
EndianConvertReverse(header->size);
EndianConvert(header->cmd);
if (!header->IsValidSize() || !header->IsValidOpcode())
if (_initialized)
EndianConvert(header->cmd);
if (!header->IsValidSize() || (_initialized && !header->IsValidOpcode()))
{
if (_worldSession)
{
@@ -147,7 +149,9 @@ bool WorldSocket::ReadHeaderHandler()
return false;
}
header->size -= sizeof(header->cmd);
if (_initialized)
header->size -= sizeof(header->cmd);
_packetBuffer.Resize(header->size);
return true;
}
@@ -221,9 +225,7 @@ bool WorldSocket::ReadDataHandler()
}
else
{
ClientPktHeader* header = reinterpret_cast<ClientPktHeader*>(_headerBuffer.GetReadPointer());
std::string initializer(reinterpret_cast<char const*>(_packetBuffer.GetReadPointer()), header->size);
std::string initializer(reinterpret_cast<char const*>(_packetBuffer.GetReadPointer()), std::min(_packetBuffer.GetActiveSize(), ClientConnectionInitialize.length()));
if (initializer != ClientConnectionInitialize)
{
CloseSocket();
@@ -231,6 +233,8 @@ bool WorldSocket::ReadDataHandler()
}
_initialized = true;
_headerBuffer.Resize(sizeof(ClientPktHeader));
_packetBuffer.Reset();
HandleSendAuthSession();
}