aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorleak <leak@bitmx.net>2014-07-06 15:17:59 +0200
committerleak <leak@bitmx.net>2014-07-06 15:17:59 +0200
commit5dc47243fc3521ae1bc37d7d812a2960bd760c45 (patch)
tree7176a8f70add0432eb1273af6d4ae2fa10ca59ae /src
parent916800eb35bb0eec0afa48c3150cadbeebef66ba (diff)
Fixed packet header decryption and zero size packet handling
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Server/WorldTcpSession.cpp12
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
+}