1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD can be unreliable, catch PacketError exception.

Also set the packet size at creation not when pushing rawString, no functional change
This commit is contained in:
Loic Blot 2015-04-05 11:37:53 +02:00
parent ed3ebd633d
commit 8804c47e59
2 changed files with 22 additions and 17 deletions

View file

@ -377,7 +377,6 @@ void Client::handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt)
void Client::handleCommand_ActiveObjectMessages(NetworkPacket* pkt)
{
/*
u16 command
for all objects
{
u16 id
@ -391,21 +390,27 @@ void Client::handleCommand_ActiveObjectMessages(NetworkPacket* pkt)
// Throw them in an istringstream
std::istringstream is(datastring, std::ios_base::binary);
while(is.eof() == false) {
is.read(buf, 2);
u16 id = readU16((u8*)buf);
if (is.eof())
break;
is.read(buf, 2);
size_t message_size = readU16((u8*)buf);
std::string message;
message.reserve(message_size);
for (u32 i = 0; i < message_size; i++) {
is.read(buf, 1);
message.append(buf, 1);
try {
while(is.eof() == false) {
is.read(buf, 2);
u16 id = readU16((u8*)buf);
if (is.eof())
break;
is.read(buf, 2);
size_t message_size = readU16((u8*)buf);
std::string message;
message.reserve(message_size);
for (u32 i = 0; i < message_size; i++) {
is.read(buf, 1);
message.append(buf, 1);
}
// Pass on to the environment
m_env.processActiveObjectMessage(id, message);
}
// Pass on to the environment
m_env.processActiveObjectMessage(id, message);
// Packet could be unreliable then ignore it
} catch (PacketError &e) {
infostream << "handleCommand_ActiveObjectMessages: " << e.what()
<< ". The packet is unreliable, ignoring" << std::endl;
}
}