mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 18:42:58 +02:00
Bump protocol version for BulkAvatarTraits and add some guard code
around packet parsing.
This commit is contained in:
parent
4f9cce1ea9
commit
6d791a80c2
3 changed files with 21 additions and 11 deletions
|
@ -2057,7 +2057,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
properties["avatar_ping"] = avatarMixerNode ? avatarMixerNode->getPingMs() : -1;
|
properties["avatar_ping"] = avatarMixerNode ? avatarMixerNode->getPingMs() : -1;
|
||||||
properties["asset_ping"] = assetServerNode ? assetServerNode->getPingMs() : -1;
|
properties["asset_ping"] = assetServerNode ? assetServerNode->getPingMs() : -1;
|
||||||
properties["messages_ping"] = messagesMixerNode ? messagesMixerNode->getPingMs() : -1;
|
properties["messages_ping"] = messagesMixerNode ? messagesMixerNode->getPingMs() : -1;
|
||||||
properties["atp_in_kbps"] = messagesMixerNode ? assetServerNode->getInboundKbps() : 0.0f;
|
properties["atp_in_kbps"] = assetServerNode ? assetServerNode->getInboundKbps() : 0.0f;
|
||||||
|
|
||||||
auto loadingRequests = ResourceCache::getLoadingRequests();
|
auto loadingRequests = ResourceCache::getLoadingRequests();
|
||||||
|
|
||||||
|
|
|
@ -330,19 +330,25 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer<ReceivedMessage>
|
||||||
void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode) {
|
void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode) {
|
||||||
AvatarTraits::TraitMessageSequence seq;
|
AvatarTraits::TraitMessageSequence seq;
|
||||||
|
|
||||||
message->readPrimitive(&seq);
|
if (message->getBytesLeftToRead() > sizeof(AvatarTraits::TraitMessageSequence)) {
|
||||||
|
message->readPrimitive(&seq);
|
||||||
|
|
||||||
auto traitsAckPacket = NLPacket::create(PacketType::BulkAvatarTraitsAck, sizeof(AvatarTraits::TraitMessageSequence), true);
|
auto traitsAckPacket = NLPacket::create(PacketType::BulkAvatarTraitsAck, sizeof(AvatarTraits::TraitMessageSequence), true);
|
||||||
traitsAckPacket->writePrimitive(seq);
|
traitsAckPacket->writePrimitive(seq);
|
||||||
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
||||||
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
||||||
if (!avatarMixer.isNull()) {
|
if (!avatarMixer.isNull()) {
|
||||||
// we have a mixer to send to, acknowledge that we received these
|
// we have a mixer to send to, acknowledge that we received these
|
||||||
// traits.
|
// traits.
|
||||||
nodeList->sendPacket(std::move(traitsAckPacket), *avatarMixer);
|
nodeList->sendPacket(std::move(traitsAckPacket), *avatarMixer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qWarning() << "No BulkAvatarTraits packet sequence number.";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (message->getBytesLeftToRead()) {
|
while (message->getBytesLeftToRead() >= NUM_BYTES_RFC4122_UUID + sizeof(AvatarTraits::TraitType)) {
|
||||||
// read the avatar ID to figure out which avatar this is for
|
// read the avatar ID to figure out which avatar this is for
|
||||||
auto avatarID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
|
auto avatarID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
|
||||||
|
|
||||||
|
@ -407,6 +413,9 @@ void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> mess
|
||||||
message->readPrimitive(&traitType);
|
message->readPrimitive(&traitType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (message->getBytesLeftToRead() > 0) {
|
||||||
|
qWarning() << "Leftover bytes in BulkAvatarTraits message";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarHashMap::processKillAvatar(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode) {
|
void AvatarHashMap::processKillAvatar(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode) {
|
||||||
|
|
|
@ -97,6 +97,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
|
||||||
case PacketType::EntityQueryInitialResultsComplete:
|
case PacketType::EntityQueryInitialResultsComplete:
|
||||||
return static_cast<PacketVersion>(EntityVersion::ParticleSpin);
|
return static_cast<PacketVersion>(EntityVersion::ParticleSpin);
|
||||||
case PacketType::BulkAvatarTraitsAck:
|
case PacketType::BulkAvatarTraitsAck:
|
||||||
|
case PacketType::BulkAvatarTraits:
|
||||||
return static_cast<PacketVersion>(AvatarMixerPacketVersion::AvatarTraitsAck);
|
return static_cast<PacketVersion>(AvatarMixerPacketVersion::AvatarTraitsAck);
|
||||||
default:
|
default:
|
||||||
return 22;
|
return 22;
|
||||||
|
|
Loading…
Reference in a new issue