1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-24 13:47:46 +00:00

Ported beautiful packet printing from classic

This commit is contained in:
amibu 2017-10-17 20:13:01 +02:00
parent 9cac3a6952
commit 4428ad3033
4 changed files with 68 additions and 15 deletions

View file

@ -5,6 +5,7 @@
#include <time.h> #include <time.h>
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include <boost/format.hpp> #include <boost/format.hpp>
#include "Server_Common/Util/Util.h"
Core::Network::Packets::GamePacket::GamePacket( uint16_t subType, uint16_t size, uint32_t id1, uint32_t id2, uint16_t type ) Core::Network::Packets::GamePacket::GamePacket( uint16_t subType, uint16_t size, uint32_t id1, uint32_t id2, uint16_t type )
{ {
@ -97,16 +98,5 @@ void Core::Network::Packets::GamePacket::savePacket()
std::string Core::Network::Packets::GamePacket::toString() const std::string Core::Network::Packets::GamePacket::toString() const
{ {
return Core::Util::binaryToHexDump( const_cast<uint8_t *>(&m_dataBuf[0]), getSize() );
std::string str = "\n";
for( uint32_t i = 0; i < getSize(); i++ )
{
str += boost::str( boost::format( "%|02X|" ) % ( int32_t ) ( m_dataBuf[i] & 0xFF ) ) + " ";
if( ( i + 1 ) % 16 == 0 )
str += "\n";
}
str += "\n";
return str;
} }

View file

@ -1,9 +1,9 @@
#include "Util.h" #include "Util.h"
#include <chrono> #include <chrono>
#include <boost/variant/detail/substitute.hpp>
std::string Core::Util::binaryToHexString( uint8_t* pBinData, uint16_t size ) std::string Core::Util::binaryToHexString(uint8_t* pBinData, uint16_t size)
{ {
std::string outStr; std::string outStr;
for( uint32_t i = 0; i < size; i++ ) for( uint32_t i = 0; i < size; i++ )
@ -15,6 +15,67 @@ std::string Core::Util::binaryToHexString( uint8_t* pBinData, uint16_t size )
} }
std::string Core::Util::binaryToHexDump( uint8_t* pBinData, uint16_t size )
{
int bytesPerLine = 16;
std::string hexChars = "0123456789ABCDEF";
int offsetBlock = 8 + 3;
int byteBlock = offsetBlock + bytesPerLine * 3 + ( bytesPerLine - 1 ) / 8 + 2;
int lineLength = byteBlock + bytesPerLine + 1;
std::string line ( lineLength, ' ' );
int numLines = ( size + bytesPerLine - 1 ) / bytesPerLine;
std::string outStr;
for( uint32_t i = 0; i < size; i += bytesPerLine )
{
line[0] = hexChars[( i >> 28 ) & 0xF];
line[1] = hexChars[( i >> 24 ) & 0xF];
line[2] = hexChars[( i >> 20 ) & 0xF];
line[3] = hexChars[( i >> 16 ) & 0xF];
line[4] = hexChars[( i >> 12 ) & 0xF];
line[5] = hexChars[( i >> 8 ) & 0xF];
line[6] = hexChars[( i >> 4 ) & 0xF];
line[7] = hexChars[( i >> 0 ) & 0xF];
int hexColumn = offsetBlock;
int charColumn = byteBlock;
for( int j = 0; j < bytesPerLine; j++ )
{
if( j > 0 && ( j & 7 ) == 0)
{
hexColumn++;
}
if( i + j >= size )
{
line[hexColumn] = ' ';
line[hexColumn + 1] = ' ';
line[charColumn] = ' ';
}
else
{
uint8_t by = pBinData[i + j];
line[hexColumn] = hexChars[( by >> 4 ) & 0xF];
line[hexColumn + 1] = hexChars[by & 0xF];
line[charColumn] = by < 32 ? '.' : static_cast<char>(by);
}
hexColumn += 3;
charColumn++;
}
outStr += line + "\n";
}
return outStr;
}
uint64_t Core::Util::getTimeMs() uint64_t Core::Util::getTimeMs()
{ {
std::chrono::milliseconds epoch = std::chrono::duration_cast< std::chrono::milliseconds >(std::chrono::system_clock::now().time_since_epoch()); std::chrono::milliseconds epoch = std::chrono::duration_cast< std::chrono::milliseconds >(std::chrono::system_clock::now().time_since_epoch());

View file

@ -9,6 +9,8 @@ namespace Util {
std::string binaryToHexString( uint8_t* pBinData, uint16_t size ); std::string binaryToHexString( uint8_t* pBinData, uint16_t size );
std::string binaryToHexDump(uint8_t* pBinData, uint16_t size);
uint64_t getTimeMs(); uint64_t getTimeMs();
uint64_t getTimeSeconds(); uint64_t getTimeSeconds();

View file

@ -206,7 +206,7 @@ void Core::Network::GameConnection::handleZonePacket( const Packets::GamePacket&
g_log.debug( sessionStr + " Undefined Zone IPC : Unknown ( " + g_log.debug( sessionStr + " Undefined Zone IPC : Unknown ( " +
boost::str( boost::format( "%|04X|" ) % boost::str( boost::format( "%|04X|" ) %
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" ); static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
g_log.debug( pPacket.toString() ); g_log.debug( "\n" + pPacket.toString() );
} }
} }