From a5ca1f7125d6c469ca720ddca85acc13d4674b1a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 14 Jul 2015 19:15:18 -0700 Subject: [PATCH] fix variable setup in Packet constructor --- domain-server/src/DomainServer.cpp | 6 +++++- libraries/networking/src/NodeList.cpp | 3 +-- libraries/networking/src/udt/Packet.cpp | 12 +++++++----- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index f3638370b3..b493684f45 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -288,7 +288,6 @@ void DomainServer::setupNodeListAndAssignments(const QUuid& sessionUUID) { packetReceiver.registerListener(PacketType::NodeJsonStats, this, "processNodeJSONStatsPacket"); packetReceiver.registerListener(PacketType::ICEPing, this, "processICEPingPacket"); packetReceiver.registerListener(PacketType::ICEPingReply, this, "processICEPingReplyPacket"); - packetReceiver.registerListener(PacketType::ICEServerPeerInformation, this, "processICEPeerInformationPacket"); // add whatever static assignments that have been parsed to the queue addStaticAssignmentsToQueue(); @@ -580,6 +579,11 @@ void DomainServer::processConnectRequestPacket(QSharedPointer packet) NodeType_t nodeType; HifiSockAddr publicSockAddr, localSockAddr; + if (packet->getSizeUsed() == 0) { + // TODO: We know what size the connect packet should be (minimally) - check for that here + return; + } + QDataStream packetStream(packet.data()); QUuid connectUUID; diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 2e6763dc3a..89013ece60 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -512,7 +512,7 @@ void NodeList::parseNodeFromPacketStream(QDataStream& packetStream) { } void NodeList::sendAssignment(Assignment& assignment) { - + PacketType::Value assignmentPacketType = assignment.getCommand() == Assignment::CreateCommand ? PacketType::CreateAssignment : PacketType::RequestAssignment; @@ -520,7 +520,6 @@ void NodeList::sendAssignment(Assignment& assignment) { auto assignmentPacket = NLPacket::create(assignmentPacketType); QDataStream packetStream(assignmentPacket.get()); - packetStream << assignment; // TODO: should this be a non sourced packet? diff --git a/libraries/networking/src/udt/Packet.cpp b/libraries/networking/src/udt/Packet.cpp index f96de7a20b..9645c5afcc 100644 --- a/libraries/networking/src/udt/Packet.cpp +++ b/libraries/networking/src/udt/Packet.cpp @@ -61,17 +61,18 @@ qint64 Packet::localHeaderSize() const { Packet::Packet(PacketType::Value type, qint64 size) : _type(type), - _version(0), - _packetSize(localHeaderSize(_type) + size), - _packet(new char(_packetSize)), - _payloadStart(_packet.get() + localHeaderSize(_type)), - _capacity(size) + _version(0) { auto maxPayload = maxPayloadSize(type); if (size == -1) { // default size of -1, means biggest packet possible size = maxPayload; } + + _packetSize = localHeaderSize(type) + size; + _packet.reset(new char(_packetSize)); + _capacity = size; + _payloadStart = _packet.get() + (_packetSize - _capacity); // Sanity check Q_ASSERT(size >= 0 || size < maxPayload); @@ -191,6 +192,7 @@ void Packet::writeSequenceNumber(SequenceNumber seqNum) { static const qint64 PACKET_WRITE_ERROR = -1; qint64 Packet::writeData(const char* data, qint64 maxSize) { + // make sure we have the space required to write this block if (maxSize <= bytesAvailableForWrite()) { qint64 currentPos = pos();