Merge pull request #15 from mq1n/main
enabled detailed packet logs for easier debugging
This commit is contained in:
@@ -1,12 +1,15 @@
|
|||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
#include "NetStream.h"
|
#include "NetStream.h"
|
||||||
//#include "eterCrypt.h"
|
//#include "eterCrypt.h"
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
#ifndef _IMPROVED_PACKET_ENCRYPTION_
|
#ifndef _IMPROVED_PACKET_ENCRYPTION_
|
||||||
#include "EterBase/tea.h"
|
#include "EterBase/tea.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define _PACKETDUMP
|
#ifdef _DEBUG
|
||||||
|
#define _PACKETDUMP
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef _IMPROVED_PACKET_ENCRYPTION_
|
#ifndef _IMPROVED_PACKET_ENCRYPTION_
|
||||||
void CNetworkStream::SetSecurityMode(bool isSecurityMode, const char* c_szTeaKey)
|
void CNetworkStream::SetSecurityMode(bool isSecurityMode, const char* c_szTeaKey)
|
||||||
@@ -721,25 +724,37 @@ bool CNetworkStream::Recv(int size)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::string dump_hex(const uint8_t* ptr, const std::size_t length)
|
||||||
|
{
|
||||||
|
if (!ptr || !length)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
std::vector <uint8_t> buffer(length);
|
||||||
|
memcpy(&buffer[0], ptr, length);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < length; ++i)
|
||||||
|
ss << std::hex << std::setfill('0') << std::setw(2) << (int)buffer.at(i) << ", ";
|
||||||
|
|
||||||
|
const auto str = ss.str();
|
||||||
|
return str.substr(0, str.size() - 2);
|
||||||
|
}
|
||||||
|
|
||||||
bool CNetworkStream::Recv(int size, char * pDestBuf)
|
bool CNetworkStream::Recv(int size, char * pDestBuf)
|
||||||
{
|
{
|
||||||
if (!Peek(size, pDestBuf))
|
if (!Peek(size, pDestBuf))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#ifdef _PACKETDUMP
|
#ifdef _PACKETDUMP
|
||||||
if (*pDestBuf != 0 )
|
if (*pDestBuf != 0)
|
||||||
{
|
{
|
||||||
TraceError("RECV< %s (%d)", GetRecvHeaderName(*pDestBuf), size);
|
const auto kHeader = *pDestBuf;
|
||||||
std::string contents;
|
TraceError("RECV< %s %u(0x%X) (%d)", GetRecvHeaderName(kHeader), kHeader, kHeader, size);
|
||||||
char buf[10];
|
|
||||||
for(int i = 1; i < size; i++)
|
const auto contents = dump_hex(reinterpret_cast<const uint8_t*>(pDestBuf), size);
|
||||||
{
|
TraceError("%s", contents.c_str());
|
||||||
sprintf(buf," %02x", (unsigned char)(pDestBuf[i]));
|
|
||||||
contents.append(buf);
|
|
||||||
}
|
|
||||||
TraceError(contents.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_recvBufOutputPos += size;
|
m_recvBufOutputPos += size;
|
||||||
@@ -762,18 +777,13 @@ bool CNetworkStream::Send(int size, const char * pSrcBuf)
|
|||||||
m_sendBufInputPos += size;
|
m_sendBufInputPos += size;
|
||||||
|
|
||||||
#ifdef _PACKETDUMP
|
#ifdef _PACKETDUMP
|
||||||
if (*pSrcBuf != 0 )
|
if (*pSrcBuf != 0)
|
||||||
{
|
{
|
||||||
TraceError("SEND> %s (%d)", GetSendHeaderName(*pSrcBuf), size);
|
const auto kHeader = *pSrcBuf;
|
||||||
std::string contents;
|
TraceError("SEND> %s %u(0x%X) (%d)", GetRecvHeaderName(kHeader), kHeader, kHeader, size);
|
||||||
char buf[10];
|
|
||||||
for(int i = 1; i < size; i++)
|
|
||||||
{
|
|
||||||
sprintf(buf," %02x", (unsigned char)(pSrcBuf[i]));
|
|
||||||
contents.append(buf);
|
|
||||||
}
|
|
||||||
TraceError(contents.c_str());
|
|
||||||
|
|
||||||
|
const auto contents = dump_hex(reinterpret_cast<const uint8_t*>(pSrcBuf), size);
|
||||||
|
TraceError("%s", contents.c_str());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ class CMainPacketHeaderMap : public CNetworkPacketHeaderMap
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int g_iLastPacket[2] = { 0, 0 };
|
static std::vector <uint8_t> gs_vecLastHeaders;
|
||||||
|
|
||||||
void CPythonNetworkStream::ExitApplication()
|
void CPythonNetworkStream::ExitApplication()
|
||||||
{
|
{
|
||||||
@@ -526,7 +526,10 @@ bool CPythonNetworkStream::CheckPacket(TPacketHeader * pRetHeader)
|
|||||||
|
|
||||||
if (!s_packetHeaderMap.Get(header, &PacketType))
|
if (!s_packetHeaderMap.Get(header, &PacketType))
|
||||||
{
|
{
|
||||||
TraceError("Unknown packet header: %d, last: %d %d", header, g_iLastPacket[0], g_iLastPacket[1]);
|
TraceError("Unknown packet header: %u(0x%X), Phase: %s, Last packets:", header, header, m_strPhase.c_str());
|
||||||
|
for (const auto& it : gs_vecLastHeaders)
|
||||||
|
TraceError("%u(0x%X)", it, it);
|
||||||
|
|
||||||
ClearRecvBuffer();
|
ClearRecvBuffer();
|
||||||
|
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
@@ -553,11 +556,15 @@ bool CPythonNetworkStream::CheckPacket(TPacketHeader * pRetHeader)
|
|||||||
{
|
{
|
||||||
if (!Peek(PacketType.iPacketSize))
|
if (!Peek(PacketType.iPacketSize))
|
||||||
{
|
{
|
||||||
TraceError("Not enough packet size: header %d packet size: %d, recv buffer size: %d (last: %d %d)",
|
TraceError("Not enough packet size: header %d packet size: %d, recv buffer size: %d last packets:",
|
||||||
header,
|
header,
|
||||||
PacketType.iPacketSize,
|
PacketType.iPacketSize,
|
||||||
GetRecvBufferSize(),
|
GetRecvBufferSize()
|
||||||
g_iLastPacket[0], g_iLastPacket[1]);
|
);
|
||||||
|
|
||||||
|
for (const auto& it : gs_vecLastHeaders)
|
||||||
|
TraceError("%u(0x%X)", it, it);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -567,8 +574,12 @@ bool CPythonNetworkStream::CheckPacket(TPacketHeader * pRetHeader)
|
|||||||
|
|
||||||
*pRetHeader = header;
|
*pRetHeader = header;
|
||||||
|
|
||||||
g_iLastPacket[0] = g_iLastPacket[1];
|
// Add to last headers, if last header is contain more than 10 headers, remove first header
|
||||||
g_iLastPacket[1] = header;
|
if (gs_vecLastHeaders.size() > 10)
|
||||||
|
gs_vecLastHeaders.erase(gs_vecLastHeaders.begin());
|
||||||
|
|
||||||
|
gs_vecLastHeaders.push_back(header);
|
||||||
|
|
||||||
//Tracenf("header %d size %d", header, PacketType.iPacketSize);
|
//Tracenf("header %d size %d", header, PacketType.iPacketSize);
|
||||||
//Tracenf("header %d size %d outputpos[%d] security %u", header, PacketType.iPacketSize, m_recvBufOutputPos, IsSecurityMode());
|
//Tracenf("header %d size %d outputpos[%d] security %u", header, PacketType.iPacketSize, m_recvBufOutputPos, IsSecurityMode());
|
||||||
return true;
|
return true;
|
||||||
@@ -576,8 +587,9 @@ bool CPythonNetworkStream::CheckPacket(TPacketHeader * pRetHeader)
|
|||||||
|
|
||||||
bool CPythonNetworkStream::RecvErrorPacket(int header)
|
bool CPythonNetworkStream::RecvErrorPacket(int header)
|
||||||
{
|
{
|
||||||
TraceError("Phase %s does not handle this header (header: %d, last: %d, %d)",
|
TraceError("Phase %s does not handle this header (header: %u(0x%X)) Last packets: ", m_strPhase.c_str(), header);
|
||||||
m_strPhase.c_str(), header, g_iLastPacket[0], g_iLastPacket[1]);
|
for (const auto& it : gs_vecLastHeaders)
|
||||||
|
TraceError("%u(0x%X)", it, it);
|
||||||
|
|
||||||
ClearRecvBuffer();
|
ClearRecvBuffer();
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user