* added some hexdumps on invalid realm packets.

* disabled name query of players on incoming move opcodes.
* more debug output in general, 1st part
This commit is contained in:
False.Genesis 2007-03-10 16:59:55 +00:00
parent 2583f47e5d
commit 36aa23dadb
5 changed files with 62 additions and 23 deletions

View File

@ -210,7 +210,15 @@ void RealmSocket::OnRead(void)
{ {
log("RealmSocket: Got unknown packet, cmd=%u",cmd); log("RealmSocket: Got unknown packet, cmd=%u",cmd);
} }
ibuf.Remove(ibuf.GetLength()); // if we have data crap left on the buf, delete it if(ibuf.GetLength())
{
uint32 len = ibuf.GetLength();
char *data = new char[len];
ibuf.Read(data,len); // if we have data crap left on the buf, delete it
logdebug("Data left on RealmSocket, Hexdump:");
logdebug(toHexDump((uint8*)data,len).c_str());
delete [] data;
}
} }
@ -258,6 +266,17 @@ PseuInstance *RealmSocket::GetInstance(void)
void RealmSocket::_HandleLogonChallenge(void) void RealmSocket::_HandleLogonChallenge(void)
{ {
logdebug("RealmSocket: Got AUTH_LOGON_CHALLENGE [%u of %u bytes]",ibuf.GetLength(),sizeof(sAuthLogonChallenge_S)); logdebug("RealmSocket: Got AUTH_LOGON_CHALLENGE [%u of %u bytes]",ibuf.GetLength(),sizeof(sAuthLogonChallenge_S));
if(ibuf.GetLength() < sizeof(sAuthLogonChallenge_S))
{
logerror("AUTH_LOGON_CHALLENGE: Recieved incorrect/unknown packet. Hexdump:");
uint32 len = ibuf.GetLength();
char* data = new char[len];
ibuf.Read(data,len);
logerror(toHexDump((uint8*)data,len).c_str());
delete [] data;
return;
}
sAuthLogonChallenge_S lc; sAuthLogonChallenge_S lc;
ibuf.Read((char*)&lc, sizeof(sAuthLogonChallenge_S)); ibuf.Read((char*)&lc, sizeof(sAuthLogonChallenge_S));
@ -332,7 +351,7 @@ void RealmSocket::_HandleLogonChallenge(void)
S2hash.UpdateData((const uint8*)S2,16); S2hash.UpdateData((const uint8*)S2,16);
S2hash.Finalize(); S2hash.Finalize();
// Re-combine them // Re-combine them
char S_hash[40]; // 2*Sha1Len+1 for \0 char S_hash[40];
for(i=0;i<20;i++){ for(i=0;i<20;i++){
S_hash[i*2]=S1hash.GetDigest()[i]; S_hash[i*2]=S1hash.GetDigest()[i];
S_hash[i*2+1]=S2hash.GetDigest()[i]; S_hash[i*2+1]=S2hash.GetDigest()[i];
@ -368,15 +387,17 @@ void RealmSocket::_HandleLogonChallenge(void)
M2hash.UpdateData((const uint8*)S_hash,40); M2hash.UpdateData((const uint8*)S_hash,40);
M2hash.Finalize(); M2hash.Finalize();
logdebug("== Common Hashes ==");
//logdebug("--> M1=");printchex((char*)M1hash.GetDigest(),20,true); logdebug("--> M1=%s",toHexDump(M1hash.GetDigest(),M1hash.GetLength(),false).c_str());
//logdebug("--> M2=");printchex((char*)M2hash.GetDigest(),20,true); logdebug("--> M2=%s",toHexDump(M2hash.GetDigest(),M2hash.GetLength(),false).c_str());
// Calc CRC & CRC_hash // Calc CRC & CRC_hash
// i don't know yet how to calc it, so set it to zero // i don't know yet how to calc it, so set it to zero
char crc_hash[20]; char crc_hash[20];
memset(crc_hash,0,20); memset(crc_hash,0,20);
logdebug("--> CRC=%s",toHexDump((uint8*)crc_hash,20,false).c_str());
// now lets prepare the packet // now lets prepare the packet
ByteBuffer packet; ByteBuffer packet;
@ -397,7 +418,7 @@ void RealmSocket::_HandleLogonChallenge(void)
break; break;
default: default:
log("Unknown realm server response! opcode=0x%x\n",(unsigned char)lc.error); logerror("Unknown realm server response! opcode=0x%x\n",(unsigned char)lc.error);
break; break;
} }
} }
@ -406,6 +427,16 @@ void RealmSocket::_HandleLogonChallenge(void)
void RealmSocket::_HandleLogonProof(void) void RealmSocket::_HandleLogonProof(void)
{ {
logdetail("RealmSocket: Got AUTH_LOGON_PROOF [%u of %u bytes]\n",ibuf.GetLength(),26); logdetail("RealmSocket: Got AUTH_LOGON_PROOF [%u of %u bytes]\n",ibuf.GetLength(),26);
if(ibuf.GetLength() < 26)
{
logerror("AUTH_LOGON_PROOF: Recieved incorrect/unknown packet. Hexdump:");
uint32 len = ibuf.GetLength();
char* data = new char[len];
ibuf.Read(data,len);
logerror(toHexDump((uint8*)data,len).c_str());
delete [] data;
return;
}
sAuthLogonProof_S lp; sAuthLogonProof_S lp;
ibuf.Read((char*)&lp, 26); // the compiler didnt like 'sizeof(sAuthLogonProof_S)', said it was 28 ibuf.Read((char*)&lp, 26); // the compiler didnt like 'sizeof(sAuthLogonProof_S)', said it was 28
//printchex((char*)&lp, sizeof(sAuthLogonProof_S),true); //printchex((char*)&lp, sizeof(sAuthLogonProof_S),true);
@ -434,6 +465,6 @@ void RealmSocket::OnConnect()
void RealmSocket::OnConnectFailed(void) void RealmSocket::OnConnectFailed(void)
{ {
log("Connecting to Realm failed!"); logerror("Connecting to Realm failed!");
} }

View File

@ -588,21 +588,14 @@ void WorldSession::_HandleMovementOpcode(WorldPacket& recvPacket)
std::string plrname; std::string plrname;
guid = recvPacket.GetPackedGuid(); guid = recvPacket.GetPackedGuid();
recvPacket >> flags >> time >> x >> y >> z >> o; recvPacket >> flags >> time >> x >> y >> z >> o;
if(guid){ /*if(guid){
plrname=plrNameCache.GetName(guid); plrname=plrNameCache.GetName(guid);
if(plrname.empty()) if(plrname.empty())
{ {
SendQueryPlayerName(guid); SendQueryPlayerName(guid);
plrname="Unknown Entity"; plrname="Unknown Entity";
} }
} }*/
// for follow:
//if(_followGUID==guid){
// ByteBuffer bb;
// bb << time << flags << x << y << z << o;
// SendWorldPacket(opcode,&bb);
//}
// more to come
} }
void WorldSession::_HandleTelePortAckOpcode(WorldPacket& recvPacket) void WorldSession::_HandleTelePortAckOpcode(WorldPacket& recvPacket)
@ -616,7 +609,7 @@ void WorldSession::_HandleTelePortAckOpcode(WorldPacket& recvPacket)
recvPacket >> unk >> guid >> unk3 >> unk1 >> unk2 >> o >> x >> y >> z >> ang >> unk4; recvPacket >> unk >> guid >> unk3 >> unk1 >> unk2 >> o >> x >> y >> z >> ang >> unk4;
logdetail("Got teleported, data: x: %f, y: %f, z: %f, o: %f, guid: %d\n", x, y, z, o, guid); logdetail("Got teleported, data: x: %f, y: %f, z: %f, o: %f, guid: "I64FMT, x, y, z, o, guid);
WorldPacket response; WorldPacket response;
response.SetOpcode(MSG_MOVE_FALL_LAND); response.SetOpcode(MSG_MOVE_FALL_LAND);

View File

@ -12,17 +12,17 @@ WorldSocket::WorldSocket(SocketHandler &h, WorldSession *s) : TcpSocket(h)
void WorldSocket::OnConnect() void WorldSocket::OnConnect()
{ {
printf("Connected to world server.\r\n"); log("Connected to world server.\r\n");
} }
void WorldSocket::OnConnectFailed() void WorldSocket::OnConnectFailed()
{ {
printf("WorldSocket::OnConnectFailed()\n"); logerror("WorldSocket::OnConnectFailed()\n");
} }
void WorldSocket::OnDelete() void WorldSocket::OnDelete()
{ {
printf("Connection to world server has been closed.\n"); log("Connection to world server has been closed.\n");
if(_session) if(_session)
_session->SetSocket(NULL); _session->SetSocket(NULL);
} }

View File

@ -70,3 +70,17 @@ uint64 toInt(std::string str)
return strtoul(str.c_str(),NULL,10); return strtoul(str.c_str(),NULL,10);
} }
std::string toHexDump(uint8* array,uint32 size,bool spaces)
{
std::stringstream ss;
char buf[5];
for(uint32 i=0;i<size;i++)
{
sprintf(buf,(array[i]<0x0F)?"0%X":"%X",(uint32)array[i]);
ss << buf;
if(spaces)
ss << ' ';
}
return ss.str();
}

View File

@ -3,9 +3,9 @@
#include "common.h" #include "common.h"
#define SETBIT(var,bit) ( (var)|=(1<<(bit)) ); #define SETBIT(var,bit) ( (var)|=(1<<(bit)) )
#define UNSETBIT(var,bit) ( (var)&=(~(1<<(bit))) ); #define UNSETBIT(var,bit) ( (var)&=(~(1<<(bit))) )
#define HASBIT(var,bit) ( (var)&(1<<(bit)) ); #define HASBIT(var,bit) ( (var)&(1<<(bit)) )
void printchex(std::string,bool); void printchex(std::string,bool);
void printchex(char *in, uint32 len, bool); void printchex(char *in, uint32 len, bool);
@ -14,5 +14,6 @@ std::string stringToLower(std::string);
std::string toString(uint64); std::string toString(uint64);
std::string getDateString(void); std::string getDateString(void);
uint64 toInt(std::string); uint64 toInt(std::string);
std::string toHexDump(uint8* array,uint32 size,bool spaces=true);
#endif #endif