mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-04-10 10:34:56 +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["asset_ping"] = assetServerNode ? assetServerNode->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();
|
||||
|
||||
|
|
|
@ -330,19 +330,25 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer<ReceivedMessage>
|
|||
void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode) {
|
||||
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);
|
||||
traitsAckPacket->writePrimitive(seq);
|
||||
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
||||
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
||||
if (!avatarMixer.isNull()) {
|
||||
// we have a mixer to send to, acknowledge that we received these
|
||||
// traits.
|
||||
nodeList->sendPacket(std::move(traitsAckPacket), *avatarMixer);
|
||||
auto traitsAckPacket = NLPacket::create(PacketType::BulkAvatarTraitsAck, sizeof(AvatarTraits::TraitMessageSequence), true);
|
||||
traitsAckPacket->writePrimitive(seq);
|
||||
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
||||
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
||||
if (!avatarMixer.isNull()) {
|
||||
// we have a mixer to send to, acknowledge that we received these
|
||||
// traits.
|
||||
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
|
||||
auto avatarID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
|
||||
|
||||
|
@ -407,6 +413,9 @@ void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> mess
|
|||
message->readPrimitive(&traitType);
|
||||
}
|
||||
}
|
||||
if (message->getBytesLeftToRead() > 0) {
|
||||
qWarning() << "Leftover bytes in BulkAvatarTraits message";
|
||||
}
|
||||
}
|
||||
|
||||
void AvatarHashMap::processKillAvatar(QSharedPointer<ReceivedMessage> message, SharedNodePointer sendingNode) {
|
||||
|
|
|
@ -97,6 +97,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
|
|||
case PacketType::EntityQueryInitialResultsComplete:
|
||||
return static_cast<PacketVersion>(EntityVersion::ParticleSpin);
|
||||
case PacketType::BulkAvatarTraitsAck:
|
||||
case PacketType::BulkAvatarTraits:
|
||||
return static_cast<PacketVersion>(AvatarMixerPacketVersion::AvatarTraitsAck);
|
||||
default:
|
||||
return 22;
|
||||
|
|
Loading…
Reference in a new issue