From 5f592df6101e00d27c9f916272bc575cae1ed750 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 20 Jul 2015 15:14:07 -0700 Subject: [PATCH 1/4] don't seek in Packet before open --- libraries/networking/src/NLPacket.cpp | 8 +------- libraries/networking/src/udt/Packet.cpp | 13 ++++++------- libraries/networking/src/udt/Packet.h | 2 +- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/libraries/networking/src/NLPacket.cpp b/libraries/networking/src/NLPacket.cpp index c34e589eff..7a6503dbc3 100644 --- a/libraries/networking/src/NLPacket.cpp +++ b/libraries/networking/src/NLPacket.cpp @@ -64,13 +64,7 @@ std::unique_ptr NLPacket::fromReceivedPacket(std::unique_ptr dat } std::unique_ptr NLPacket::createCopy(const NLPacket& other) { - auto packet = std::unique_ptr(new NLPacket(other)); - - if (other.isOpen()) { - packet->open(other.openMode()); - } - - return packet; + return std::unique_ptr(new NLPacket(other)); } NLPacket::NLPacket(PacketType::Value type, qint64 size) : diff --git a/libraries/networking/src/udt/Packet.cpp b/libraries/networking/src/udt/Packet.cpp index 5be229e129..02a44c4a4f 100644 --- a/libraries/networking/src/udt/Packet.cpp +++ b/libraries/networking/src/udt/Packet.cpp @@ -44,13 +44,7 @@ std::unique_ptr Packet::fromReceivedPacket(std::unique_ptr data, q } std::unique_ptr Packet::createCopy(const Packet& other) { - auto packet = std::unique_ptr(new Packet(other)); - - if (other.isOpen()) { - packet->open(other.openMode()); - } - - return packet; + return std::unique_ptr(new Packet(other)); } qint64 Packet::totalHeadersSize() const { @@ -104,6 +98,11 @@ Packet::Packet(const Packet& other) : QIODevice() { *this = other; + + if (other.isOpen()) { + this->open(other.openMode()); + } + this->seek(other.pos()); } diff --git a/libraries/networking/src/udt/Packet.h b/libraries/networking/src/udt/Packet.h index 33fa8134bc..b4c53b8165 100644 --- a/libraries/networking/src/udt/Packet.h +++ b/libraries/networking/src/udt/Packet.h @@ -81,7 +81,7 @@ public: using QIODevice::read; QByteArray read(qint64 maxSize); - + template qint64 peekPrimitive(T* data); template qint64 readPrimitive(T* data); template qint64 writePrimitive(const T& data); From bca8d8181d635dde82f9215f1c52240313f30148 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 20 Jul 2015 15:14:16 -0700 Subject: [PATCH 2/4] fix entity data packet type value --- libraries/networking/src/udt/PacketHeaders.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index a66c9ea566..9c312bc36a 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -27,7 +27,7 @@ // NOTE: if you want the name of the packet packetType to be available for debugging or logging, update nameForPacketType() as well namespace PacketType { - enum Value { + enum Value { Unknown, StunResponse, DomainList, @@ -62,18 +62,18 @@ namespace PacketType { DomainConnectRequest, DomainServerRequireDTLS, NodeJsonStats, - EntityQuery, - EntityData, - EntityAdd, - EntityErase, - EntityEdit, OctreeDataNack, StopNode, AudioEnvironment, EntityEditNack, ICEServerHeartbeat, ICEPing, - ICEPingReply + ICEPingReply, + EntityData, + EntityQuery, + EntityAdd, + EntityErase, + EntityEdit }; }; From 74193b3dac35f08ee1e6e85178d79b07a3e18d00 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 20 Jul 2015 15:20:14 -0700 Subject: [PATCH 3/4] bump packet versions after fix --- libraries/networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index eb8ca12b69..0591ac30fe 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -69,7 +69,7 @@ PacketVersion versionForPacketType(PacketType::Value packetType) { case EntityData: return VERSION_ENTITIES_NEW_PROTOCOL_LAYER; default: - return 10; + return 11; } } diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 9c312bc36a..3f3f165e87 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -138,6 +138,6 @@ const PacketVersion VERSION_ENTITIES_FACE_CAMERA = 30; const PacketVersion VERSION_ENTITIES_SCRIPT_TIMESTAMP = 31; const PacketVersion VERSION_ENTITIES_SCRIPT_TIMESTAMP_FIX = 32; const PacketVersion VERSION_ENTITIES_HAVE_SIMULATION_OWNER_AND_ACTIONS_OVER_WIRE = 33; -const PacketVersion VERSION_ENTITIES_NEW_PROTOCOL_LAYER = 34; +const PacketVersion VERSION_ENTITIES_NEW_PROTOCOL_LAYER = 35; #endif // hifi_PacketHeaders_h From 9fb8b553596e0a2111d472d10631cd34161af6ed Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 20 Jul 2015 16:10:11 -0700 Subject: [PATCH 4/4] repairs to early return for sendNackPackets --- interface/src/Application.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ce156354fb..1b22f9c26c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2693,7 +2693,7 @@ int Application::sendNackPackets() { // if there are octree packets from this node that are waiting to be processed, // don't send a NACK since the missing packets may be among those waiting packets. if (_octreeProcessor.hasPacketsToProcessFrom(nodeUUID)) { - packetsSent = 0; + return; } _octreeSceneStatsLock.lockForRead(); @@ -2701,16 +2701,16 @@ int Application::sendNackPackets() { // retreive octree scene stats of this node if (_octreeServerSceneStats.find(nodeUUID) == _octreeServerSceneStats.end()) { _octreeSceneStatsLock.unlock(); - packetsSent = 0; + return; } - + // get sequence number stats of node, prune its missing set, and make a copy of the missing set SequenceNumberStats& sequenceNumberStats = _octreeServerSceneStats[nodeUUID].getIncomingOctreeSequenceNumberStats(); sequenceNumberStats.pruneMissingSet(); const QSet missingSequenceNumbers = sequenceNumberStats.getMissingSet(); - + _octreeSceneStatsLock.unlock(); - + // construct nack packet(s) for this node auto it = missingSequenceNumbers.constBegin(); while (it != missingSequenceNumbers.constEnd()) { @@ -2718,10 +2718,10 @@ int Application::sendNackPackets() { nackPacketList.writePrimitive(missingNumber); ++it; } - + if (nackPacketList.getNumPackets()) { packetsSent += nackPacketList.getNumPackets(); - + // send the packet list nodeList->sendPacketList(nackPacketList, *node); }