ProtoProxy: Fixed warnings in Connection.cpp.
This commit is contained in:
parent
adf3b3a569
commit
dc5ab256a5
@ -100,13 +100,11 @@
|
|||||||
CLIENTENCRYPTSEND(ToClient.data(), ToClient.size()); \
|
CLIENTENCRYPTSEND(ToClient.data(), ToClient.size()); \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
/* case csWaitingForEncryption: \
|
case csWaitingForEncryption: \
|
||||||
{ \
|
{ \
|
||||||
Log("Waiting for client encryption, queued %u bytes", ToClient.size()); \
|
|
||||||
m_ClientEncryptionBuffer.append(ToClient.data(), ToClient.size()); \
|
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
*/ \
|
\
|
||||||
} \
|
} \
|
||||||
DebugSleep(50); \
|
DebugSleep(50); \
|
||||||
}
|
}
|
||||||
@ -384,13 +382,13 @@ bool cConnection::RelayFromServer(void)
|
|||||||
case csEncryptedUnderstood:
|
case csEncryptedUnderstood:
|
||||||
{
|
{
|
||||||
m_ServerDecryptor.ProcessData(reinterpret_cast<Byte *>(Buffer), reinterpret_cast<Byte *>(Buffer), static_cast<size_t>(res));
|
m_ServerDecryptor.ProcessData(reinterpret_cast<Byte *>(Buffer), reinterpret_cast<Byte *>(Buffer), static_cast<size_t>(res));
|
||||||
DataLog(Buffer, res, "Decrypted %d bytes from the SERVER", res);
|
DataLog(Buffer, static_cast<size_t>(res), "Decrypted %d bytes from the SERVER", res);
|
||||||
return DecodeServersPackets(Buffer, res);
|
return DecodeServersPackets(Buffer, res);
|
||||||
}
|
}
|
||||||
case csEncryptedUnknown:
|
case csEncryptedUnknown:
|
||||||
{
|
{
|
||||||
m_ServerDecryptor.ProcessData(reinterpret_cast<Byte *>(Buffer), reinterpret_cast<Byte *>(Buffer), static_cast<size_t>(res));
|
m_ServerDecryptor.ProcessData(reinterpret_cast<Byte *>(Buffer), reinterpret_cast<Byte *>(Buffer), static_cast<size_t>(res));
|
||||||
DataLog(Buffer, res, "Decrypted %d bytes from the SERVER", res);
|
DataLog(Buffer, static_cast<size_t>(res), "Decrypted %d bytes from the SERVER", res);
|
||||||
return CLIENTSEND(Buffer, static_cast<size_t>(res));
|
return CLIENTSEND(Buffer, static_cast<size_t>(res));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -412,7 +410,7 @@ bool cConnection::RelayFromClient(void)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
DataLog(Buffer, res, "Received %d bytes from the CLIENT", res);
|
DataLog(Buffer, static_cast<size_t>(res), "Received %d bytes from the CLIENT", res);
|
||||||
|
|
||||||
switch (m_ClientState)
|
switch (m_ClientState)
|
||||||
{
|
{
|
||||||
@ -427,7 +425,7 @@ bool cConnection::RelayFromClient(void)
|
|||||||
}
|
}
|
||||||
case csEncryptedUnknown:
|
case csEncryptedUnknown:
|
||||||
{
|
{
|
||||||
DataLog(Buffer, res, "Decrypted %d bytes from the CLIENT", res);
|
DataLog(Buffer, static_cast<size_t>(res), "Decrypted %d bytes from the CLIENT", res);
|
||||||
m_ServerEncryptor.ProcessData(reinterpret_cast<Byte *>(Buffer), reinterpret_cast<Byte *>(Buffer), static_cast<size_t>(res));
|
m_ServerEncryptor.ProcessData(reinterpret_cast<Byte *>(Buffer), reinterpret_cast<Byte *>(Buffer), static_cast<size_t>(res));
|
||||||
return SERVERSEND(Buffer, static_cast<size_t>(res));
|
return SERVERSEND(Buffer, static_cast<size_t>(res));
|
||||||
}
|
}
|
||||||
@ -454,7 +452,7 @@ bool cConnection::SendData(SOCKET a_Socket, const char * a_Data, size_t a_Size,
|
|||||||
{
|
{
|
||||||
DataLog(a_Data, a_Size, "Sending data to %s, %u bytes", a_Peer, static_cast<unsigned>(a_Size));
|
DataLog(a_Data, a_Size, "Sending data to %s, %u bytes", a_Peer, static_cast<unsigned>(a_Size));
|
||||||
|
|
||||||
int res = send(a_Socket, a_Data, a_Size, 0); // Windows uses int for a_Size, Linux uses size_t; but Windows doesn't complain
|
int res = static_cast<int>(send(a_Socket, a_Data, a_Size, 0)); // Windows uses int for a_Size, Linux uses size_t; but Windows doesn't complain. Return type is int on Windows and ssize_t on Linux
|
||||||
if (res <= 0)
|
if (res <= 0)
|
||||||
{
|
{
|
||||||
Log("%s closed the socket: %d, %d; aborting connection", a_Peer, res, SocketError);
|
Log("%s closed the socket: %d, %d; aborting connection", a_Peer, res, SocketError);
|
||||||
@ -627,7 +625,7 @@ bool cConnection::DecodeClientsPackets(const char * a_Data, int a_Size)
|
|||||||
|
|
||||||
bool cConnection::DecodeServersPackets(const char * a_Data, int a_Size)
|
bool cConnection::DecodeServersPackets(const char * a_Data, int a_Size)
|
||||||
{
|
{
|
||||||
if (!m_ServerBuffer.Write(a_Data, a_Size))
|
if (!m_ServerBuffer.Write(a_Data, static_cast<size_t>(a_Size)))
|
||||||
{
|
{
|
||||||
Log("Too much queued data for the client, aborting connection");
|
Log("Too much queued data for the client, aborting connection");
|
||||||
return false;
|
return false;
|
||||||
@ -663,7 +661,7 @@ bool cConnection::DecodeServersPackets(const char * a_Data, int a_Size)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
UInt32 PacketType, PacketReadSoFar;
|
UInt32 PacketType, PacketReadSoFar;
|
||||||
PacketReadSoFar = m_ServerBuffer.GetReadableSpace();
|
PacketReadSoFar = static_cast<UInt32>(m_ServerBuffer.GetReadableSpace());
|
||||||
VERIFY(m_ServerBuffer.ReadVarInt(PacketType));
|
VERIFY(m_ServerBuffer.ReadVarInt(PacketType));
|
||||||
PacketReadSoFar -= m_ServerBuffer.GetReadableSpace();
|
PacketReadSoFar -= m_ServerBuffer.GetReadableSpace();
|
||||||
Log("Decoding server's packets, there are now %d bytes in the queue; next packet is 0x%0x, %u bytes long", m_ServerBuffer.GetReadableSpace(), PacketType, PacketLen);
|
Log("Decoding server's packets, there are now %d bytes in the queue; next packet is 0x%0x, %u bytes long", m_ServerBuffer.GetReadableSpace(), PacketType, PacketLen);
|
||||||
@ -1119,7 +1117,7 @@ bool cConnection::HandleClientPlayerPositionLook(void)
|
|||||||
bool cConnection::HandleClientPluginMessage(void)
|
bool cConnection::HandleClientPluginMessage(void)
|
||||||
{
|
{
|
||||||
HANDLE_CLIENT_PACKET_READ(ReadVarUTF8String, AString, ChannelName);
|
HANDLE_CLIENT_PACKET_READ(ReadVarUTF8String, AString, ChannelName);
|
||||||
HANDLE_CLIENT_PACKET_READ(ReadBEShort, short, Length);
|
HANDLE_CLIENT_PACKET_READ(ReadBEUInt16, UInt16, Length);
|
||||||
AString Data;
|
AString Data;
|
||||||
if (!m_ClientBuffer.ReadString(Data, Length))
|
if (!m_ClientBuffer.ReadString(Data, Length))
|
||||||
{
|
{
|
||||||
@ -1127,7 +1125,7 @@ bool cConnection::HandleClientPluginMessage(void)
|
|||||||
}
|
}
|
||||||
Log("Received a PACKET_PLUGIN_MESSAGE from the client");
|
Log("Received a PACKET_PLUGIN_MESSAGE from the client");
|
||||||
Log(" ChannelName = \"%s\"", ChannelName.c_str());
|
Log(" ChannelName = \"%s\"", ChannelName.c_str());
|
||||||
DataLog(Data.data(), Length, " Data: %d bytes", Length);
|
DataLog(Data.data(), Length, " Data: %u bytes", Length);
|
||||||
COPY_TO_SERVER();
|
COPY_TO_SERVER();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1296,13 +1294,13 @@ bool cConnection::HandleServerLoginEncryptionKeyRequest(void)
|
|||||||
{
|
{
|
||||||
// Read the packet from the server:
|
// Read the packet from the server:
|
||||||
HANDLE_SERVER_PACKET_READ(ReadVarUTF8String, AString, ServerID);
|
HANDLE_SERVER_PACKET_READ(ReadVarUTF8String, AString, ServerID);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, PublicKeyLength);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt16, UInt16, PublicKeyLength);
|
||||||
AString PublicKey;
|
AString PublicKey;
|
||||||
if (!m_ServerBuffer.ReadString(PublicKey, PublicKeyLength))
|
if (!m_ServerBuffer.ReadString(PublicKey, PublicKeyLength))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, NonceLength);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt16, UInt16, NonceLength);
|
||||||
AString Nonce;
|
AString Nonce;
|
||||||
if (!m_ServerBuffer.ReadString(Nonce, NonceLength))
|
if (!m_ServerBuffer.ReadString(Nonce, NonceLength))
|
||||||
{
|
{
|
||||||
@ -1472,12 +1470,12 @@ bool cConnection::HandleServerCompass(void)
|
|||||||
bool cConnection::HandleServerDestroyEntities(void)
|
bool cConnection::HandleServerDestroyEntities(void)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadByte, Byte, NumEntities);
|
HANDLE_SERVER_PACKET_READ(ReadByte, Byte, NumEntities);
|
||||||
if (!m_ServerBuffer.SkipRead((int)NumEntities * 4))
|
if (!m_ServerBuffer.SkipRead(static_cast<size_t>(NumEntities) * 4))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Log("Received PACKET_DESTROY_ENTITIES from the server:");
|
Log("Received PACKET_DESTROY_ENTITIES from the server:");
|
||||||
Log(" NumEntities = %d", NumEntities);
|
Log(" NumEntities = %u", NumEntities);
|
||||||
COPY_TO_CLIENT();
|
COPY_TO_CLIENT();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1698,15 +1696,15 @@ bool cConnection::HandleServerEntityVelocity(void)
|
|||||||
|
|
||||||
bool cConnection::HandleServerExplosion(void)
|
bool cConnection::HandleServerExplosion(void)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEFloat, float, PosX);
|
HANDLE_SERVER_PACKET_READ(ReadBEFloat, float, PosX);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEFloat, float, PosY);
|
HANDLE_SERVER_PACKET_READ(ReadBEFloat, float, PosY);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEFloat, float, PosZ);
|
HANDLE_SERVER_PACKET_READ(ReadBEFloat, float, PosZ);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEFloat, float, Force);
|
HANDLE_SERVER_PACKET_READ(ReadBEFloat, float, Force);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, NumRecords);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt32, UInt32, NumRecords);
|
||||||
std::vector<sCoords> Records;
|
std::vector<sCoords> Records;
|
||||||
Records.reserve(NumRecords);
|
Records.reserve(NumRecords);
|
||||||
int PosXI = (int)PosX, PosYI = (int)PosY, PosZI = (int)PosZ;
|
int PosXI = (int)PosX, PosYI = (int)PosY, PosZI = (int)PosZ;
|
||||||
for (int i = 0; i < NumRecords; i++)
|
for (UInt32 i = 0; i < NumRecords; i++)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadChar, char, rx);
|
HANDLE_SERVER_PACKET_READ(ReadChar, char, rx);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadChar, char, ry);
|
HANDLE_SERVER_PACKET_READ(ReadChar, char, ry);
|
||||||
@ -1719,10 +1717,10 @@ bool cConnection::HandleServerExplosion(void)
|
|||||||
Log("Received a PACKET_EXPLOSION from the server:");
|
Log("Received a PACKET_EXPLOSION from the server:");
|
||||||
Log(" Pos = {%.02f, %.02f, %.02f}", PosX, PosY, PosZ);
|
Log(" Pos = {%.02f, %.02f, %.02f}", PosX, PosY, PosZ);
|
||||||
Log(" Force = %.02f", Force);
|
Log(" Force = %.02f", Force);
|
||||||
Log(" NumRecords = %d", NumRecords);
|
Log(" NumRecords = %u", NumRecords);
|
||||||
for (int i = 0; i < NumRecords; i++)
|
for (UInt32 i = 0; i < NumRecords; i++)
|
||||||
{
|
{
|
||||||
Log(" Records[%d] = {%d, %d, %d}", i, Records[i].x, Records[i].y, Records[i].z);
|
Log(" Records[%u] = {%d, %d, %d}", i, Records[i].x, Records[i].y, Records[i].z);
|
||||||
}
|
}
|
||||||
Log(" Player motion = <%.02f, %.02f, %.02f>", PlayerMotionX, PlayerMotionY, PlayerMotionZ);
|
Log(" Player motion = <%.02f, %.02f, %.02f>", PlayerMotionX, PlayerMotionY, PlayerMotionZ);
|
||||||
COPY_TO_CLIENT();
|
COPY_TO_CLIENT();
|
||||||
@ -1833,8 +1831,8 @@ bool cConnection::HandleServerKick(void)
|
|||||||
Reason.append(Split[5]);
|
Reason.append(Split[5]);
|
||||||
AString ReasonBE16 = UTF8ToRawBEUTF16(Reason.data(), Reason.size());
|
AString ReasonBE16 = UTF8ToRawBEUTF16(Reason.data(), Reason.size());
|
||||||
AString PacketStart("\xff");
|
AString PacketStart("\xff");
|
||||||
PacketStart.push_back((ReasonBE16.size() / 2) / 256);
|
PacketStart.push_back(static_cast<char>((ReasonBE16.size() / 2) / 256));
|
||||||
PacketStart.push_back((ReasonBE16.size() / 2) % 256);
|
PacketStart.push_back(static_cast<char>((ReasonBE16.size() / 2) % 256));
|
||||||
CLIENTSEND(PacketStart.data(), PacketStart.size());
|
CLIENTSEND(PacketStart.data(), PacketStart.size());
|
||||||
CLIENTSEND(ReasonBE16.data(), ReasonBE16.size());
|
CLIENTSEND(ReasonBE16.data(), ReasonBE16.size());
|
||||||
return true;
|
return true;
|
||||||
@ -1858,12 +1856,12 @@ bool cConnection::HandleServerKick(void)
|
|||||||
|
|
||||||
bool cConnection::HandleServerMapChunk(void)
|
bool cConnection::HandleServerMapChunk(void)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, ChunkX);
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, ChunkX);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, ChunkZ);
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, ChunkZ);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadChar, char, IsContiguous);
|
HANDLE_SERVER_PACKET_READ(ReadChar, char, IsContiguous);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, PrimaryBitmap);
|
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, PrimaryBitmap);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, AdditionalBitmap);
|
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, AdditionalBitmap);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, CompressedSize);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt32, UInt32, CompressedSize);
|
||||||
AString CompressedData;
|
AString CompressedData;
|
||||||
if (!m_ServerBuffer.ReadString(CompressedData, CompressedSize))
|
if (!m_ServerBuffer.ReadString(CompressedData, CompressedSize))
|
||||||
{
|
{
|
||||||
@ -1871,7 +1869,7 @@ bool cConnection::HandleServerMapChunk(void)
|
|||||||
}
|
}
|
||||||
Log("Received a PACKET_MAP_CHUNK from the server:");
|
Log("Received a PACKET_MAP_CHUNK from the server:");
|
||||||
Log(" ChunkPos = [%d, %d]", ChunkX, ChunkZ);
|
Log(" ChunkPos = [%d, %d]", ChunkX, ChunkZ);
|
||||||
Log(" Compressed size = %d (0x%x)", CompressedSize, CompressedSize);
|
Log(" Compressed size = %u (0x%x)", CompressedSize, CompressedSize);
|
||||||
|
|
||||||
// TODO: Save the compressed data into a file for later analysis
|
// TODO: Save the compressed data into a file for later analysis
|
||||||
|
|
||||||
@ -1885,9 +1883,9 @@ bool cConnection::HandleServerMapChunk(void)
|
|||||||
|
|
||||||
bool cConnection::HandleServerMapChunkBulk(void)
|
bool cConnection::HandleServerMapChunkBulk(void)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, ChunkCount);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt16, UInt16, ChunkCount);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, CompressedSize);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt32, UInt32, CompressedSize);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBool, bool, IsSkyLightSent);
|
HANDLE_SERVER_PACKET_READ(ReadBool, bool, IsSkyLightSent);
|
||||||
AString CompressedData;
|
AString CompressedData;
|
||||||
if (!m_ServerBuffer.ReadString(CompressedData, CompressedSize))
|
if (!m_ServerBuffer.ReadString(CompressedData, CompressedSize))
|
||||||
{
|
{
|
||||||
@ -1909,8 +1907,8 @@ bool cConnection::HandleServerMapChunkBulk(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Log("Received a PACKET_MAP_CHUNK_BULK from the server:");
|
Log("Received a PACKET_MAP_CHUNK_BULK from the server:");
|
||||||
Log(" ChunkCount = %d", ChunkCount);
|
Log(" ChunkCount = %u", ChunkCount);
|
||||||
Log(" Compressed size = %d (0x%x)", CompressedSize, CompressedSize);
|
Log(" Compressed size = %u (0x%x)", CompressedSize, CompressedSize);
|
||||||
Log(" IsSkyLightSent = %s", IsSkyLightSent ? "true" : "false");
|
Log(" IsSkyLightSent = %s", IsSkyLightSent ? "true" : "false");
|
||||||
|
|
||||||
// Log individual chunk coords:
|
// Log individual chunk coords:
|
||||||
@ -1934,10 +1932,10 @@ bool cConnection::HandleServerMapChunkBulk(void)
|
|||||||
|
|
||||||
bool cConnection::HandleServerMultiBlockChange(void)
|
bool cConnection::HandleServerMultiBlockChange(void)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, ChunkX);
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, ChunkX);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, ChunkZ);
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, ChunkZ);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, NumBlocks);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt16, UInt16, NumBlocks);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, DataSize);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt32, UInt32, DataSize);
|
||||||
AString BlockChangeData;
|
AString BlockChangeData;
|
||||||
if (!m_ServerBuffer.ReadString(BlockChangeData, DataSize))
|
if (!m_ServerBuffer.ReadString(BlockChangeData, DataSize))
|
||||||
{
|
{
|
||||||
@ -1945,7 +1943,7 @@ bool cConnection::HandleServerMultiBlockChange(void)
|
|||||||
}
|
}
|
||||||
Log("Received a PACKET_MULTI_BLOCK_CHANGE packet from the server:");
|
Log("Received a PACKET_MULTI_BLOCK_CHANGE packet from the server:");
|
||||||
Log(" Chunk = [%d, %d]", ChunkX, ChunkZ);
|
Log(" Chunk = [%d, %d]", ChunkX, ChunkZ);
|
||||||
Log(" NumBlocks = %d", NumBlocks);
|
Log(" NumBlocks = %u", NumBlocks);
|
||||||
COPY_TO_CLIENT();
|
COPY_TO_CLIENT();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2046,7 +2044,7 @@ bool cConnection::HandleServerPlayerPositionLook(void)
|
|||||||
bool cConnection::HandleServerPluginMessage(void)
|
bool cConnection::HandleServerPluginMessage(void)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadVarUTF8String, AString, ChannelName);
|
HANDLE_SERVER_PACKET_READ(ReadVarUTF8String, AString, ChannelName);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, Length);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt16, UInt16, Length);
|
||||||
AString Data;
|
AString Data;
|
||||||
if (!m_ServerBuffer.ReadString(Data, Length))
|
if (!m_ServerBuffer.ReadString(Data, Length))
|
||||||
{
|
{
|
||||||
@ -2054,7 +2052,7 @@ bool cConnection::HandleServerPluginMessage(void)
|
|||||||
}
|
}
|
||||||
Log("Received a PACKET_PLUGIN_MESSAGE from the server");
|
Log("Received a PACKET_PLUGIN_MESSAGE from the server");
|
||||||
Log(" ChannelName = \"%s\"", ChannelName.c_str());
|
Log(" ChannelName = \"%s\"", ChannelName.c_str());
|
||||||
DataLog(Data.data(), Length, " Data: %d bytes", Length);
|
DataLog(Data.data(), Length, " Data: %u bytes", Length);
|
||||||
COPY_TO_CLIENT();
|
COPY_TO_CLIENT();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2541,11 +2539,11 @@ bool cConnection::HandleServerUpdateSign(void)
|
|||||||
|
|
||||||
bool cConnection::HandleServerUpdateTileEntity(void)
|
bool cConnection::HandleServerUpdateTileEntity(void)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, BlockX);
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, BlockX);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, BlockY);
|
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, BlockY);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, BlockZ);
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, BlockZ);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadByte, Byte, Action);
|
HANDLE_SERVER_PACKET_READ(ReadByte, Byte, Action);
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, DataLength);
|
HANDLE_SERVER_PACKET_READ(ReadBEUInt16, UInt16, DataLength);
|
||||||
|
|
||||||
AString Data;
|
AString Data;
|
||||||
if ((DataLength > 0) && !m_ServerBuffer.ReadString(Data, DataLength))
|
if ((DataLength > 0) && !m_ServerBuffer.ReadString(Data, DataLength))
|
||||||
@ -2559,7 +2557,7 @@ bool cConnection::HandleServerUpdateTileEntity(void)
|
|||||||
|
|
||||||
// Save metadata to a file:
|
// Save metadata to a file:
|
||||||
AString fnam;
|
AString fnam;
|
||||||
Printf(fnam, "%s_item_%08x.nbt", m_LogNameBase.c_str(), m_ItemIdx++);
|
Printf(fnam, "%s_tile_%08x.nbt", m_LogNameBase.c_str(), m_ItemIdx++);
|
||||||
FILE * f = fopen(fnam.c_str(), "wb");
|
FILE * f = fopen(fnam.c_str(), "wb");
|
||||||
if (f != NULL)
|
if (f != NULL)
|
||||||
{
|
{
|
||||||
@ -2697,10 +2695,10 @@ bool cConnection::ParseSlot(cByteBuffer & a_Buffer, AString & a_ItemDesc)
|
|||||||
}
|
}
|
||||||
char ItemCount;
|
char ItemCount;
|
||||||
short ItemDamage;
|
short ItemDamage;
|
||||||
short MetadataLength;
|
UInt16 MetadataLength;
|
||||||
a_Buffer.ReadChar(ItemCount); // We already know we can read these bytes - we checked before.
|
a_Buffer.ReadChar(ItemCount); // We already know we can read these bytes - we checked before.
|
||||||
a_Buffer.ReadBEShort(ItemDamage);
|
a_Buffer.ReadBEShort(ItemDamage);
|
||||||
a_Buffer.ReadBEShort(MetadataLength);
|
a_Buffer.ReadBEUInt16(MetadataLength);
|
||||||
Printf(a_ItemDesc, "%d:%d * %d", ItemType, ItemDamage, ItemCount);
|
Printf(a_ItemDesc, "%d:%d * %d", ItemType, ItemDamage, ItemCount);
|
||||||
if (MetadataLength <= 0)
|
if (MetadataLength <= 0)
|
||||||
{
|
{
|
||||||
@ -2708,13 +2706,13 @@ bool cConnection::ParseSlot(cByteBuffer & a_Buffer, AString & a_ItemDesc)
|
|||||||
}
|
}
|
||||||
AString Metadata;
|
AString Metadata;
|
||||||
Metadata.resize(MetadataLength);
|
Metadata.resize(MetadataLength);
|
||||||
if (!a_Buffer.ReadBuf((void *)Metadata.data(), MetadataLength))
|
if (!a_Buffer.ReadBuf(const_cast<char *>(Metadata.data()), MetadataLength))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
AString MetaHex;
|
AString MetaHex;
|
||||||
CreateHexDump(MetaHex, Metadata.data(), Metadata.size(), 16);
|
CreateHexDump(MetaHex, Metadata.data(), Metadata.size(), 16);
|
||||||
AppendPrintf(a_ItemDesc, "; %d bytes of meta:\n%s", MetadataLength, MetaHex.c_str());
|
AppendPrintf(a_ItemDesc, "; %u bytes of meta:\n%s", MetadataLength, MetaHex.c_str());
|
||||||
|
|
||||||
// Save metadata to a file:
|
// Save metadata to a file:
|
||||||
AString fnam;
|
AString fnam;
|
||||||
@ -2736,17 +2734,19 @@ bool cConnection::ParseSlot(cByteBuffer & a_Buffer, AString & a_ItemDesc)
|
|||||||
|
|
||||||
bool cConnection::ParseMetadata(cByteBuffer & a_Buffer, AString & a_Metadata)
|
bool cConnection::ParseMetadata(cByteBuffer & a_Buffer, AString & a_Metadata)
|
||||||
{
|
{
|
||||||
char x;
|
Byte x;
|
||||||
if (!a_Buffer.ReadChar(x))
|
if (!a_Buffer.ReadByte(x))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
a_Metadata.push_back(x);
|
a_Metadata.push_back(static_cast<char>(x));
|
||||||
while (x != 0x7f)
|
while (x != 0x7f)
|
||||||
{
|
{
|
||||||
// int Index = ((unsigned)((unsigned char)x)) & 0x1f; // Lower 5 bits = index
|
// int Index = static_cast<unsigned>(x) & 0x1f; // Lower 5 bits = index
|
||||||
int Type = ((unsigned)((unsigned char)x)) >> 5; // Upper 3 bits = type
|
int Type = static_cast<unsigned>(x) >> 5; // Upper 3 bits = type
|
||||||
int Length = 0;
|
|
||||||
|
// Get the length of the data for this item:
|
||||||
|
UInt32 Length = 0;
|
||||||
switch (Type)
|
switch (Type)
|
||||||
{
|
{
|
||||||
case 0: Length = 1; break; // Byte
|
case 0: Length = 1; break; // Byte
|
||||||
@ -2756,12 +2756,12 @@ bool cConnection::ParseMetadata(cByteBuffer & a_Buffer, AString & a_Metadata)
|
|||||||
case 4: // UTF-8 string with VarInt length
|
case 4: // UTF-8 string with VarInt length
|
||||||
{
|
{
|
||||||
UInt32 Len;
|
UInt32 Len;
|
||||||
int rs = a_Buffer.GetReadableSpace();
|
int rs = static_cast<int>(a_Buffer.GetReadableSpace());
|
||||||
if (!a_Buffer.ReadVarInt(Len))
|
if (!a_Buffer.ReadVarInt(Len))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rs = rs - a_Buffer.GetReadableSpace();
|
rs = rs - static_cast<int>(a_Buffer.GetReadableSpace());
|
||||||
cByteBuffer LenBuf(8);
|
cByteBuffer LenBuf(8);
|
||||||
LenBuf.WriteVarInt(Len);
|
LenBuf.WriteVarInt(Len);
|
||||||
AString VarLen;
|
AString VarLen;
|
||||||
@ -2770,18 +2770,18 @@ bool cConnection::ParseMetadata(cByteBuffer & a_Buffer, AString & a_Metadata)
|
|||||||
Length = Len;
|
Length = Len;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 5:
|
case 5: // Item, in "slot" format
|
||||||
{
|
{
|
||||||
int Before = a_Buffer.GetReadableSpace();
|
size_t Before = a_Buffer.GetReadableSpace();
|
||||||
AString ItemDesc;
|
AString ItemDesc;
|
||||||
if (!ParseSlot(a_Buffer, ItemDesc))
|
if (!ParseSlot(a_Buffer, ItemDesc))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
int After = a_Buffer.GetReadableSpace();
|
size_t After = a_Buffer.GetReadableSpace();
|
||||||
a_Buffer.ResetRead();
|
a_Buffer.ResetRead();
|
||||||
a_Buffer.SkipRead(a_Buffer.GetReadableSpace() - Before);
|
a_Buffer.SkipRead(a_Buffer.GetReadableSpace() - Before);
|
||||||
Length = Before - After;
|
Length = static_cast<UInt32>(Before - After);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 6: Length = 12; break; // 3 * int
|
case 6: Length = 12; break; // 3 * int
|
||||||
@ -2792,17 +2792,19 @@ bool cConnection::ParseMetadata(cByteBuffer & a_Buffer, AString & a_Metadata)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} // switch (Type)
|
} // switch (Type)
|
||||||
|
|
||||||
|
// Read the data in this item:
|
||||||
AString data;
|
AString data;
|
||||||
if (!a_Buffer.ReadString(data, Length))
|
if (!a_Buffer.ReadString(data, Length))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
a_Metadata.append(data);
|
a_Metadata.append(data);
|
||||||
if (!a_Buffer.ReadChar(x))
|
if (!a_Buffer.ReadByte(x))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
a_Metadata.push_back(x);
|
a_Metadata.push_back(static_cast<char>(x));
|
||||||
} // while (x != 0x7f)
|
} // while (x != 0x7f)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2814,62 +2816,62 @@ bool cConnection::ParseMetadata(cByteBuffer & a_Buffer, AString & a_Metadata)
|
|||||||
void cConnection::LogMetadata(const AString & a_Metadata, size_t a_IndentCount)
|
void cConnection::LogMetadata(const AString & a_Metadata, size_t a_IndentCount)
|
||||||
{
|
{
|
||||||
AString Indent(a_IndentCount, ' ');
|
AString Indent(a_IndentCount, ' ');
|
||||||
int pos = 0;
|
size_t pos = 0;
|
||||||
while (a_Metadata[pos] != 0x7f)
|
while (a_Metadata[pos] != 0x7f)
|
||||||
{
|
{
|
||||||
int Index = ((unsigned)((unsigned char)a_Metadata[pos])) & 0x1f; // Lower 5 bits = index
|
unsigned Index = static_cast<unsigned>(static_cast<unsigned char>(a_Metadata[pos])) & 0x1f; // Lower 5 bits = index
|
||||||
int Type = ((unsigned)((unsigned char)a_Metadata[pos])) >> 5; // Upper 3 bits = type
|
unsigned Type = static_cast<unsigned>(static_cast<unsigned char>(a_Metadata[pos])) >> 5; // Upper 3 bits = type
|
||||||
// int Length = 0;
|
// int Length = 0;
|
||||||
switch (Type)
|
switch (Type)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
Log("%sbyte[%d] = %d", Indent.c_str(), Index, a_Metadata[pos + 1]);
|
Log("%sbyte[%u] = %d", Indent.c_str(), Index, a_Metadata[pos + 1]);
|
||||||
pos += 1;
|
pos += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
Log("%sshort[%d] = %d", Indent.c_str(), Index, (a_Metadata[pos + 1] << 8) | a_Metadata[pos + 2]);
|
Log("%sshort[%u] = %d", Indent.c_str(), Index, (a_Metadata[pos + 1] << 8) | a_Metadata[pos + 2]);
|
||||||
pos += 2;
|
pos += 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
Log("%sint[%d] = %d", Indent.c_str(), Index, (a_Metadata[pos + 1] << 24) | (a_Metadata[pos + 2] << 16) | (a_Metadata[pos + 3] << 8) | a_Metadata[pos + 4]);
|
Log("%sint[%u] = %d", Indent.c_str(), Index, (a_Metadata[pos + 1] << 24) | (a_Metadata[pos + 2] << 16) | (a_Metadata[pos + 3] << 8) | a_Metadata[pos + 4]);
|
||||||
pos += 4;
|
pos += 4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
Log("%sfloat[%d] = 0x%x", Indent.c_str(), Index, (a_Metadata[pos + 1] << 24) | (a_Metadata[pos + 2] << 16) | (a_Metadata[pos + 3] << 8) | a_Metadata[pos + 4]);
|
Log("%sfloat[%u] = 0x%x", Indent.c_str(), Index, (a_Metadata[pos + 1] << 24) | (a_Metadata[pos + 2] << 16) | (a_Metadata[pos + 3] << 8) | a_Metadata[pos + 4]);
|
||||||
pos += 4;
|
pos += 4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 4: // UTF-8 string with VarInt length
|
case 4: // UTF-8 string with VarInt length
|
||||||
{
|
{
|
||||||
cByteBuffer bb(10);
|
cByteBuffer bb(10);
|
||||||
int RestLen = (int)a_Metadata.size() - pos - 1;
|
size_t RestLen = a_Metadata.size() - pos - 1;
|
||||||
if (RestLen > 8)
|
if (RestLen > 8)
|
||||||
{
|
{
|
||||||
RestLen = 8;
|
RestLen = 8;
|
||||||
}
|
}
|
||||||
bb.Write(a_Metadata.data() + pos + 1, RestLen);
|
bb.Write(a_Metadata.data() + pos + 1, RestLen);
|
||||||
UInt32 Length;
|
UInt32 Length;
|
||||||
int rs = bb.GetReadableSpace();
|
size_t rs = bb.GetReadableSpace();
|
||||||
if (!bb.ReadVarInt(Length))
|
if (!bb.ReadVarInt(Length))
|
||||||
{
|
{
|
||||||
Log("Invalid metadata value, was supposed to be a varint-prefixed string, but cannot read the varint");
|
Log("Invalid metadata value, was supposed to be a varint-prefixed string, but cannot read the varint");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
rs = rs - bb.GetReadableSpace();
|
rs = rs - bb.GetReadableSpace();
|
||||||
Log("%sstring[%d] = \"%*s\"", Indent.c_str(), Index, Length, a_Metadata.c_str() + pos + rs + 1);
|
Log("%sstring[%u] = \"%*s\"", Indent.c_str(), Index, Length, a_Metadata.c_str() + pos + rs + 1);
|
||||||
pos += Length + rs + 2;
|
pos += Length + rs + 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 5:
|
case 5:
|
||||||
{
|
{
|
||||||
int BytesLeft = a_Metadata.size() - pos - 1;
|
size_t BytesLeft = a_Metadata.size() - pos - 1;
|
||||||
cByteBuffer bb(BytesLeft);
|
cByteBuffer bb(BytesLeft);
|
||||||
bb.Write(a_Metadata.data() + pos + 1, BytesLeft);
|
bb.Write(a_Metadata.data() + pos + 1, BytesLeft);
|
||||||
AString ItemDesc;
|
AString ItemDesc;
|
||||||
@ -2878,16 +2880,16 @@ void cConnection::LogMetadata(const AString & a_Metadata, size_t a_IndentCount)
|
|||||||
ASSERT(!"Cannot parse item description from metadata");
|
ASSERT(!"Cannot parse item description from metadata");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// int After = bb.GetReadableSpace();
|
// size_t After = bb.GetReadableSpace();
|
||||||
int BytesConsumed = BytesLeft - bb.GetReadableSpace();
|
size_t BytesConsumed = BytesLeft - bb.GetReadableSpace();
|
||||||
|
|
||||||
Log("%sslot[%d] = %s (%d bytes)", Indent.c_str(), Index, ItemDesc.c_str(), BytesConsumed);
|
Log("%sslot[%u] = %s (%u bytes)", Indent.c_str(), Index, ItemDesc.c_str(), static_cast<unsigned>(BytesConsumed));
|
||||||
pos += BytesConsumed;
|
pos += BytesConsumed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 6:
|
case 6:
|
||||||
{
|
{
|
||||||
Log("%spos[%d] = <%d, %d, %d>", Indent.c_str(), Index,
|
Log("%spos[%u] = <%d, %d, %d>", Indent.c_str(), Index,
|
||||||
(a_Metadata[pos + 1] << 24) | (a_Metadata[pos + 2] << 16) | (a_Metadata[pos + 3] << 8) | a_Metadata[pos + 4],
|
(a_Metadata[pos + 1] << 24) | (a_Metadata[pos + 2] << 16) | (a_Metadata[pos + 3] << 8) | a_Metadata[pos + 4],
|
||||||
(a_Metadata[pos + 5] << 24) | (a_Metadata[pos + 6] << 16) | (a_Metadata[pos + 7] << 8) | a_Metadata[pos + 8],
|
(a_Metadata[pos + 5] << 24) | (a_Metadata[pos + 6] << 16) | (a_Metadata[pos + 7] << 8) | a_Metadata[pos + 8],
|
||||||
(a_Metadata[pos + 9] << 24) | (a_Metadata[pos + 10] << 16) | (a_Metadata[pos + 11] << 8) | a_Metadata[pos + 12]
|
(a_Metadata[pos + 9] << 24) | (a_Metadata[pos + 10] << 16) | (a_Metadata[pos + 11] << 8) | a_Metadata[pos + 12]
|
||||||
@ -2946,7 +2948,7 @@ void cConnection::SendEncryptionKeyResponse(const AString & a_ServerPublicKey, c
|
|||||||
DataLog(EncryptedSecret, sizeof(EncryptedSecret), "Encrypted secret (%u bytes)", (unsigned)sizeof(EncryptedSecret));
|
DataLog(EncryptedSecret, sizeof(EncryptedSecret), "Encrypted secret (%u bytes)", (unsigned)sizeof(EncryptedSecret));
|
||||||
DataLog(EncryptedNonce, sizeof(EncryptedNonce), "Encrypted nonce (%u bytes)", (unsigned)sizeof(EncryptedNonce));
|
DataLog(EncryptedNonce, sizeof(EncryptedNonce), "Encrypted nonce (%u bytes)", (unsigned)sizeof(EncryptedNonce));
|
||||||
cByteBuffer Len(5);
|
cByteBuffer Len(5);
|
||||||
Len.WriteVarInt(ToServer.GetReadableSpace());
|
Len.WriteVarInt(static_cast<UInt32>(ToServer.GetReadableSpace()));
|
||||||
SERVERSEND(Len);
|
SERVERSEND(Len);
|
||||||
SERVERSEND(ToServer);
|
SERVERSEND(ToServer);
|
||||||
m_ServerState = csEncryptedUnderstood;
|
m_ServerState = csEncryptedUnderstood;
|
||||||
|
Loading…
Reference in New Issue
Block a user