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
master
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) void Client::handleCommand_ActiveObjectMessages(NetworkPacket* pkt)
{ {
/* /*
u16 command
for all objects for all objects
{ {
u16 id u16 id
@ -391,6 +390,7 @@ void Client::handleCommand_ActiveObjectMessages(NetworkPacket* pkt)
// Throw them in an istringstream // Throw them in an istringstream
std::istringstream is(datastring, std::ios_base::binary); std::istringstream is(datastring, std::ios_base::binary);
try {
while(is.eof() == false) { while(is.eof() == false) {
is.read(buf, 2); is.read(buf, 2);
u16 id = readU16((u8*)buf); u16 id = readU16((u8*)buf);
@ -407,6 +407,11 @@ void Client::handleCommand_ActiveObjectMessages(NetworkPacket* pkt)
// Pass on to the environment // Pass on to the environment
m_env.processActiveObjectMessage(id, message); 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;
}
} }
void Client::handleCommand_Movement(NetworkPacket* pkt) void Client::handleCommand_Movement(NetworkPacket* pkt)

View File

@ -1897,7 +1897,7 @@ void Server::SendPlayerInventoryFormspec(u16 peer_id)
u32 Server::SendActiveObjectRemoveAdd(u16 peer_id, const std::string &datas) u32 Server::SendActiveObjectRemoveAdd(u16 peer_id, const std::string &datas)
{ {
NetworkPacket pkt(TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD, 0, peer_id); NetworkPacket pkt(TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD, datas.size(), peer_id);
pkt.putRawString(datas.c_str(), datas.size()); pkt.putRawString(datas.c_str(), datas.size());
Send(&pkt); Send(&pkt);
return pkt.getSize(); return pkt.getSize();
@ -1906,7 +1906,7 @@ u32 Server::SendActiveObjectRemoveAdd(u16 peer_id, const std::string &datas)
void Server::SendActiveObjectMessages(u16 peer_id, const std::string &datas, bool reliable) void Server::SendActiveObjectMessages(u16 peer_id, const std::string &datas, bool reliable)
{ {
NetworkPacket pkt(TOCLIENT_ACTIVE_OBJECT_MESSAGES, NetworkPacket pkt(TOCLIENT_ACTIVE_OBJECT_MESSAGES,
0, peer_id); datas.size(), peer_id);
pkt.putRawString(datas.c_str(), datas.size()); pkt.putRawString(datas.c_str(), datas.size());