aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Server/WorldTcpSession.cpp16
-rw-r--r--src/server/game/Server/WorldTcpSession.h1
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;