From ee3bb46feb39d364ddfa9efe0befbdd7c32dca28 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 6 Jul 2014 12:17:27 -0500 Subject: Fixed login, we're in world guys! --- src/server/game/Server/WorldTcpSession.cpp | 16 ++++++++++++---- src/server/game/Server/WorldTcpSession.h | 1 - 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/server/game/Server/WorldTcpSession.cpp b/src/server/game/Server/WorldTcpSession.cpp index 325d679c243..4a485dec20d 100644 --- a/src/server/game/Server/WorldTcpSession.cpp +++ b/src/server/game/Server/WorldTcpSession.cpp @@ -18,6 +18,7 @@ #include #include +#include #include "WorldTcpSession.h" #include "ServerPktHeader.h" #include "BigNumber.h" @@ -158,11 +159,18 @@ void WorldTcpSession::AsyncWrite(WorldPacket const& packet) ServerPktHeader header(packet.size() + 2, packet.GetOpcode()); _authCrypt.EncryptSend((uint8*)header.header, header.getHeaderLength()); - std::memcpy(_writeBuffer, (char*)header.header, header.getHeaderLength()); - - std::memcpy(_writeBuffer + header.getHeaderLength(), (char const*)packet.contents(), packet.size()); + auto data = new char[header.getHeaderLength() + packet.size()]; + std::memcpy(data, (char*)header.header, header.getHeaderLength()); + + if (!packet.empty()) + std::memcpy(data + header.getHeaderLength(), (char const*)packet.contents(), packet.size()); + + std::shared_ptr buffer(data, [=](char* _b) + { + delete[] _b; + }); - boost::asio::async_write(_socket, boost::asio::buffer(_writeBuffer, header.getHeaderLength() + packet.size()), [this](boost::system::error_code error, std::size_t /*length*/) + boost::asio::async_write(_socket, boost::asio::buffer(buffer.get(), header.getHeaderLength() + packet.size()), [this, buffer](boost::system::error_code error, std::size_t /*length*/) { if (error) { diff --git a/src/server/game/Server/WorldTcpSession.h b/src/server/game/Server/WorldTcpSession.h index dedc248d7ec..6663b879480 100644 --- a/src/server/game/Server/WorldTcpSession.h +++ b/src/server/game/Server/WorldTcpSession.h @@ -69,7 +69,6 @@ private: tcp::socket _socket; char _readBuffer[4096]; - char _writeBuffer[4096]; uint32 _authSeed; AuthCrypt _authCrypt; -- cgit v1.2.3