summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2011-06-04 12:25:25 -0600
committerJared Adams <jaxad0127@gmail.com>2011-06-04 12:25:25 -0600
commite7e99051910a9a8739d8a50225be868e5dc286d6 (patch)
treea3b3cb91cc67da70be56934ce0904991a5b8b170 /src/net
parent576dfc355cc06109da0bf07ac65fef7ab484a9cf (diff)
downloadmana-e7e99051910a9a8739d8a50225be868e5dc286d6.tar.gz
mana-e7e99051910a9a8739d8a50225be868e5dc286d6.tar.bz2
mana-e7e99051910a9a8739d8a50225be868e5dc286d6.tar.xz
mana-e7e99051910a9a8739d8a50225be868e5dc286d6.zip
Fix handling of 16- and 32-bit number in tmwAthena netcode
Diffstat (limited to 'src/net')
-rw-r--r--src/net/tmwa/messagein.cpp19
-rw-r--r--src/net/tmwa/messageout.cpp18
2 files changed, 29 insertions, 8 deletions
diff --git a/src/net/tmwa/messagein.cpp b/src/net/tmwa/messagein.cpp
index ca2d52ab..38bc14dd 100644
--- a/src/net/tmwa/messagein.cpp
+++ b/src/net/tmwa/messagein.cpp
@@ -21,6 +21,9 @@
#include "net/tmwa/messagein.h"
+#include <SDL.h>
+#include <SDL_endian.h>
+
namespace TmwAthena {
MessageIn::MessageIn(const char *data, unsigned int length):
@@ -35,7 +38,13 @@ uint16_t MessageIn::readInt16()
uint16_t value = 0;
if (mPos + 2 <= mLength)
{
- value = (mData[mPos + 1] << 8) | mData[mPos];
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ uint16_t swap;
+ memcpy(&swap, mData + mPos, sizeof(uint16_t));
+ value = SDL_Swap16(swap);
+#else
+ memcpy(&value, mData + mPos, sizeof(uint16_t));
+#endif
}
mPos += 2;
return value;
@@ -46,7 +55,13 @@ uint32_t MessageIn::readInt32()
uint32_t value = 0;
if (mPos + 4 <= mLength)
{
- value = (mData[mPos + 3] << 24) | (mData[mPos + 2] << 16) | (mData[mPos + 1] << 8) | mData[mPos];
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ uint32_t swap;
+ memcpy(&swap, mData + mPos, sizeof(uint32_t));
+ value = SDL_Swap32(swap);
+#else
+ memcpy(&value, mData + mPos, sizeof(uint32_t));
+#endif
}
mPos += 4;
return value;
diff --git a/src/net/tmwa/messageout.cpp b/src/net/tmwa/messageout.cpp
index 7c3a3c61..705b9a96 100644
--- a/src/net/tmwa/messageout.cpp
+++ b/src/net/tmwa/messageout.cpp
@@ -47,18 +47,24 @@ void MessageOut::expand(size_t bytes)
void MessageOut::writeInt16(uint16_t value)
{
expand(2);
- mData[mPos] = value;
- mData[mPos + 1] = value >> 8;
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ uint16_t swap=SDL_Swap16(value);
+ memcpy(mData + mPos, &swap, sizeof(uint16_t));
+#else
+ memcpy(mData + mPos, &value, sizeof(uint16_t));
+#endif
mPos += 2;
}
void MessageOut::writeInt32(uint32_t value)
{
expand(4);
- mData[mPos] = value;
- mData[mPos + 1] = value >> 8;
- mData[mPos + 2] = value >> 16;
- mData[mPos + 3] = value >> 24;
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ uint32_t swap=SDL_Swap32(value);
+ memcpy(mData + mPos, &swap, sizeof(uint32_t));
+#else
+ memcpy(mData + mPos, &value, sizeof(uint32_t));
+#endif
mPos += 4;
}