From df11916ad53e6b2f64cd1af5d5296ba188f3e486 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 7 Aug 2014 19:02:08 +0200 Subject: Core/NetworkIO: Allow receiving packets bigger than buffer size and properly handle situations where not entire packet was read in one go Core/Authserver: Restored authenticator functionality --- src/server/shared/Packets/ByteBuffer.cpp | 5 +++++ src/server/shared/Packets/ByteBuffer.h | 12 ++++++------ src/server/shared/Packets/WorldPacket.h | 2 ++ 3 files changed, 13 insertions(+), 6 deletions(-) (limited to 'src/server/shared/Packets') diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp index 86234039a4a..3785d1c29fa 100644 --- a/src/server/shared/Packets/ByteBuffer.cpp +++ b/src/server/shared/Packets/ByteBuffer.cpp @@ -17,11 +17,16 @@ */ #include "ByteBuffer.h" +#include "MessageBuffer.h" #include "Common.h" #include "Log.h" #include +ByteBuffer::ByteBuffer(MessageBuffer&& buffer) : _rpos(0), _wpos(0), _storage(buffer.Move()) +{ +} + ByteBufferPositionException::ByteBufferPositionException(bool add, size_t pos, size_t size, size_t valueSize) { diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index c678e9dce06..456223d744d 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -34,6 +34,8 @@ #include #include +class MessageBuffer; + // Root of ByteBuffer exception hierarchy class ByteBufferException : public std::exception { @@ -82,14 +84,12 @@ class ByteBuffer } ByteBuffer(ByteBuffer&& buf) : _rpos(buf._rpos), _wpos(buf._wpos), - _storage(std::move(buf._storage)) - { - } + _storage(std::move(buf._storage)) { } ByteBuffer(ByteBuffer const& right) : _rpos(right._rpos), _wpos(right._wpos), - _storage(right._storage) - { - } + _storage(right._storage) { } + + ByteBuffer(MessageBuffer&& buffer); ByteBuffer& operator=(ByteBuffer const& right) { diff --git a/src/server/shared/Packets/WorldPacket.h b/src/server/shared/Packets/WorldPacket.h index 8851b9f3e45..848a00739fe 100644 --- a/src/server/shared/Packets/WorldPacket.h +++ b/src/server/shared/Packets/WorldPacket.h @@ -51,6 +51,8 @@ class WorldPacket : public ByteBuffer return *this; } + WorldPacket(uint16 opcode, MessageBuffer&& buffer) : ByteBuffer(std::move(buffer)), m_opcode(opcode) { } + void Initialize(uint16 opcode, size_t newres=200) { clear(); -- cgit v1.2.3