From 2ba77cdc467805d541410903b32cddf30ab7e2e9 Mon Sep 17 00:00:00 2001 From: mq1n Date: Tue, 2 Sep 2025 19:24:11 +0300 Subject: [PATCH] enabled detailed packet logs for easier debugging --- src/game/desc.cpp | 14 +++++++++++++- src/game/desc.h | 1 + src/game/input.cpp | 33 +++++++++++++++++++++++++++++---- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/game/desc.cpp b/src/game/desc.cpp index 0016c57..0501245 100644 --- a/src/game/desc.cpp +++ b/src/game/desc.cpp @@ -230,7 +230,7 @@ bool DESC::Setup(LPFDWATCH _fdw, socket_t _fd, const struct sockaddr_in & c_rSoc // m_lpOutputBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE * 2); //else //NOTE: 이걸 나라별로 다르게 잡아야할 이유가 있나? - m_lpOutputBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE * 2); + m_lpOutputBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE * 3); // Default: 2 m_iMinInputBufferLen = MAX_INPUT_LEN >> 1; m_lpInputBuffer = buffer_new(MAX_INPUT_LEN); @@ -418,6 +418,12 @@ void DESC::BufferedPacket(const void * c_pvData, int iSize) if (!m_lpBufferedOutputBuffer) m_lpBufferedOutputBuffer = buffer_new(MAX(1024, iSize)); +#ifdef _DEBUG + const std::string stName = GetCharacter() ? GetCharacter()->GetName() : GetHostName(); + const auto kHeader = *(static_cast(c_pvData)); + sys_log(0, "[B] SENT HEADER : %u(0x%X) to %s (size %d) ", kHeader, kHeader, stName.c_str(), iSize); +#endif + buffer_write(m_lpBufferedOutputBuffer, c_pvData, iSize); } @@ -435,6 +441,12 @@ void DESC::Packet(const void * c_pvData, int iSize) return; } +#ifdef _DEBUG + const std::string stName = GetCharacter() ? GetCharacter()->GetName() : GetHostName(); + const auto kHeader = *(static_cast(c_pvData)); + sys_log(0, "[N] SENT HEADER : %u(0x%X) to %s (size %d) ", kHeader, kHeader, stName.c_str(), iSize); +#endif + if (m_stRelayName.length() != 0) { // Relay 패킷은 암호화하지 않는다. diff --git a/src/game/desc.h b/src/game/desc.h index 4001f2a..e0f5135 100644 --- a/src/game/desc.h +++ b/src/game/desc.h @@ -111,6 +111,7 @@ class DESC LPCHARACTER GetCharacter() { return m_lpCharacter; } bool IsPhase(int phase) const { return m_iPhase == phase ? true : false; } + int32_t GetPhase() const { return m_iPhase; } const struct sockaddr_in & GetAddr() { return m_SockAddr; } diff --git a/src/game/input.cpp b/src/game/input.cpp index 4bd7633..584acd0 100644 --- a/src/game/input.cpp +++ b/src/game/input.cpp @@ -81,14 +81,33 @@ bool CInputProcessor::Process(LPDESC lpDesc, const void * c_pvOrig, int iBytes, iPacketLen = 1; else if (!m_pPacketInfo->Get(bHeader, &iPacketLen, &c_pszName)) { - sys_err("UNKNOWN HEADER: %d, LAST HEADER: %d(%d), REMAIN BYTES: %d, fd: %d", - bHeader, bLastHeader, iLastPacketLen, m_iBufferLeft, lpDesc->GetSocket()); - //printdata((BYTE *) c_pvOrig, m_iBufferLeft); + LPCHARACTER ch = lpDesc->GetCharacter(); + + char szLogBuffer[1024]; + snprintf(szLogBuffer, sizeof(szLogBuffer), + "UNKNOWN HEADER: %u(0x%X) LAST HEADER: %u(0x%X)[%u], REMAIN BYTES: %d, CHAR: %s, PHASE: %d, fd: %d host: %s", + bHeader, bHeader, bLastHeader, bLastHeader, iLastPacketLen, m_iBufferLeft, + ch ? ch->GetName() : "", + lpDesc->GetPhase(), lpDesc->GetSocket(), lpDesc->GetHostName() + ); + + if (lpDesc->GetPhase() < PHASE_SELECT) // early phase + sys_log(0, szLogBuffer); + else + sys_err(szLogBuffer); + +#if defined(_DEBUG) && defined(_WIN32) + printdata((uint8_t*)c_pvOrig, m_iBufferLeft); +#endif lpDesc->SetPhase(PHASE_CLOSE); return true; } - sys_log(0, "PACKET %d (%s)", bHeader, c_pszName); +#ifdef _DEBUG + const auto ch = lpDesc->GetCharacter(); + const std::string stName = ch ? ch->GetName() : lpDesc->GetHostName(); + sys_log(0, "RECEIVED HEADER : %u(0x%X) to %s (size %d) ", bHeader, bHeader, stName.c_str(), iBytes); +#endif if (m_iBufferLeft < iPacketLen) return true; @@ -103,7 +122,13 @@ bool CInputProcessor::Process(LPDESC lpDesc, const void * c_pvOrig, int iBytes, int iExtraPacketSize = Analyze(lpDesc, bHeader, c_pData); if (iExtraPacketSize < 0) + { + sys_err("Failed to analyze header(%u) size: %d phase: %d host %s from %s (%u) in: %u", + bHeader, iPacketLen, lpDesc->GetPhase(), lpDesc->GetHostName(), + ch ? ch->GetName() : "NO_CHAR", ch ? ch->GetPlayerID() : 0, ch ? ch->GetMapIndex() : 0 + ); return true; + } iPacketLen += iExtraPacketSize; lpDesc->Log("%s %d", c_pszName, iPacketLen);