summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/net/eathena/messagein.cpp117
-rw-r--r--src/net/eathena/messagein.h14
-rw-r--r--src/net/messagein.cpp115
-rw-r--r--src/net/messagein.h46
-rw-r--r--src/net/tmwa/messagein.cpp119
-rw-r--r--src/net/tmwa/messagein.h14
6 files changed, 139 insertions, 286 deletions
diff --git a/src/net/eathena/messagein.cpp b/src/net/eathena/messagein.cpp
index 5f20aeebc..112564ac9 100644
--- a/src/net/eathena/messagein.cpp
+++ b/src/net/eathena/messagein.cpp
@@ -25,18 +25,9 @@
#include "logger.h"
#include "net/net.h"
-#include "net/packetcounters.h"
-#include "utils/cast.h"
#include "utils/stringutils.h"
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#ifndef SDL_BIG_ENDIAN
-#include <SDL_endian.h>
-#endif // SDL_BYTEORDER
-PRAGMA48(GCC diagnostic pop)
-
#include "debug.h"
namespace EAthena
@@ -67,112 +58,4 @@ void MessageIn::postInit(const char *const str,
readInt16(str);
}
-uint16_t MessageIn::readId() const
-{
- int16_t value = -1;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- return value;
-}
-
-int16_t MessageIn::readInt16(const char *const str)
-{
- int16_t value = -1;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- mPos += 2;
- PacketCounters::incInBytes(2);
- return value;
-}
-
-uint16_t MessageIn::readUInt16(const char *const str)
-{
- uint16_t value = 0xffU;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- uint16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(uint16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(uint16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readUInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- mPos += 2;
- PacketCounters::incInBytes(2);
- return value;
-}
-
-int32_t MessageIn::readInt32(const char *const str)
-{
- int32_t value = -1;
- if (mPos + 4 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int32_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int32_t));
- value = SDL_Swap32(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int32_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt32: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- mPos += 4;
- PacketCounters::incInBytes(4);
- return value;
-}
-
-BeingId MessageIn::readBeingId(const char *const str)
-{
- return fromInt(readInt32(str), BeingId);
-}
-
-int64_t MessageIn::readInt64(const char *const str)
-{
- int64_t value = -1;
- if (mPos + 8 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int64_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int64_t));
- value = SDL_Swap64(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int64_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt64: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- mPos += 8;
- PacketCounters::incInBytes(8);
- return value;
-}
-
} // namespace EAthena
diff --git a/src/net/eathena/messagein.h b/src/net/eathena/messagein.h
index 1c077e6ef..afa17374f 100644
--- a/src/net/eathena/messagein.h
+++ b/src/net/eathena/messagein.h
@@ -48,20 +48,6 @@ class MessageIn final : public Net::MessageIn
void postInit(const char *const str,
const unsigned int version);
-
- /**< Reads a short. */
- int16_t readInt16(const char *const str) override final;
-
- uint16_t readUInt16(const char *const str) override final;
-
- /**< Reads a long. */
- int32_t readInt32(const char *const str) override final;
-
- int64_t readInt64(const char *const str) override final;
-
- BeingId readBeingId(const char *const str) override final;
-
- uint16_t readId() const;
};
} // namespace EAthena
diff --git a/src/net/messagein.cpp b/src/net/messagein.cpp
index 150111cc2..1e0ac22db 100644
--- a/src/net/messagein.cpp
+++ b/src/net/messagein.cpp
@@ -31,6 +31,13 @@
#include "debug.h"
+PRAGMA48(GCC diagnostic push)
+PRAGMA48(GCC diagnostic ignored "-Wshadow")
+#ifndef SDL_BIG_ENDIAN
+#include <SDL_endian.h>
+#endif // SDL_BYTEORDER
+PRAGMA48(GCC diagnostic pop)
+
#define MAKEWORD(low, high) \
(CAST_U16((CAST_U8(low)) | \
(CAST_U16(CAST_U8(high))) << 8))
@@ -71,6 +78,23 @@ MessageIn::~MessageIn()
}
}
+uint16_t MessageIn::readId() const
+{
+ int16_t value = -1;
+ if (mPos + 2 <= mLength)
+ {
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ int16_t swap;
+ memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int16_t));
+ value = SDL_Swap16(swap);
+#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int16_t));
+#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
+ }
+ return value;
+}
+
unsigned char MessageIn::readUInt8(const char *const str)
{
unsigned char value = CAST_U8(-1);
@@ -98,6 +122,97 @@ signed char MessageIn::readInt8(const char *const str)
return value;
}
+int16_t MessageIn::readInt16(const char *const str)
+{
+ int16_t value = -1;
+ if (mPos + 2 <= mLength)
+ {
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ int16_t swap;
+ memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int16_t));
+ value = SDL_Swap16(swap);
+#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int16_t));
+#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
+ }
+ DEBUGLOG2("readInt16: " + toStringPrint(CAST_U32(
+ CAST_U16(value))),
+ mPos, str);
+ mPos += 2;
+ PacketCounters::incInBytes(2);
+ return value;
+}
+
+uint16_t MessageIn::readUInt16(const char *const str)
+{
+ uint16_t value = 0xffU;
+ if (mPos + 2 <= mLength)
+ {
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ uint16_t swap;
+ memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(uint16_t));
+ value = SDL_Swap16(swap);
+#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ memcpy(&value, mData + CAST_SIZE(mPos), sizeof(uint16_t));
+#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
+ }
+ DEBUGLOG2("readUInt16: " + toStringPrint(CAST_U32(
+ CAST_U16(value))),
+ mPos, str);
+ mPos += 2;
+ PacketCounters::incInBytes(2);
+ return value;
+}
+
+int32_t MessageIn::readInt32(const char *const str)
+{
+ int32_t value = -1;
+ if (mPos + 4 <= mLength)
+ {
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ int32_t swap;
+ memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int32_t));
+ value = SDL_Swap32(swap);
+#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int32_t));
+#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
+ }
+ DEBUGLOG2("readInt32: " + toStringPrint(CAST_U32(value)),
+ mPos, str);
+ mPos += 4;
+ PacketCounters::incInBytes(4);
+ return value;
+}
+
+BeingId MessageIn::readBeingId(const char *const str)
+{
+ return fromInt(readInt32(str), BeingId);
+}
+
+int64_t MessageIn::readInt64(const char *const str)
+{
+ int64_t value = -1;
+ if (mPos + 8 <= mLength)
+ {
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ int64_t swap;
+ memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int64_t));
+ value = SDL_Swap64(swap);
+#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int64_t));
+#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
+ }
+ DEBUGLOG2("readInt64: " + toStringPrint(CAST_U32(value)),
+ mPos, str);
+ mPos += 8;
+ PacketCounters::incInBytes(8);
+ return value;
+}
+
uint8_t MessageIn::fromServerDirection(const uint8_t serverDir)
{
// Translate from eAthena format
diff --git a/src/net/messagein.h b/src/net/messagein.h
index b4c157cdc..e67dcbe8a 100644
--- a/src/net/messagein.h
+++ b/src/net/messagein.h
@@ -44,6 +44,8 @@ class MessageIn notfinal
virtual ~MessageIn();
+ uint16_t readId() const;
+
/**
* Returns the message ID.
*/
@@ -63,47 +65,47 @@ class MessageIn notfinal
{ return mLength > mPos ? mLength - mPos : 0; }
/**< Reads a byte. */
- virtual unsigned char readUInt8(const char *const str);
+ unsigned char readUInt8(const char *const str);
/**< Reads a byte. */
- virtual signed char readInt8(const char *const str);
+ signed char readInt8(const char *const str);
/**< Reads a short. */
- virtual int16_t readInt16(const char *const str) = 0;
+ int16_t readInt16(const char *const str);
- virtual uint16_t readUInt16(const char *const str) = 0;
+ uint16_t readUInt16(const char *const str);
/**< Reads a long. */
- virtual int32_t readInt32(const char *const str) = 0;
+ int32_t readInt32(const char *const str);
- virtual int64_t readInt64(const char *const str) = 0;
+ int64_t readInt64(const char *const str);
- virtual BeingId readBeingId(const char *const str) = 0;
+ BeingId readBeingId(const char *const str);
/**
* Reads a special 3 byte block used by eAthena, containing x and y
* coordinates and direction.
*/
- virtual void readCoordinates(uint16_t &restrict x,
- uint16_t &restrict y,
- uint8_t &restrict direction,
- const char *const str);
+ void readCoordinates(uint16_t &restrict x,
+ uint16_t &restrict y,
+ uint8_t &restrict direction,
+ const char *const str);
/**
* Reads a special 5 byte block used by eAthena, containing a source
* and destination coordinate pair.
*/
- virtual void readCoordinatePair(uint16_t &restrict srcX,
- uint16_t &restrict srcY,
- uint16_t &restrict dstX,
- uint16_t &restrict dstY,
- const char *const str);
+ void readCoordinatePair(uint16_t &restrict srcX,
+ uint16_t &restrict srcY,
+ uint16_t &restrict dstX,
+ uint16_t &restrict dstY,
+ const char *const str);
/**
* Skips a given number of bytes.
*/
- virtual void skip(const unsigned int length,
- const char *const str);
+ void skip(const unsigned int length,
+ const char *const str);
void skipToEnd(const char *const str);
@@ -112,11 +114,11 @@ class MessageIn notfinal
* that the length of the string is stored in a short at the
* start of the string.
*/
- virtual std::string readString(int length,
- const char *const dstr);
+ std::string readString(int length,
+ const char *const dstr);
- virtual std::string readRawString(int length,
- const char *const dstr);
+ std::string readRawString(int length,
+ const char *const dstr);
unsigned char *readBytes(int length,
const char *const dstr);
diff --git a/src/net/tmwa/messagein.cpp b/src/net/tmwa/messagein.cpp
index fe9c9cea1..d94a4b6a9 100644
--- a/src/net/tmwa/messagein.cpp
+++ b/src/net/tmwa/messagein.cpp
@@ -25,17 +25,6 @@
#include "logger.h"
#include "net/net.h"
-#include "net/packetcounters.h"
-
-#include "utils/cast.h"
-#include "utils/stringutils.h"
-
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#ifndef SDL_BIG_ENDIAN
-#include <SDL_endian.h>
-#endif // SDL_BYTEORDER
-PRAGMA48(GCC diagnostic pop)
#include "debug.h"
@@ -57,112 +46,4 @@ void MessageIn::postInit(const char *const str)
readInt16(str);
}
-uint16_t MessageIn::readId() const
-{
- int16_t value = -1;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- return value;
-}
-
-int16_t MessageIn::readInt16(const char *const str)
-{
- int16_t value = -1;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- mPos += 2;
- PacketCounters::incInBytes(2);
- return value;
-}
-
-uint16_t MessageIn::readUInt16(const char *const str)
-{
- uint16_t value = 0xffU;
- if (mPos + 2 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- uint16_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(uint16_t));
- value = SDL_Swap16(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(uint16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readUInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- mPos += 2;
- PacketCounters::incInBytes(2);
- return value;
-}
-
-int32_t MessageIn::readInt32(const char *const str)
-{
- int32_t value = -1;
- if (mPos + 4 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int32_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int32_t));
- value = SDL_Swap32(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int32_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt32: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- mPos += 4;
- PacketCounters::incInBytes(4);
- return value;
-}
-
-BeingId MessageIn::readBeingId(const char *const str)
-{
- return fromInt(readInt32(str), BeingId);
-}
-
-int64_t MessageIn::readInt64(const char *const str)
-{
- int64_t value = -1;
- if (mPos + 8 <= mLength)
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int64_t swap;
- memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(int64_t));
- value = SDL_Swap64(swap);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(&value, mData + CAST_SIZE(mPos), sizeof(int64_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- DEBUGLOG2("readInt64: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- mPos += 8;
- PacketCounters::incInBytes(8);
- return value;
-}
-
} // namespace TmwAthena
diff --git a/src/net/tmwa/messagein.h b/src/net/tmwa/messagein.h
index 35a7c21cd..5ac91b5e6 100644
--- a/src/net/tmwa/messagein.h
+++ b/src/net/tmwa/messagein.h
@@ -47,20 +47,6 @@ class MessageIn final : public Net::MessageIn
A_DELETE_COPY(MessageIn)
void postInit(const char *const str);
-
- /**< Reads a short. */
- int16_t readInt16(const char *const str) override final;
-
- uint16_t readUInt16(const char *const str) override final;
-
- /**< Reads a long. */
- int32_t readInt32(const char *const str) override final;
-
- int64_t readInt64(const char *const str) override final;
-
- BeingId readBeingId(const char *const str) override final;
-
- uint16_t readId() const;
};
} // namespace TmwAthena