From a481c573153ace2abb995e2c359d81cd22eabe15 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 5 May 2015 12:44:47 -0700 Subject: [PATCH] fix for writeDatagram with hash and sequence number --- libraries/networking/src/LimitedNodeList.cpp | 13 +++++++++---- libraries/networking/src/NodeList.cpp | 4 ++-- libraries/networking/src/PacketHeaders.cpp | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 0237121209..61b98ffa44 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -278,7 +278,7 @@ qint64 LimitedNodeList::writeDatagram(const QByteArray& datagram, } emit dataSent(destinationNode->getType(), datagram.size()); - auto bytesWritten = writeDatagram(datagram, *destinationSockAddr, destinationNode->getConnectionSecret()); + auto bytesWritten = writeDatagram(datagramCopy, *destinationSockAddr, destinationNode->getConnectionSecret()); // Keep track of per-destination-node bandwidth destinationNode->recordBytesSent(bytesWritten); return bytesWritten; @@ -482,8 +482,11 @@ unsigned LimitedNodeList::broadcastToNodes(const QByteArray& packet, const NodeS } QByteArray LimitedNodeList::constructPingPacket(PingType_t pingType, bool isVerified, const QUuid& packetHeaderID) { + + QUuid packetUUID = packetHeaderID.isNull() ? _sessionUUID : packetHeaderID; + QByteArray pingPacket = byteArrayWithUUIDPopulatedHeader(isVerified ? PacketTypePing : PacketTypeUnverifiedPing, - packetHeaderID); + packetUUID); QDataStream packetStream(&pingPacket, QIODevice::Append); @@ -505,8 +508,10 @@ QByteArray LimitedNodeList::constructPingReplyPacket(const QByteArray& pingPacke PacketType replyType = (packetTypeForPacket(pingPacket) == PacketTypePing) ? PacketTypePingReply : PacketTypeUnverifiedPingReply; - - QByteArray replyPacket = byteArrayWithUUIDPopulatedHeader(replyType, packetHeaderID); + + QUuid packetUUID = packetHeaderID.isNull() ? _sessionUUID : packetHeaderID; + + QByteArray replyPacket = byteArrayWithUUIDPopulatedHeader(replyType, packetUUID); QDataStream packetStream(&replyPacket, QIODevice::Append); packetStream << typeFromOriginalPing << timeFromOriginalPing << usecTimestampNow(); diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 98cb0b1568..179f054e42 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -183,7 +183,7 @@ void NodeList::processNodeData(const HifiSockAddr& senderSockAddr, const QByteAr } case PacketTypePingReply: { SharedNodePointer sendingNode = sendingNodeForPacket(packet); - + if (sendingNode) { sendingNode->setLastHeardMicrostamp(usecTimestampNow()); @@ -497,7 +497,7 @@ void NodeList::pingPunchForInactiveNode(const SharedNodePointer& node) { QByteArray publicPingPacket = constructPingPacket(PingType::Public); writeDatagram(publicPingPacket, node, node->getPublicSocket()); - + if (!node->getSymmetricSocket().isNull()) { QByteArray symmetricPingPacket = constructPingPacket(PingType::Symmetric); writeDatagram(symmetricPingPacket, node, node->getSymmetricSocket()); diff --git a/libraries/networking/src/PacketHeaders.cpp b/libraries/networking/src/PacketHeaders.cpp index 8e3f47a47e..b4fabc6340 100644 --- a/libraries/networking/src/PacketHeaders.cpp +++ b/libraries/networking/src/PacketHeaders.cpp @@ -167,7 +167,7 @@ int populatePacketHeaderWithUUID(char* packet, PacketType packetType, const QUui position += NUM_BYTES_MD5_HASH; } - if (!SEQUENCE_NUMBERED_PACKETS.contains(packetType)) { + if (SEQUENCE_NUMBERED_PACKETS.contains(packetType)) { // Pack zeros for the number of bytes that the sequence number requires. // The LimitedNodeList will handle packing in the sequence number when sending out the packet. memset(position, 0, sizeof(PacketSequenceNumber));