diff options
-rw-r--r-- | src/net/eathena/messagein.cpp | 117 | ||||
-rw-r--r-- | src/net/eathena/messagein.h | 14 | ||||
-rw-r--r-- | src/net/messagein.cpp | 115 | ||||
-rw-r--r-- | src/net/messagein.h | 46 | ||||
-rw-r--r-- | src/net/tmwa/messagein.cpp | 119 | ||||
-rw-r--r-- | src/net/tmwa/messagein.h | 14 |
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 |