summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/eathena/messageout.cpp91
-rw-r--r--src/net/eathena/messageout.h25
-rw-r--r--src/net/messageout.cpp98
-rw-r--r--src/net/messageout.h39
-rw-r--r--src/net/tmwa/messageout.cpp74
-rw-r--r--src/net/tmwa/messageout.h22
6 files changed, 120 insertions, 229 deletions
diff --git a/src/net/eathena/messageout.cpp b/src/net/eathena/messageout.cpp
index 58792b0ef..065471355 100644
--- a/src/net/eathena/messageout.cpp
+++ b/src/net/eathena/messageout.cpp
@@ -30,10 +30,6 @@
#include "debug.h"
-#ifndef SDL_BIG_ENDIAN
-#error missing SDL_endian.h
-#endif // SDL_BYTEORDER
-
namespace EAthena
{
@@ -56,91 +52,4 @@ void MessageOut::expand(const size_t bytes) const
PacketCounters::incOutBytes(CAST_S32(bytes));
}
-void MessageOut::writeInt16(const int16_t value, const char *const str)
-{
- expand(2);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap = SDL_Swap16(value);
- memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int16_t));
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- DEBUGLOG2("writeInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- mPos += 2;
-}
-
-void MessageOut::writeInt32(const int32_t value, const char *const str)
-{
- DEBUGLOG2("writeInt32: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- expand(4);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int32_t swap = SDL_Swap32(value);
- memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int32_t));
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int32_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- mPos += 4;
-}
-
-void MessageOut::writeInt64(const int64_t value, const char *const str)
-{
- DEBUGLOG2("writeInt64: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- expand(8);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int32_t swap = SDL_Swap64(value);
- memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int64_t));
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int64_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- mPos += 8;
-}
-
-void MessageOut::writeBeingId(const BeingId value, const char *const str)
-{
- writeInt32(toInt(value, int32_t), str);
-}
-
-#define LOBYTE(w) (CAST_U8(w))
-#define HIBYTE(w) (CAST_U8(( \
-CAST_U16(w)) >> 8))
-
-void MessageOut::writeCoordinates(const uint16_t x,
- const uint16_t y,
- unsigned char direction,
- const char *const str)
-{
- DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u",
- CAST_U32(x),
- CAST_U32(y),
- CAST_U32(direction)), mPos, str);
- unsigned char *const data = reinterpret_cast<unsigned char*>(mData)
- + CAST_SIZE(mPos);
- expand(3);
- mPos += 3;
-
- uint16_t temp = x;
- temp <<= 6;
- data[0] = 0;
- data[1] = 1;
- data[2] = 2;
- data[0] = HIBYTE(temp);
- data[1] = CAST_U8(temp);
- temp = y;
- temp <<= 4;
- data[1] |= HIBYTE(temp);
- data[2] = LOBYTE(temp);
- direction = toServerDirection(direction);
- data[2] |= direction;
-}
-
} // namespace EAthena
diff --git a/src/net/eathena/messageout.h b/src/net/eathena/messageout.h
index 2f2718e23..b86c10d4f 100644
--- a/src/net/eathena/messageout.h
+++ b/src/net/eathena/messageout.h
@@ -49,31 +49,6 @@ class MessageOut final : public Net::MessageOut
~MessageOut() override final;
- /**< Writes a short. */
- void writeInt16(const int16_t value,
- const char *const str) override final;
-
- /**< Writes a long. */
- void writeInt32(const int32_t value,
- const char *const str) override final;
-
- void writeInt64(const int64_t value,
- const char *const str);
-
- void writeBeingId(const BeingId value,
- const char *const str) override final;
-
- /**
- * Encodes coordinates and direction in 3 bytes.
- */
- void writeCoordinates(const uint16_t x,
- const uint16_t y,
- unsigned char direction,
- const char *const str);
-
- void resetPos()
- { mPos = 0; }
-
private:
void expand(const size_t size) const override final;
diff --git a/src/net/messageout.cpp b/src/net/messageout.cpp
index 50bea460a..69993e4d8 100644
--- a/src/net/messageout.cpp
+++ b/src/net/messageout.cpp
@@ -29,8 +29,17 @@
#include "utils/stringutils.h"
+PRAGMA48(GCC diagnostic push)
+PRAGMA48(GCC diagnostic ignored "-Wshadow")
+#include <SDL_endian.h>
+PRAGMA48(GCC diagnostic pop)
+
#include "debug.h"
+#ifndef SDL_BIG_ENDIAN
+#error missing SDL_endian.h
+#endif // SDL_BYTEORDER
+
namespace Net
{
@@ -54,7 +63,92 @@ void MessageOut::writeInt8(const int8_t value, const char *const str)
CAST_U8(value))),
mPos, str);
mPos += 1;
- PacketCounters::incOutBytes(1);
+}
+
+void MessageOut::writeInt16(const int16_t value, const char *const str)
+{
+ expand(2);
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ int16_t swap = SDL_Swap16(value);
+ memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int16_t));
+#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int16_t));
+#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ DEBUGLOG2("writeInt16: " + toStringPrint(CAST_U32(
+ CAST_U16(value))),
+ mPos, str);
+ mPos += 2;
+}
+
+void MessageOut::writeInt32(const int32_t value, const char *const str)
+{
+ DEBUGLOG2("writeInt32: " + toStringPrint(CAST_U32(value)),
+ mPos, str);
+ expand(4);
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ int32_t swap = SDL_Swap32(value);
+ memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int32_t));
+#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int32_t));
+#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ mPos += 4;
+}
+
+void MessageOut::writeInt64(const int64_t value, const char *const str)
+{
+ DEBUGLOG2("writeInt64: " + toStringPrint(CAST_U32(value)),
+ mPos, str);
+ expand(8);
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ int32_t swap = SDL_Swap64(value);
+ memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int64_t));
+#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int64_t));
+#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
+
+ mPos += 8;
+}
+
+void MessageOut::writeBeingId(const BeingId value, const char *const str)
+{
+ writeInt32(toInt(value, int32_t), str);
+}
+
+#define LOBYTE(w) (CAST_U8(w))
+#define HIBYTE(w) (CAST_U8((CAST_U16(w)) >> 8))
+
+void MessageOut::writeCoordinates(const uint16_t x,
+ const uint16_t y,
+ unsigned char direction,
+ const char *const str)
+{
+ DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u",
+ CAST_U32(x),
+ CAST_U32(y),
+ CAST_U32(direction)), mPos, str);
+ unsigned char *const data = reinterpret_cast<unsigned char*>(mData)
+ + CAST_SIZE(mPos);
+ expand(3);
+ mPos += 3;
+
+ uint16_t temp = x;
+ temp <<= 6;
+ data[0] = 0;
+ data[1] = 1;
+ data[2] = 2;
+ data[0] = HIBYTE(temp);
+ data[1] = CAST_U8(temp);
+ temp = y;
+ temp <<= 4;
+ data[1] |= HIBYTE(temp);
+ data[2] = LOBYTE(temp);
+ direction = toServerDirection(direction);
+ data[2] |= direction;
}
void MessageOut::writeString(const std::string &string,
@@ -88,7 +182,6 @@ void MessageOut::writeString(const std::string &string,
DEBUGLOG2("writeString: " + string, mPos, str);
mPos += length;
- PacketCounters::incOutBytes(length);
}
void MessageOut::writeStringNoLog(const std::string &string,
@@ -122,7 +215,6 @@ void MessageOut::writeStringNoLog(const std::string &string,
DEBUGLOG2("writeString: ***", mPos, str);
mPos += length;
- PacketCounters::incOutBytes(length);
}
const char *MessageOut::getData() const
diff --git a/src/net/messageout.h b/src/net/messageout.h
index 3c171e077..9cf9b7e3e 100644
--- a/src/net/messageout.h
+++ b/src/net/messageout.h
@@ -54,45 +54,56 @@ class MessageOut notfinal
const char *const str);
/**< Writes a short. */
- virtual void writeInt16(const int16_t value,
- const char *const str) = 0;
+ void writeInt16(const int16_t value,
+ const char *const str);
/**< Writes a long. */
- virtual void writeInt32(const int32_t value,
- const char *const str) = 0;
+ void writeInt32(const int32_t value,
+ const char *const str);
- virtual void writeBeingId(const BeingId value,
- const char *const str) = 0;
+ void writeInt64(const int64_t value,
+ const char *const str);
+
+ void writeBeingId(const BeingId value,
+ const char *const str);
+
+ void writeCoordinates(const uint16_t x,
+ const uint16_t y,
+ unsigned char direction,
+ const char *const str);
/**
* Writes a string. If a fixed length is not given (-1), it is stored
* as a short at the start of the string.
*/
- virtual void writeString(const std::string &string,
- int length,
- const char *const str);
+ void writeString(const std::string &string,
+ int length,
+ const char *const str);
/**
* Writes a string. If a fixed length is not given (-1), it is stored
* as a short at the start of the string.
*/
- virtual void writeStringNoLog(const std::string &string,
- int length,
- const char *const str);
+ void writeStringNoLog(const std::string &string,
+ int length,
+ const char *const str);
/**
* Returns the content of the message.
*/
- virtual const char *getData() const A_WARN_UNUSED;
+ const char *getData() const A_WARN_UNUSED;
/**
* Returns the length of the data.
*/
- virtual unsigned int getDataSize() const A_WARN_UNUSED;
+ unsigned int getDataSize() const A_WARN_UNUSED;
virtual ~MessageOut()
{ }
+ void resetPos()
+ { mPos = 0; }
+
static unsigned char toServerDirection(unsigned char direction)
A_CONST;
diff --git a/src/net/tmwa/messageout.cpp b/src/net/tmwa/messageout.cpp
index 6379b3b1b..0d6677936 100644
--- a/src/net/tmwa/messageout.cpp
+++ b/src/net/tmwa/messageout.cpp
@@ -30,10 +30,6 @@
#include "debug.h"
-#ifndef SDL_BIG_ENDIAN
-#error missing SDL_endian.h
-#endif // SDL_BYTEORDER
-
namespace TmwAthena
{
@@ -56,74 +52,4 @@ void MessageOut::expand(const size_t bytes) const
PacketCounters::incOutBytes(CAST_S32(bytes));
}
-void MessageOut::writeInt16(const int16_t value, const char *const str)
-{
- DEBUGLOG2("writeInt16: " + toStringPrint(CAST_U32(
- CAST_U16(value))),
- mPos, str);
- expand(2);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int16_t swap = SDL_Swap16(value);
- memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int16_t));
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int16_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- mPos += 2;
-}
-
-void MessageOut::writeInt32(const int32_t value, const char *const str)
-{
- DEBUGLOG2("writeInt32: " + toStringPrint(CAST_U32(value)),
- mPos, str);
- expand(4);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- int32_t swap = SDL_Swap32(value);
- memcpy(mData + CAST_SIZE(mPos), &swap, sizeof(int32_t));
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- memcpy(mData + CAST_SIZE(mPos), &value, sizeof(int32_t));
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- mPos += 4;
-}
-
-void MessageOut::writeBeingId(const BeingId value, const char *const str)
-{
- writeInt32(toInt(value, int32_t), str);
-}
-
-#define LOBYTE(w) (CAST_U8(w))
-#define HIBYTE(w) (CAST_U8(( \
-CAST_U16(w)) >> 8U))
-
-void MessageOut::writeCoordinates(const uint16_t x,
- const uint16_t y,
- unsigned char direction,
- const char *const str)
-{
- DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u",
- CAST_U32(x), static_cast<unsigned>(y),
- CAST_U32(direction)), mPos, str);
- unsigned char *const data = reinterpret_cast<unsigned char*>(mData)
- + CAST_SIZE(mPos);
- expand(3);
- mPos += 3;
-
- uint16_t temp = x;
- temp <<= 6;
- data[0] = 0;
- data[1] = 1;
- data[2] = 2;
- data[0] = HIBYTE(temp);
- data[1] = CAST_U8(temp);
- temp = y;
- temp <<= 4;
- data[1] |= HIBYTE(temp);
- data[2] = LOBYTE(temp);
- direction = toServerDirection(direction);
- data[2] |= direction;
-}
-
} // namespace TmwAthena
diff --git a/src/net/tmwa/messageout.h b/src/net/tmwa/messageout.h
index 35e462693..3c0aaa92c 100644
--- a/src/net/tmwa/messageout.h
+++ b/src/net/tmwa/messageout.h
@@ -49,28 +49,6 @@ class MessageOut final : public Net::MessageOut
~MessageOut() override final;
- /**< Writes a short. */
- void writeInt16(const int16_t value,
- const char *const str) override final;
-
- /**< Writes a long. */
- void writeInt32(const int32_t value,
- const char *const str) override final;
-
- void writeBeingId(const BeingId value,
- const char *const str) override final;
-
- /**
- * Encodes coordinates and direction in 3 bytes.
- */
- void writeCoordinates(const uint16_t x,
- const uint16_t y,
- unsigned char direction,
- const char *const str);
-
- void resetPos()
- { mPos = 0; }
-
private:
void expand(const size_t size) const override final;