aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Packets/ByteBuffer.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-10-20 01:33:10 +0200
committerShauren <shauren.trinity@gmail.com>2014-10-20 01:33:10 +0200
commit484eae18ea1310f0b85612adb8fa9a83d782ac89 (patch)
tree0295a3122fbe1f2a982249100df602d035bdaf73 /src/server/shared/Packets/ByteBuffer.h
parent5e5643015692aa5196a0550c318a6c35763bd832 (diff)
parent51095ad39b253b83632e8de954bf7a5e30aa9944 (diff)
Merge pull request #13361 from Sovak/602
Core/NetworkIO: *Fixed basic auth packets
Diffstat (limited to 'src/server/shared/Packets/ByteBuffer.h')
-rw-r--r--src/server/shared/Packets/ByteBuffer.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h
index d65b6c58a51..de871c5e6df 100644
--- a/src/server/shared/Packets/ByteBuffer.h
+++ b/src/server/shared/Packets/ByteBuffer.h
@@ -133,6 +133,15 @@ class ByteBuffer
_curbitval = 0;
}
+ void ResetBitPos()
+ {
+ if (_bitpos > 7)
+ return;
+
+ _bitpos = 8;
+ _curbitval = 0;
+ }
+
bool WriteBit(uint32 bit)
{
--_bitpos;
@@ -154,8 +163,8 @@ class ByteBuffer
++_bitpos;
if (_bitpos > 7)
{
- _bitpos = 0;
_curbitval = read<uint8>();
+ _bitpos = 0;
}
return ((_curbitval >> (7-_bitpos)) & 1) != 0;
@@ -442,11 +451,14 @@ class ByteBuffer
{
if (_rpos + skip > size())
throw ByteBufferPositionException(false, _rpos, skip, size());
+
+ ResetBitPos();
_rpos += skip;
}
template <typename T> T read()
{
+ ResetBitPos();
T r = read<T>(_rpos);
_rpos += sizeof(T);
return r;
@@ -465,6 +477,8 @@ class ByteBuffer
{
if (_rpos + len > size())
throw ByteBufferPositionException(false, _rpos, len, size());
+
+ ResetBitPos();
std::memcpy(dest, &_storage[_rpos], len);
_rpos += len;
}