diff options
author | Subv <subv2112@gmail.com> | 2014-07-06 12:17:27 -0500 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2014-07-06 12:17:27 -0500 |
commit | ee3bb46feb39d364ddfa9efe0befbdd7c32dca28 (patch) | |
tree | 525620f7f699ff7225190e2ae08d586e74214d16 /src | |
parent | 5dc47243fc3521ae1bc37d7d812a2960bd760c45 (diff) |
Fixed login, we're in world guys!
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Server/WorldTcpSession.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Server/WorldTcpSession.h | 1 |
2 files changed, 12 insertions, 5 deletions
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 <boost/asio/write.hpp> #include <boost/asio/read_until.hpp> +#include <memory> #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<char> 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; |