From 11d80e856811ceddec805ce68b0a17b13f5cf25e Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Mon, 1 Sep 2014 12:38:59 +0300
Subject: In debug packets logging also display offset.

---
 src/logger.cpp                 | 36 +++++++++++++++++++++++++++++++-----
 src/logger.h                   |  8 +++++---
 src/net/eathena/messagein.cpp  |  5 +++--
 src/net/eathena/messageout.cpp |  7 ++++---
 src/net/messagein.cpp          | 26 ++++++++++++++------------
 src/net/messageout.cpp         |  7 ++++---
 src/net/tmwa/messagein.cpp     |  5 +++--
 src/net/tmwa/messageout.cpp    |  7 ++++---
 8 files changed, 68 insertions(+), 33 deletions(-)

(limited to 'src')

diff --git a/src/logger.cpp b/src/logger.cpp
index 024de4660..2b80602e8 100644
--- a/src/logger.cpp
+++ b/src/logger.cpp
@@ -120,7 +120,9 @@ void Logger::dlog(const std::string &str)
         std::cout << timeStr.str() << str << std::endl;
 }
 
-void Logger::dlog2(const std::string &str, const char* const comment)
+void Logger::dlog2(const std::string &str,
+                   const int pos,
+                   const char* const comment)
 {
     if (!mDebugLog)
         return;
@@ -137,17 +139,41 @@ void Logger::dlog2(const std::string &str, const char* const comment)
     if (mLogFile.is_open())
     {
         if (comment)
-            mLogFile << timeStr.str() << str << ": " << comment << std::endl;
+        {
+            mLogFile << timeStr.str();
+            mLogFile.fill('0');
+            mLogFile.width(4);
+            mLogFile << pos << " ";
+            mLogFile << str << ": " << comment << std::endl;
+        }
         else
-            mLogFile << timeStr.str() << str << std::endl;
+        {
+            mLogFile << timeStr.str();
+            mLogFile.fill('0');
+            mLogFile.width(4);
+            mLogFile << pos << " ";
+            mLogFile << str << std::endl;
+        }
     }
 
     if (mLogToStandardOut)
     {
         if (comment)
-            std::cout << timeStr.str() << str << ": " << comment << std::endl;
+        {
+            std::cout << timeStr.str();
+            std::cout.fill('0');
+            std::cout.width(4);
+            std::cout << pos << " ";
+            std::cout << str << ": " << comment << std::endl;
+        }
         else
-            std::cout << timeStr.str() << str << std::endl;
+        {
+            std::cout << timeStr.str();
+            std::cout.fill('0');
+            std::cout.width(4);
+            std::cout << pos << " ";
+            std::cout << str << std::endl;
+        }
     }
 }
 #endif
diff --git a/src/logger.h b/src/logger.h
index 8eafc70af..ba1aa3f29 100644
--- a/src/logger.h
+++ b/src/logger.h
@@ -39,9 +39,9 @@
 #endif
 
 #ifdef ENABLEDEBUGLOG
-#define DEBUGLOG2(msg, comment) \
+#define DEBUGLOG2(msg, pos, comment) \
     if (logger) \
-        logger->dlog2(msg, comment)
+        logger->dlog2(msg, pos, comment)
 #else
 #define DEBUGLOG2(msg, comment) {}
 #endif
@@ -119,7 +119,9 @@ class Logger final
          */
         void dlog(const std::string &str);
 
-        void dlog2(const std::string &str, const char* const comment);
+        void dlog2(const std::string &str,
+            const int pos,
+            const char* const comment);
 #endif
 
         void setDebugLog(const bool n)
diff --git a/src/net/eathena/messagein.cpp b/src/net/eathena/messagein.cpp
index e3918dd3a..60d89980d 100644
--- a/src/net/eathena/messagein.cpp
+++ b/src/net/eathena/messagein.cpp
@@ -59,9 +59,10 @@ int16_t MessageIn::readInt16(const char *const str)
         memcpy(&value, mData + static_cast<size_t>(mPos), sizeof(int16_t));
 #endif
     }
+    DEBUGLOG2("readInt16: " + toStringPrint(static_cast<int>(value)),
+        mPos, str);
     mPos += 2;
     PacketCounters::incInBytes(2);
-    DEBUGLOG2("readInt16: " + toStringPrint(static_cast<int>(value)), str);
     return value;
 }
 
@@ -78,9 +79,9 @@ int32_t MessageIn::readInt32(const char *const str)
         memcpy(&value, mData + static_cast<size_t>(mPos), sizeof(int32_t));
 #endif
     }
+    DEBUGLOG2("readInt32: " + toStringPrint(value), mPos, str);
     mPos += 4;
     PacketCounters::incInBytes(4);
-    DEBUGLOG2("readInt32: " + toStringPrint(value), str);
     return value;
 }
 
diff --git a/src/net/eathena/messageout.cpp b/src/net/eathena/messageout.cpp
index 7c5d328cb..1b0dae6f1 100644
--- a/src/net/eathena/messageout.cpp
+++ b/src/net/eathena/messageout.cpp
@@ -57,7 +57,6 @@ void MessageOut::expand(const size_t bytes)
 
 void MessageOut::writeInt16(const int16_t value, const char *const str)
 {
-    DEBUGLOG2("writeInt16: " + toStringPrint(static_cast<int>(value)), str);
     expand(2);
 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
     int16_t swap = SDL_Swap16(value);
@@ -65,13 +64,15 @@ void MessageOut::writeInt16(const int16_t value, const char *const str)
 #else
     memcpy(mData + static_cast<size_t>(mPos), &value, sizeof(int16_t));
 #endif
+    DEBUGLOG2("writeInt16: " + toStringPrint(static_cast<int>(value)),
+        mPos, str);
     mPos += 2;
     PacketCounters::incOutBytes(2);
 }
 
 void MessageOut::writeInt32(const int32_t value, const char *const str)
 {
-    DEBUGLOG2("writeInt32: " + toStringPrint(value), str);
+    DEBUGLOG2("writeInt32: " + toStringPrint(value), mPos, str);
     expand(4);
 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
     int32_t swap = SDL_Swap32(value);
@@ -95,7 +96,7 @@ void MessageOut::writeCoordinates(const uint16_t x,
     DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u",
         static_cast<unsigned>(x),
         static_cast<unsigned>(y),
-        static_cast<unsigned>(direction)), str);
+        static_cast<unsigned>(direction)), mPos, str);
     unsigned char *const data = reinterpret_cast<unsigned char*>(mData)
         + static_cast<size_t>(mPos);
     mNetwork->mOutSize += 3;
diff --git a/src/net/messagein.cpp b/src/net/messagein.cpp
index b131e85e0..92447cde2 100644
--- a/src/net/messagein.cpp
+++ b/src/net/messagein.cpp
@@ -53,9 +53,10 @@ unsigned char MessageIn::readUInt8(const char *const str)
     if (mPos < mLength)
         value = static_cast<unsigned char>(mData[mPos]);
 
+    DEBUGLOG2("readUInt8: " + toStringPrint(static_cast<int>(value)),
+        mPos, str);
     mPos += 1;
     PacketCounters::incInBytes(1);
-    DEBUGLOG2("readUInt8: " + toStringPrint(static_cast<int>(value)), str);
     return value;
 }
 
@@ -65,9 +66,10 @@ signed char MessageIn::readInt8(const char *const str)
     if (mPos < mLength)
         value = static_cast<signed char>(mData[mPos]);
 
+    DEBUGLOG2("readInt8: " + toStringPrint(static_cast<int>(value)),
+        mPos, str);
     mPos += 1;
     PacketCounters::incInBytes(1);
-    DEBUGLOG2("readInt8: " + toStringPrint(static_cast<int>(value)), str);
     return value;
 }
 
@@ -120,7 +122,7 @@ void MessageIn::readCoordinates(uint16_t &restrict x,
         DEBUGLOG2(std::string("readCoordinates: ").append(toString(
             static_cast<int>(x))).append(",").append(toString(
             static_cast<int>(y))).append(",").append(toString(
-            static_cast<int>(serverDir))), str);
+            static_cast<int>(serverDir))), mPos, str);
     }
     else
     {
@@ -157,7 +159,7 @@ void MessageIn::readCoordinatePair(uint16_t &restrict srcX,
             static_cast<int>(srcX))).append(",").append(toString(
             static_cast<int>(srcY))).append(" ").append(toString(
             static_cast<int>(dstX))).append(",").append(toString(
-            static_cast<int>(dstY))), str);
+            static_cast<int>(dstY))), mPos, str);
     }
     else
     {
@@ -173,9 +175,9 @@ void MessageIn::readCoordinatePair(uint16_t &restrict srcX,
 
 void MessageIn::skip(const unsigned int length, const char *const str)
 {
+    DEBUGLOG2("skip: " + toString(static_cast<int>(length)), mPos, str);
     mPos += length;
     PacketCounters::incInBytes(length);
-    DEBUGLOG2("skip: " + toString(static_cast<int>(length)), str);
 }
 
 std::string MessageIn::readString(int length, const char *const dstr)
@@ -187,8 +189,8 @@ std::string MessageIn::readString(int length, const char *const dstr)
     // Make sure the string isn't erroneous
     if (length < 0 || mPos + length > mLength)
     {
+        DEBUGLOG2("readString error", mPos, dstr);
         mPos = mLength + 1;
-        DEBUGLOG2("readString error", dstr);
         return "";
     }
 
@@ -199,9 +201,9 @@ std::string MessageIn::readString(int length, const char *const dstr)
 
     const std::string str(stringBeg, stringEnd
         ? stringEnd - stringBeg : static_cast<size_t>(length));
+    DEBUGLOG2("readString: " + str, mPos, dstr);
     mPos += length;
     PacketCounters::incInBytes(length);
-    DEBUGLOG2("readString: " + str, dstr);
     return str;
 }
 
@@ -225,9 +227,7 @@ std::string MessageIn::readRawString(int length, const char *const dstr)
     std::string str(stringBeg, stringEnd
         ? stringEnd - stringBeg : static_cast<size_t>(length));
 
-    mPos += length;
-    PacketCounters::incInBytes(length);
-    DEBUGLOG2("readString: " + str, dstr);
+    DEBUGLOG2("readString: " + str, mPos, dstr);
 
     if (stringEnd)
     {
@@ -240,10 +240,12 @@ std::string MessageIn::readRawString(int length, const char *const dstr)
             stringEnd2 ? stringEnd2 - stringBeg2 : len2);
         if (hiddenPart.length() > 0)
         {
-            DEBUGLOG2("readString2: " + hiddenPart, dstr);
+            DEBUGLOG2("readString2: " + hiddenPart, mPos, dstr);
             return str.append("|").append(hiddenPart);
         }
     }
+    mPos += length;
+    PacketCounters::incInBytes(length);
 
     return str;
 }
@@ -257,8 +259,8 @@ unsigned char *MessageIn::readBytes(int length, const char *const dstr)
     // Make sure the string isn't erroneous
     if (length < 0 || mPos + length > mLength)
     {
+        DEBUGLOG2("readBytesString error", mPos, dstr);
         mPos = mLength + 1;
-        DEBUGLOG2("readBytesString error", dstr);
         return nullptr;
     }
 
diff --git a/src/net/messageout.cpp b/src/net/messageout.cpp
index ff778d89a..0026538b5 100644
--- a/src/net/messageout.cpp
+++ b/src/net/messageout.cpp
@@ -47,9 +47,10 @@ MessageOut::MessageOut(const int16_t id A_UNUSED) :
 
 void MessageOut::writeInt8(const int8_t value, const char *const str)
 {
-    DEBUGLOG2("writeInt8: " + toStringPrint(static_cast<int>(value)), str);
     expand(1);
     mData[mPos] = value;
+    DEBUGLOG2("writeInt8: " + toStringPrint(static_cast<int>(value)),
+        mPos, str);
     mPos += 1;
     PacketCounters::incOutBytes(1);
 }
@@ -83,8 +84,8 @@ void MessageOut::writeString(const std::string &string,
             length - stringLength);
     }
 
+    DEBUGLOG2("writeString: " + string, mPos, str);
     mPos += length;
-    DEBUGLOG2("writeString: " + string, str);
     PacketCounters::incOutBytes(length);
 }
 
@@ -117,8 +118,8 @@ void MessageOut::writeStringNoLog(const std::string &string,
             length - stringLength);
     }
 
+    DEBUGLOG2("writeString: ***", mPos, str);
     mPos += length;
-    DEBUGLOG2("writeString: ***", str);
     PacketCounters::incOutBytes(length);
 }
 
diff --git a/src/net/tmwa/messagein.cpp b/src/net/tmwa/messagein.cpp
index 18686f347..d467048d7 100644
--- a/src/net/tmwa/messagein.cpp
+++ b/src/net/tmwa/messagein.cpp
@@ -59,9 +59,10 @@ int16_t MessageIn::readInt16(const char *const str)
         memcpy(&value, mData + static_cast<size_t>(mPos), sizeof(int16_t));
 #endif
     }
+    DEBUGLOG2("readInt16: " + toStringPrint(static_cast<int>(value)),
+        mPos, str);
     mPos += 2;
     PacketCounters::incInBytes(2);
-    DEBUGLOG2("readInt16: " + toStringPrint(static_cast<int>(value)), str);
     return value;
 }
 
@@ -78,9 +79,9 @@ int32_t MessageIn::readInt32(const char *const str)
         memcpy(&value, mData + static_cast<size_t>(mPos), sizeof(int32_t));
 #endif
     }
+    DEBUGLOG2("readInt32: " + toStringPrint(value), mPos, str);
     mPos += 4;
     PacketCounters::incInBytes(4);
-    DEBUGLOG2("readInt32: " + toStringPrint(value), str);
     return value;
 }
 
diff --git a/src/net/tmwa/messageout.cpp b/src/net/tmwa/messageout.cpp
index a740df563..a66c1c2b1 100644
--- a/src/net/tmwa/messageout.cpp
+++ b/src/net/tmwa/messageout.cpp
@@ -57,7 +57,8 @@ void MessageOut::expand(const size_t bytes)
 
 void MessageOut::writeInt16(const int16_t value, const char *const str)
 {
-    DEBUGLOG2("writeInt16: " + toStringPrint(static_cast<int>(value)), str);
+    DEBUGLOG2("writeInt16: " + toStringPrint(static_cast<int>(value)),
+        mPos, str);
     expand(2);
 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
     int16_t swap = SDL_Swap16(value);
@@ -71,7 +72,7 @@ void MessageOut::writeInt16(const int16_t value, const char *const str)
 
 void MessageOut::writeInt32(const int32_t value, const char *const str)
 {
-    DEBUGLOG2("writeInt32: " + toStringPrint(value), str);
+    DEBUGLOG2("writeInt32: " + toStringPrint(value), mPos, str);
     expand(4);
 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
     int32_t swap = SDL_Swap32(value);
@@ -94,7 +95,7 @@ void MessageOut::writeCoordinates(const uint16_t x,
 {
     DEBUGLOG2(strprintf("writeCoordinates: %u,%u %u",
         static_cast<unsigned>(x), static_cast<unsigned>(y),
-        static_cast<unsigned>(direction)), str);
+        static_cast<unsigned>(direction)), mPos, str);
     unsigned char *const data = reinterpret_cast<unsigned char*>(mData)
         + static_cast<size_t>(mPos);
     mNetwork->mOutSize += 3;
-- 
cgit v1.2.3-70-g09d2