diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-03-31 23:33:24 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-04-01 00:08:29 +0300 |
commit | 15f4f0d6fecf4dc38ae1ec07c0abb04c20e22c1e (patch) | |
tree | 8428836351e6ea64d8f19f9324fd58bcde698ee9 | |
parent | 9b06b6b56522f23eb3752d3a1e099c75ba130fc9 (diff) | |
download | mv-15f4f0d6fecf4dc38ae1ec07c0abb04c20e22c1e.tar.gz mv-15f4f0d6fecf4dc38ae1ec07c0abb04c20e22c1e.tar.bz2 mv-15f4f0d6fecf4dc38ae1ec07c0abb04c20e22c1e.tar.xz mv-15f4f0d6fecf4dc38ae1ec07c0abb04c20e22c1e.zip |
Set packet version based on packet id and current packet version into version in MessageIn.
Only for hercules.
-rw-r--r-- | src/net/eathena/messagein.cpp | 11 | ||||
-rw-r--r-- | src/net/eathena/messagein.h | 3 | ||||
-rw-r--r-- | src/net/eathena/network.cpp | 5 | ||||
-rw-r--r-- | src/net/messagein.cpp | 1 | ||||
-rw-r--r-- | src/net/messagein.h | 4 |
5 files changed, 21 insertions, 3 deletions
diff --git a/src/net/eathena/messagein.cpp b/src/net/eathena/messagein.cpp index 3a71e0c76..7b21b7485 100644 --- a/src/net/eathena/messagein.cpp +++ b/src/net/eathena/messagein.cpp @@ -40,12 +40,21 @@ MessageIn::MessageIn(const char *const data, { } -void MessageIn::postInit(const char *const str) +void MessageIn::postInit(const char *const str, + const unsigned int version) { // Read the message ID mId = readId(); + mVersion = version; IGNOREDEBUGLOG; DEBUGLOG2("Receive packet", 0, "MessageIn"); +#ifdef ENABLEDEBUGLOG + if (mVersion > 0) + { + const std::string verStr = toString(mVersion); + DEBUGLOG2("Version", 0, verStr.c_str()); + } +#endif readInt16(str); } diff --git a/src/net/eathena/messagein.h b/src/net/eathena/messagein.h index da5f57d7d..5ba13ea9c 100644 --- a/src/net/eathena/messagein.h +++ b/src/net/eathena/messagein.h @@ -46,7 +46,8 @@ class MessageIn final : public Net::MessageIn A_DELETE_COPY(MessageIn) - void postInit(const char *const str); + void postInit(const char *const str, + const unsigned int version); /**< Reads a short. */ int16_t readInt16(const char *const str) override final; diff --git a/src/net/eathena/network.cpp b/src/net/eathena/network.cpp index fc0cd3837..96bebd320 100644 --- a/src/net/eathena/network.cpp +++ b/src/net/eathena/network.cpp @@ -134,7 +134,10 @@ void Network::dispatchMessages() len = readWord(2); MessageIn msg(mInBuffer, len); - msg.postInit(mPackets[msgId].name); + unsigned int ver = mPackets[msgId].version; + if (ver == 0) + ver = packetVersion; + msg.postInit(mPackets[msgId].name, ver); SDL_mutexV(mMutexIn); if (len == 0) diff --git a/src/net/messagein.cpp b/src/net/messagein.cpp index db0318a4d..8c2e32a75 100644 --- a/src/net/messagein.cpp +++ b/src/net/messagein.cpp @@ -42,6 +42,7 @@ MessageIn::MessageIn(const char *const data, mData(data), mLength(length), mPos(0), + mVersion(0), mId(0), mIgnore(false) { diff --git a/src/net/messagein.h b/src/net/messagein.h index 613eca09e..44d6a9aab 100644 --- a/src/net/messagein.h +++ b/src/net/messagein.h @@ -122,6 +122,9 @@ class MessageIn notfinal static uint8_t fromServerDirection(const uint8_t serverDir) A_WARN_UNUSED; + unsigned int getVersion() const A_WARN_UNUSED + { return mVersion; } + protected: /** * Constructor. @@ -137,6 +140,7 @@ class MessageIn notfinal * reading it. */ unsigned int mPos; + unsigned int mVersion; uint16_t mId; /**< The message ID. */ bool mIgnore; }; |