diff options
author | leak <leak@bitmx.net> | 2014-07-06 15:17:59 +0200 |
---|---|---|
committer | leak <leak@bitmx.net> | 2014-07-06 15:17:59 +0200 |
commit | 5dc47243fc3521ae1bc37d7d812a2960bd760c45 (patch) | |
tree | 7176a8f70add0432eb1273af6d4ae2fa10ca59ae /src | |
parent | 916800eb35bb0eec0afa48c3150cadbeebef66ba (diff) |
Fixed packet header decryption and zero size packet handling
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Server/WorldTcpSession.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/server/game/Server/WorldTcpSession.cpp b/src/server/game/Server/WorldTcpSession.cpp index aa72753dd9e..325d679c243 100644 --- a/src/server/game/Server/WorldTcpSession.cpp +++ b/src/server/game/Server/WorldTcpSession.cpp @@ -66,6 +66,9 @@ void WorldTcpSession::AsyncReadHeader() { ClientPktHeader* header = (ClientPktHeader*)&_readBuffer; + if (_worldSession) + _authCrypt.DecryptRecv((uint8*)header, sizeof(ClientPktHeader)); + EndianConvertReverse(header->size); EndianConvert(header->cmd); @@ -95,9 +98,12 @@ void WorldTcpSession::AsyncReadData(size_t dataSize) WorldPacket packet(opcode, header->size); - packet.resize(header->size); + if (header->size > 0) + { + packet.resize(header->size); - std::memcpy(packet.contents(), &_readBuffer[sizeof(ClientPktHeader)], header->size); + std::memcpy(packet.contents(), &_readBuffer[sizeof(ClientPktHeader)], header->size); + } switch (opcode) { @@ -398,4 +404,4 @@ void WorldTcpSession::SendAuthResponseError(uint8 code) packet << uint8(code); AsyncWrite(packet); -}
\ No newline at end of file +} |