aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Packets
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-06-19 23:20:06 -0300
committerariel- <ariel-@users.noreply.github.com>2017-06-19 23:20:06 -0300
commit85a7d5ce9ac68b30da2277cc91d4b70358f1880d (patch)
treedf3d2084ee2e35008903c03178039b9c986e2d08 /src/server/shared/Packets
parent052fc24315ace866ea1cf610e85df119b68100c9 (diff)
Core: ported headers cleanup from master branch
Diffstat (limited to 'src/server/shared/Packets')
-rw-r--r--src/server/shared/Packets/ByteBuffer.cpp76
-rw-r--r--src/server/shared/Packets/ByteBuffer.h167
2 files changed, 86 insertions, 157 deletions
diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp
index f9860f273ed..a4ab6e1daf7 100644
--- a/src/server/shared/Packets/ByteBuffer.cpp
+++ b/src/server/shared/Packets/ByteBuffer.cpp
@@ -17,11 +17,13 @@
*/
#include "ByteBuffer.h"
+#include "Errors.h"
#include "MessageBuffer.h"
#include "Common.h"
#include "Log.h"
-
+#include "Util.h"
#include <sstream>
+#include <ctime>
ByteBuffer::ByteBuffer(MessageBuffer&& buffer) : _rpos(0), _wpos(0), _storage(buffer.Move())
{
@@ -51,6 +53,78 @@ ByteBufferSourceException::ByteBufferSourceException(size_t pos, size_t size,
message().assign(ss.str());
}
+ByteBuffer& ByteBuffer::operator>>(float& value)
+{
+ value = read<float>();
+ if (!std::isfinite(value))
+ throw ByteBufferException();
+ return *this;
+}
+
+ByteBuffer& ByteBuffer::operator>>(double& value)
+{
+ value = read<double>();
+ if (!std::isfinite(value))
+ throw ByteBufferException();
+ return *this;
+}
+
+uint32 ByteBuffer::ReadPackedTime()
+{
+ uint32 packedDate = read<uint32>();
+ tm lt = tm();
+
+ lt.tm_min = packedDate & 0x3F;
+ lt.tm_hour = (packedDate >> 6) & 0x1F;
+ //lt.tm_wday = (packedDate >> 11) & 7;
+ lt.tm_mday = ((packedDate >> 14) & 0x3F) + 1;
+ lt.tm_mon = (packedDate >> 20) & 0xF;
+ lt.tm_year = ((packedDate >> 24) & 0x1F) + 100;
+
+ return uint32(mktime(&lt));
+}
+
+void ByteBuffer::append(uint8 const* src, size_t cnt)
+{
+ ASSERT(src, "Attempted to put a NULL-pointer in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", _wpos, size());
+ ASSERT(cnt, "Attempted to put a zero-sized value in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", _wpos, size());
+ ASSERT(size() < 10000000);
+
+ size_t const newSize = _wpos + cnt;
+ if (_storage.capacity() < newSize) // custom memory allocation rules
+ {
+ if (newSize < 100)
+ _storage.reserve(300);
+ else if (newSize < 750)
+ _storage.reserve(2500);
+ else if (newSize < 6000)
+ _storage.reserve(10000);
+ else
+ _storage.reserve(400000);
+ }
+
+ if (_storage.size() < newSize)
+ _storage.resize(newSize);
+ std::memcpy(&_storage[_wpos], src, cnt);
+ _wpos = newSize;
+}
+
+void ByteBuffer::AppendPackedTime(time_t time)
+{
+ tm lt;
+ localtime_r(&time, &lt);
+ append<uint32>((lt.tm_year - 100) << 24 | lt.tm_mon << 20 | (lt.tm_mday - 1) << 14 | lt.tm_wday << 11 | lt.tm_hour << 6 | lt.tm_min);
+}
+
+void ByteBuffer::put(size_t pos, uint8 const* src, size_t cnt)
+{
+ ASSERT(pos + cnt <= size(), "Attempted to put value with size: " SZFMTD " in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", cnt, pos, size());
+ ASSERT(src, "Attempted to put a NULL-pointer in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", pos, size());
+ ASSERT(cnt, "Attempted to put a zero-sized value in ByteBuffer (pos: " SZFMTD " size: " SZFMTD ")", pos, size());
+
+ std::memcpy(&_storage[pos], src, cnt);
+}
+
void ByteBuffer::print_storage() const
{
if (!sLog->ShouldLog("network", LOG_LEVEL_TRACE)) // optimize disabled trace output
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index 1dc5fee6a12..77f09455cc7 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -20,9 +20,9 @@
#define _BYTEBUFFER_H
#include "Define.h"
-#include "Errors.h"
#include "ByteConverter.h"
-#include "Util.h"
+#include <string>
+#include <vector>
#include <cstring>
class MessageBuffer;
@@ -109,7 +109,8 @@ class TC_SHARED_API ByteBuffer
append((uint8 *)&value, sizeof(value));
}
- template <typename T> void put(size_t pos, T value)
+ template <typename T>
+ void put(std::size_t pos, T value)
{
static_assert(std::is_fundamental<T>::value, "append(compound)");
EndianConvert(value);
@@ -249,21 +250,8 @@ class TC_SHARED_API ByteBuffer
return *this;
}
- ByteBuffer &operator>>(float &value)
- {
- value = read<float>();
- if (!std::isfinite(value))
- throw ByteBufferException();
- return *this;
- }
-
- ByteBuffer &operator>>(double &value)
- {
- value = read<double>();
- if (!std::isfinite(value))
- throw ByteBufferException();
- return *this;
- }
+ ByteBuffer &operator>>(float &value);
+ ByteBuffer &operator>>(double &value);
ByteBuffer &operator>>(std::string& value)
{
@@ -371,20 +359,7 @@ class TC_SHARED_API ByteBuffer
}
}
- uint32 ReadPackedTime()
- {
- uint32 packedDate = read<uint32>();
- tm lt = tm();
-
- lt.tm_min = packedDate & 0x3F;
- lt.tm_hour = (packedDate >> 6) & 0x1F;
- //lt.tm_wday = (packedDate >> 11) & 7;
- lt.tm_mday = ((packedDate >> 14) & 0x3F) + 1;
- lt.tm_mon = (packedDate >> 20) & 0xF;
- lt.tm_year = ((packedDate >> 24) & 0x1F) + 100;
-
- return uint32(mktime(&lt));
- }
+ uint32 ReadPackedTime();
ByteBuffer& ReadPackedTime(uint32& time)
{
@@ -432,36 +407,9 @@ class TC_SHARED_API ByteBuffer
return append((const uint8 *)src, cnt * sizeof(T));
}
- void append(const uint8 *src, size_t cnt)
- {
- if (!cnt)
- throw ByteBufferSourceException(_wpos, size(), cnt);
-
- if (!src)
- throw ByteBufferSourceException(_wpos, size(), cnt);
+ void append(uint8 const* src, size_t cnt);
- ASSERT(size() < 10000000);
-
- size_t const newSize = _wpos + cnt;
- if (_storage.capacity() < newSize) // custom memory allocation rules
- {
- if (newSize < 100)
- _storage.reserve(300);
- else if (newSize < 750)
- _storage.reserve(2500);
- else if (newSize < 6000)
- _storage.reserve(10000);
- else
- _storage.reserve(400000);
- }
-
- if (_storage.size() < newSize)
- _storage.resize(newSize);
- std::memcpy(&_storage[_wpos], src, cnt);
- _wpos = newSize;
- }
-
- void append(const ByteBuffer& buffer)
+ void append(ByteBuffer const& buffer)
{
if (buffer.wpos())
append(buffer.contents(), buffer.wpos());
@@ -496,23 +444,9 @@ class TC_SHARED_API ByteBuffer
append(packGUID, size);
}
- void AppendPackedTime(time_t time)
- {
- tm lt;
- localtime_r(&time, &lt);
- append<uint32>((lt.tm_year - 100) << 24 | lt.tm_mon << 20 | (lt.tm_mday - 1) << 14 | lt.tm_wday << 11 | lt.tm_hour << 6 | lt.tm_min);
- }
+ void AppendPackedTime(time_t time);
- void put(size_t pos, const uint8 *src, size_t cnt)
- {
- if (pos + cnt > size())
- throw ByteBufferPositionException(true, pos, cnt, size());
-
- if (!src)
- throw ByteBufferSourceException(_wpos, size(), cnt);
-
- std::memcpy(&_storage[pos], src, cnt);
- }
+ void put(size_t pos, const uint8 *src, size_t cnt);
void print_storage() const;
@@ -525,85 +459,6 @@ class TC_SHARED_API ByteBuffer
std::vector<uint8> _storage;
};
-template <typename T>
-inline ByteBuffer &operator<<(ByteBuffer &b, std::vector<T> v)
-{
- b << (uint32)v.size();
- for (typename std::vector<T>::iterator i = v.begin(); i != v.end(); ++i)
- {
- b << *i;
- }
- return b;
-}
-
-template <typename T>
-inline ByteBuffer &operator>>(ByteBuffer &b, std::vector<T> &v)
-{
- uint32 vsize;
- b >> vsize;
- v.clear();
- while (vsize--)
- {
- T t;
- b >> t;
- v.push_back(t);
- }
- return b;
-}
-
-template <typename T>
-inline ByteBuffer &operator<<(ByteBuffer &b, std::list<T> v)
-{
- b << (uint32)v.size();
- for (typename std::list<T>::iterator i = v.begin(); i != v.end(); ++i)
- {
- b << *i;
- }
- return b;
-}
-
-template <typename T>
-inline ByteBuffer &operator>>(ByteBuffer &b, std::list<T> &v)
-{
- uint32 vsize;
- b >> vsize;
- v.clear();
- while (vsize--)
- {
- T t;
- b >> t;
- v.push_back(t);
- }
- return b;
-}
-
-template <typename K, typename V>
-inline ByteBuffer &operator<<(ByteBuffer &b, std::map<K, V> &m)
-{
- b << (uint32)m.size();
- for (typename std::map<K, V>::iterator i = m.begin(); i != m.end(); ++i)
- {
- b << i->first << i->second;
- }
- return b;
-}
-
-template <typename K, typename V>
-inline ByteBuffer &operator>>(ByteBuffer &b, std::map<K, V> &m)
-{
- uint32 msize;
- b >> msize;
- m.clear();
- while (msize--)
- {
- K k;
- V v;
- b >> k >> v;
- m.insert(make_pair(k, v));
- }
- return b;
-}
-
/// @todo Make a ByteBuffer.cpp and move all this inlining to it.
template<> inline std::string ByteBuffer::read<std::string>()
{