1
0

Protocol 1.7: More output on unknown packets / protocol states.

This commit is contained in:
madmaxoft 2014-01-17 10:12:04 +01:00
parent aefe3111de
commit 3a1c0f2aef

View File

@ -1040,7 +1040,7 @@ void cProtocol172::AddReceivedData(const char * a_Data, int a_Size)
if (!HandlePacket(bb, PacketType)) if (!HandlePacket(bb, PacketType))
{ {
// Unknown packet, already been reported, but without the length. Log the length here: // Unknown packet, already been reported, but without the length. Log the length here:
LOGWARNING("Unhandled packet: type 0x%x, length %u", PacketType, PacketLen); LOGWARNING("Unhandled packet: type 0x%x, state %d, length %u", PacketType, m_State, PacketLen);
#ifdef _DEBUG #ifdef _DEBUG
// Dump the packet contents into the log: // Dump the packet contents into the log:
@ -1059,8 +1059,8 @@ void cProtocol172::AddReceivedData(const char * a_Data, int a_Size)
if (bb.GetReadableSpace() != 1) if (bb.GetReadableSpace() != 1)
{ {
// Read more or less than packet length, report as error // Read more or less than packet length, report as error
LOGWARNING("Protocol 1.7: Wrong number of bytes read for packet 0x%x. Read %u bytes, packet contained %u bytes", LOGWARNING("Protocol 1.7: Wrong number of bytes read for packet 0x%x, state %d. Read %u bytes, packet contained %u bytes",
PacketType, bb.GetUsedSpace() - bb.GetReadableSpace(), PacketLen PacketType, m_State, bb.GetUsedSpace() - bb.GetReadableSpace(), PacketLen
); );
ASSERT(!"Read wrong number of bytes!"); ASSERT(!"Read wrong number of bytes!");
m_Client->PacketError(PacketType); m_Client->PacketError(PacketType);
@ -1128,9 +1128,26 @@ bool cProtocol172::HandlePacket(cByteBuffer & a_ByteBuffer, UInt32 a_PacketType)
} }
break; break;
} }
default:
{
// Received a packet in an unknown state, report:
LOGWARNING("Received a packet in an unknown protocol state %d. Ignoring further packets.", m_State);
// Cannot kick the client - we don't know this state and thus the packet number for the kick packet
// Switch to a state when all further packets are silently ignored:
m_State = 255;
return false;
}
case 255:
{
// This is the state used for "not processing packets anymore" when we receive a bad packet from a client.
// Do not output anything (the caller will do that for us), just return failure
return false;
}
} // switch (m_State) } // switch (m_State)
// Unknown packet type, report to the client: // Unknown packet type, report to the ClientHandle:
m_Client->PacketUnknown(a_PacketType); m_Client->PacketUnknown(a_PacketType);
return false; return false;
} }