Create PacketError exception and use it with ACTIVEOBJECT_REMOVE_ADD handler which can be unreliable
parent
92f20696eb
commit
aa340fd857
|
@ -70,6 +70,11 @@ public:
|
|||
SerializationError(const std::string &s): BaseException(s) {}
|
||||
};
|
||||
|
||||
class PacketError : public BaseException {
|
||||
public:
|
||||
PacketError(const std::string &s): BaseException(s) {}
|
||||
};
|
||||
|
||||
class LoadError : public BaseException {
|
||||
public:
|
||||
LoadError(const std::string &s): BaseException(s) {}
|
||||
|
|
|
@ -336,7 +336,6 @@ void Client::handleCommand_ChatMessage(NetworkPacket* pkt)
|
|||
void Client::handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt)
|
||||
{
|
||||
/*
|
||||
u16 command
|
||||
u16 count of removed objects
|
||||
for all removed objects {
|
||||
u16 id
|
||||
|
@ -350,10 +349,11 @@ void Client::handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt)
|
|||
}
|
||||
*/
|
||||
|
||||
// Read removed objects
|
||||
try {
|
||||
u8 type;
|
||||
u16 removed_count, added_count, id;
|
||||
|
||||
// Read removed objects
|
||||
*pkt >> removed_count;
|
||||
|
||||
for (u16 i = 0; i < removed_count; i++) {
|
||||
|
@ -368,6 +368,10 @@ void Client::handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt)
|
|||
*pkt >> id >> type;
|
||||
m_env.addActiveObject(id, type, pkt->readLongString());
|
||||
}
|
||||
} catch (PacketError &e) {
|
||||
infostream << "handleCommand_ActiveObjectRemoveAdd: " << e.what()
|
||||
<< ". The packet is unreliable, ignoring" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void Client::handleCommand_ActiveObjectMessages(NetworkPacket* pkt)
|
||||
|
|
|
@ -45,7 +45,7 @@ void NetworkPacket::checkReadOffset(u32 from_offset)
|
|||
std::stringstream ss;
|
||||
ss << "Reading outside packet (offset: " <<
|
||||
from_offset << ", packet size: " << getSize() << ")";
|
||||
throw SerializationError(ss.str());
|
||||
throw PacketError(ss.str());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue