From c989a64e90d0ade8e2a5d2e3cf0e22a438ea0255 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 31 Jan 2014 09:54:52 -0800 Subject: [PATCH] repair ping packet parsing in creation of reply --- libraries/shared/src/NodeList.cpp | 13 +++++++++---- libraries/shared/src/PacketHeaders.cpp | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index c5ad709fa4..8776337f6b 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -119,13 +119,15 @@ void NodeList::timePingReply(const QByteArray& packet) { if (matchingNode) { QDataStream packetStream(packet); - packetStream.device()->seek(numBytesForPacketHeader(packet)); + packetStream.skipRawData(numBytesForPacketHeader(packet)); - qint64 ourOriginalTime, othersReplyTime; + quint64 ourOriginalTime, othersReplyTime; packetStream >> ourOriginalTime >> othersReplyTime; - qint64 now = usecTimestampNow(); + qDebug() << "OT:" << ourOriginalTime << "OR:" << othersReplyTime; + + quint64 now = usecTimestampNow(); int pingTime = now - ourOriginalTime; int oneWayFlightTime = pingTime / 2; // half of the ping is our one way flight @@ -554,8 +556,11 @@ QByteArray NodeList::constructPingPacket() { } QByteArray NodeList::constructPingReplyPacket(const QByteArray& pingPacket) { + QDataStream pingPacketStream(pingPacket); + pingPacketStream.skipRawData(numBytesForPacketHeader(pingPacket)); + quint64 timeFromOriginalPing; - memcpy(&timeFromOriginalPing, pingPacket.data() + numBytesForPacketHeader(pingPacket), sizeof(timeFromOriginalPing)); + pingPacketStream >> timeFromOriginalPing; QByteArray replyPacket = byteArrayWithPopluatedHeader(PacketTypePingReply); QDataStream packetStream(&replyPacket, QIODevice::Append); diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp index 5d2dd52a2f..3fd51949f9 100644 --- a/libraries/shared/src/PacketHeaders.cpp +++ b/libraries/shared/src/PacketHeaders.cpp @@ -80,7 +80,7 @@ bool packetVersionMatch(const QByteArray& packet) { // currently this just checks if the version in the packet matches our return from versionForPacketType // may need to be expanded in the future for types and versions that take > than 1 byte - if (packet[1] == versionForPacketType(packetTypeForPacket(packet)) || packet[0] == PacketTypeStunResponse) { + if (packet[1] == versionForPacketType(packetTypeForPacket(packet)) || packetTypeForPacket(packet) == PacketTypeStunResponse) { return true; } else { PacketType mismatchType = packetTypeForPacket(packet);