summaryrefslogtreecommitdiffstats
path: root/src/messagein.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/messagein.cpp')
-rw-r--r--src/messagein.cpp64
1 files changed, 23 insertions, 41 deletions
diff --git a/src/messagein.cpp b/src/messagein.cpp
index c1736bb..2559f7f 100644
--- a/src/messagein.cpp
+++ b/src/messagein.cpp
@@ -44,37 +44,30 @@ MessageIn::~MessageIn()
char MessageIn::readByte()
{
+ char value = -1;
if (mPacket)
{
- if ( mPos < mPacket->length ) // if there is enough to read
+ if (mPos < mPacket->length)
{
- return mPacket->data[mPos++];
- }
- else
- {
- mPos = mPacket->length - 1;
- return 0;
+ value = mPacket->data[mPos];
}
+ mPos += 1;
}
- return -1;
+ return value;
}
short MessageIn::readShort()
{
short value = -1;
-
if (mPacket)
{
- if ( (mPos + sizeof(short)) <= mPacket->length )
- {
- value = ENET_NET_TO_HOST_16(*(short *)(mPacket->data + mPos));
- mPos += sizeof(short);
- }
- else
+ if (mPos + 2 <= mPacket->length)
{
- // We do nothing. And keep what's left to be read by a function
- // that requires less length.
+ uint16_t t;
+ memcpy(&t, mPacket->data + mPos, 2);
+ value = ENET_NET_TO_HOST_16(t);
}
+ mPos += 2;
}
return value;
}
@@ -82,51 +75,40 @@ short MessageIn::readShort()
long MessageIn::readLong()
{
long value = -1;
-
if (mPacket)
{
- if ( (mPos + sizeof(long)) <= mPacket->length )
+ if (mPos + 4 <= mPacket->length)
{
- value = ENET_NET_TO_HOST_32(*(long *)(mPacket->data + mPos));
- mPos += sizeof(long);
- }
- else
- {
- // We do nothing. And keep what's left to be read by a function
- // that requires less length.
+ uint32_t t;
+ memcpy(&t, mPacket->data + mPos, 4);
+ value = ENET_NET_TO_HOST_32(t);
}
+ mPos += 4;
}
return value;
}
std::string MessageIn::readString(int length)
{
- int stringLength = 0;
- std::string readString = "";
-
if (mPacket)
{
// Get string length
if (length < 0) {
- stringLength = readShort();
- } else {
- stringLength = length;
+ length = readShort();
}
// Make sure the string isn't erroneus
- if (mPos + length > mPacket->length) {
+ if (length < 0 || mPos + length > mPacket->length) {
+ mPos = mPacket->length + 1;
return "";
}
// Read the string
- char *tmpString = new char[stringLength + 1];
- memcpy(tmpString, (void*)&mPacket->data[mPos], stringLength);
- tmpString[stringLength] = 0;
- mPos += stringLength;
-
- readString = tmpString;
- delete[] tmpString;
+ int stringLength = strnlen(mPacket->data + mPos, length);
+ std::string readString(mPacket->data + mPos, stringLength);
+ mPos += length;
+ return readString;
}
- return readString;
+ return "";
}