From 2c7112e9a828f81a9d36936d4027da4c025b09fc Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 17 Feb 2016 10:53:23 -0800 Subject: [PATCH 01/11] add initial send sequence number to SendQueue --- libraries/networking/src/udt/Connection.cpp | 6 +----- libraries/networking/src/udt/Connection.h | 6 +++--- libraries/networking/src/udt/SendQueue.cpp | 24 +++++++++++++++------ libraries/networking/src/udt/SendQueue.h | 7 +++--- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index 3b5b26d05d..f733d58869 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -87,7 +87,7 @@ SendQueue& Connection::getSendQueue() { // receiver is getting the sequence numbers it expects (given that the connection must still be active) // Lasily create send queue - _sendQueue = SendQueue::create(_parentSocket, _destination, _inactiveSendQueueSequenceNumber); + _sendQueue = SendQueue::create(_parentSocket, _destination); #ifdef UDT_CONNECTION_DEBUG qCDebug(networking) << "Created SendQueue for connection to" << _destination; @@ -109,10 +109,6 @@ SendQueue& Connection::getSendQueue() { } void Connection::queueInactive() { - // get the current sequence number from the send queue, this is to be re-used if the send - // queue is re-activated for this connection - _inactiveSendQueueSequenceNumber = _sendQueue->getCurrentSequenceNumber(); - // tell our current send queue to go down and reset our ptr to it to null stopSendQueue(); diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index b58b7ec570..bf56a468aa 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -130,7 +130,9 @@ private: bool _isReceivingData { false }; // flag used for expiry of receipt portion of connection bool _isActive { true }; // flag used for inactivity of connection - + + SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer SendQueue on creation, identifies connection during re-connect requests + LossList _lossList; // List of all missing packets SequenceNumber _lastReceivedSequenceNumber; // The largest sequence number received from the peer SequenceNumber _lastReceivedACK; // The last ACK received @@ -140,8 +142,6 @@ private: SequenceNumber _lastSentACK; // The last sent ACK SequenceNumber _lastSentACK2; // The last sent ACK sub-sequence number in an ACK2 - SequenceNumber _inactiveSendQueueSequenceNumber { 0 }; - int _acksDuringSYN { 1 }; // The number of non-SYN ACKs sent during SYN int _lightACKsDuringSYN { 1 }; // The number of lite ACKs sent during SYN interval diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 18269d1d43..8a8105bb26 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -12,6 +12,7 @@ #include "SendQueue.h" #include +#include #include #include @@ -53,10 +54,10 @@ private: Mutex2& _mutex2; }; -std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination, SequenceNumber currentSequenceNumber) { +std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destination) { Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*"); - auto queue = std::unique_ptr(new SendQueue(socket, destination, currentSequenceNumber)); + auto queue = std::unique_ptr(new SendQueue(socket, destination)); // Setup queue private thread QThread* thread = new QThread; @@ -75,12 +76,23 @@ std::unique_ptr SendQueue::create(Socket* socket, HifiSockAddr destin return queue; } -SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber) : +SendQueue::SendQueue(Socket* socket, HifiSockAddr dest) : _socket(socket), - _destination(dest), - _currentSequenceNumber(currentSequenceNumber) + _destination(dest) { - + + // setup psuedo-random number generation for all instances of SendQueue + static std::random_device rd; + static std::mt19937 generator(rd()); + static std::uniform_int_distribution<> distribution(0, SequenceNumber::MAX); + + // randomize the intial sequence number + _initialSequenceNumber = SequenceNumber(distribution(generator)); + + // set our member variables from randomized initial number + _currentSequenceNumber = _initialSequenceNumber - 1; + _atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber); + _lastACKSequenceNumber = uint32_t(_initialSequenceNumber); } void SendQueue::queuePacket(std::unique_ptr packet) { diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index da8f5e6c3f..29ad7c6d73 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -50,8 +50,7 @@ public: Stopped }; - static std::unique_ptr create(Socket* socket, HifiSockAddr destination, - SequenceNumber currentSequenceNumber = SequenceNumber()); + static std::unique_ptr create(Socket* socket, HifiSockAddr destination); void queuePacket(std::unique_ptr packet); void queuePacketList(std::unique_ptr packetList); @@ -84,7 +83,7 @@ private slots: void run(); private: - SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber); + SendQueue(Socket* socket, HifiSockAddr dest); SendQueue(SendQueue& other) = delete; SendQueue(SendQueue&& other) = delete; @@ -106,6 +105,8 @@ private: Socket* _socket { nullptr }; // Socket to send packet on HifiSockAddr _destination; // Destination addr + + SequenceNumber _initialSequenceNumber; // Randomized on SendQueue creation, identifies connection during re-connect requests std::atomic _lastACKSequenceNumber { 0 }; // Last ACKed sequence number From 39d9e64ee59d7fdd30fb3c09ad009d80cfe76fde Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 16 Feb 2016 11:43:06 -0800 Subject: [PATCH 02/11] process a handshake if the connection has ever received data --- libraries/networking/src/udt/Connection.cpp | 6 +++--- libraries/networking/src/udt/Connection.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index f733d58869..0e1f3ddefb 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -411,7 +411,7 @@ bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, in return false; } - _isReceivingData = true; + _isReceivingData = _hasReceivedData = true; // mark our last receive time as now (to push the potential expiry farther) _lastReceiveTime = p_high_resolution_clock::now(); @@ -725,7 +725,7 @@ void Connection::processNAK(std::unique_ptr controlPacket) { void Connection::processHandshake(std::unique_ptr controlPacket) { - if (!_hasReceivedHandshake || _isReceivingData) { + if (!_hasReceivedHandshake || _hasReceivedData) { // server sent us a handshake - we need to assume this means state should be reset // as long as we haven't received a handshake yet or we have and we've received some data resetReceiveState(); @@ -799,7 +799,7 @@ void Connection::resetReceiveState() { // the _nakInterval need not be reset, that will happen on loss // clear sync variables - _isReceivingData = false; + _isReceivingData = _hasReceivedData = false; _connectionStart = p_high_resolution_clock::now(); _acksDuringSYN = 1; diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index bf56a468aa..2f2252a139 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -129,6 +129,7 @@ private: p_high_resolution_clock::time_point _lastReceiveTime; // holds the last time we received anything from sender bool _isReceivingData { false }; // flag used for expiry of receipt portion of connection + bool _hasReceivedData { false }; // flag used for reset of connection state on second handshake bool _isActive { true }; // flag used for inactivity of connection SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer SendQueue on creation, identifies connection during re-connect requests From a0203cf9d58426dfd5a47123ed175cca9a887013 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 26 Feb 2016 11:13:10 -0800 Subject: [PATCH 03/11] Update BasePacket to 0-initialize data --- libraries/networking/src/udt/BasePacket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/udt/BasePacket.cpp b/libraries/networking/src/udt/BasePacket.cpp index 54342d9cba..000573d241 100644 --- a/libraries/networking/src/udt/BasePacket.cpp +++ b/libraries/networking/src/udt/BasePacket.cpp @@ -58,7 +58,7 @@ BasePacket::BasePacket(qint64 size) { Q_ASSERT(size >= 0 || size < maxPayload); _packetSize = size; - _packet.reset(new char[_packetSize]); + _packet.reset(new char[_packetSize]()); _payloadCapacity = _packetSize; _payloadSize = 0; _payloadStart = _packet.get(); From a7bb47fbccbd764847ec4fb12a70ce1d2fe6cf02 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 26 Feb 2016 11:20:31 -0800 Subject: [PATCH 04/11] Fix initialization of variables for SendQueue and Connection --- libraries/networking/src/udt/Connection.cpp | 7 +++++++ libraries/networking/src/udt/SendQueue.cpp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index 0e1f3ddefb..1ab8441ba3 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -88,6 +88,7 @@ SendQueue& Connection::getSendQueue() { // Lasily create send queue _sendQueue = SendQueue::create(_parentSocket, _destination); + _lastReceivedACK = _sendQueue->getCurrentSequenceNumber(); #ifdef UDT_CONNECTION_DEBUG qCDebug(networking) << "Created SendQueue for connection to" << _destination; @@ -410,6 +411,12 @@ bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, in // refuse to process any packets until we've received the handshake return false; } + + if (!_hasReceivedData) { + _initialReceiveSequenceNumber = sequenceNumber; + _lastReceivedSequenceNumber = sequenceNumber - 1; + _lastSentACK = sequenceNumber - 1; + } _isReceivingData = _hasReceivedData = true; diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 8a8105bb26..77b0c53da7 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -92,7 +92,7 @@ SendQueue::SendQueue(Socket* socket, HifiSockAddr dest) : // set our member variables from randomized initial number _currentSequenceNumber = _initialSequenceNumber - 1; _atomicCurrentSequenceNumber = uint32_t(_currentSequenceNumber); - _lastACKSequenceNumber = uint32_t(_initialSequenceNumber); + _lastACKSequenceNumber = uint32_t(_currentSequenceNumber) - 1; } void SendQueue::queuePacket(std::unique_ptr packet) { From b442075205800eb730bd7b14a3a7e02607cbbbd0 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 29 Feb 2016 14:22:08 -0800 Subject: [PATCH 05/11] Add initial seq number to handshake --- libraries/networking/src/udt/Connection.cpp | 14 ++++++++++--- libraries/networking/src/udt/SendQueue.cpp | 22 +++++++++++++-------- libraries/networking/src/udt/SendQueue.h | 2 +- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index 1ab8441ba3..cb197f15c7 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -731,15 +731,20 @@ void Connection::processNAK(std::unique_ptr controlPacket) { } void Connection::processHandshake(std::unique_ptr controlPacket) { + SequenceNumber initialSequenceNumber; + controlPacket->readPrimitive(&initialSequenceNumber); - if (!_hasReceivedHandshake || _hasReceivedData) { + if (!_hasReceivedHandshake || initialSequenceNumber != _initialReceiveSequenceNumber) { // server sent us a handshake - we need to assume this means state should be reset // as long as we haven't received a handshake yet or we have and we've received some data resetReceiveState(); + _initialReceiveSequenceNumber = initialSequenceNumber; } // immediately respond with a handshake ACK - static auto handshakeACK = ControlPacket::create(ControlPacket::HandshakeACK, 0); + static auto handshakeACK = ControlPacket::create(ControlPacket::HandshakeACK, sizeof(SequenceNumber)); + handshakeACK->seek(0); + handshakeACK->writePrimitive(initialSequenceNumber); _parentSocket->writeBasePacket(*handshakeACK, _destination); // indicate that handshake has been received @@ -749,8 +754,11 @@ void Connection::processHandshake(std::unique_ptr controlPacket) void Connection::processHandshakeACK(std::unique_ptr controlPacket) { // if we've decided to clean up the send queue then this handshake ACK should be ignored, it's useless if (_sendQueue) { + SequenceNumber initialSequenceNumber; + controlPacket->readPrimitive(&initialSequenceNumber); + // hand off this handshake ACK to the send queue so it knows it can start sending - getSendQueue().handshakeACK(); + getSendQueue().handshakeACK(initialSequenceNumber); // indicate that handshake ACK was received _hasReceivedHandshakeACK = true; diff --git a/libraries/networking/src/udt/SendQueue.cpp b/libraries/networking/src/udt/SendQueue.cpp index 77b0c53da7..5c6db5adf3 100644 --- a/libraries/networking/src/udt/SendQueue.cpp +++ b/libraries/networking/src/udt/SendQueue.cpp @@ -202,7 +202,11 @@ void SendQueue::sendHandshake() { std::unique_lock handshakeLock { _handshakeMutex }; if (!_hasReceivedHandshakeACK) { // we haven't received a handshake ACK from the client, send another now - static const auto handshakePacket = ControlPacket::create(ControlPacket::Handshake, 0); + static const auto handshakePacket = ControlPacket::create(ControlPacket::Handshake, sizeof(SequenceNumber)); + + handshakePacket->seek(0); + + handshakePacket->writePrimitive(_initialSequenceNumber); _socket->writeBasePacket(*handshakePacket, _destination); // we wait for the ACK or the re-send interval to expire @@ -211,14 +215,16 @@ void SendQueue::sendHandshake() { } } -void SendQueue::handshakeACK() { - { - std::lock_guard locker { _handshakeMutex }; - _hasReceivedHandshakeACK = true; +void SendQueue::handshakeACK(SequenceNumber initialSequenceNumber) { + if (initialSequenceNumber == _initialSequenceNumber) { + { + std::lock_guard locker { _handshakeMutex }; + _hasReceivedHandshakeACK = true; + } + + // Notify on the handshake ACK condition + _handshakeACKCondition.notify_one(); } - - // Notify on the handshake ACK condition - _handshakeACKCondition.notify_one(); } SequenceNumber SendQueue::getNextSequenceNumber() { diff --git a/libraries/networking/src/udt/SendQueue.h b/libraries/networking/src/udt/SendQueue.h index 29ad7c6d73..0390f2ff1f 100644 --- a/libraries/networking/src/udt/SendQueue.h +++ b/libraries/networking/src/udt/SendQueue.h @@ -71,7 +71,7 @@ public slots: void ack(SequenceNumber ack); void nak(SequenceNumber start, SequenceNumber end); void overrideNAKListFromPacket(ControlPacket& packet); - void handshakeACK(); + void handshakeACK(SequenceNumber initialSequenceNumber); signals: void packetSent(int dataSize, int payloadSize); From 2229e397fa1112f2d76a2219afd09ad0b53a0208 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 29 Feb 2016 14:22:26 -0800 Subject: [PATCH 06/11] Move seq num initialization to handshake --- libraries/networking/src/udt/Connection.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index cb197f15c7..fdf8375ff3 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -411,12 +411,6 @@ bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, in // refuse to process any packets until we've received the handshake return false; } - - if (!_hasReceivedData) { - _initialReceiveSequenceNumber = sequenceNumber; - _lastReceivedSequenceNumber = sequenceNumber - 1; - _lastSentACK = sequenceNumber - 1; - } _isReceivingData = _hasReceivedData = true; @@ -739,6 +733,8 @@ void Connection::processHandshake(std::unique_ptr controlPacket) // as long as we haven't received a handshake yet or we have and we've received some data resetReceiveState(); _initialReceiveSequenceNumber = initialSequenceNumber; + _lastReceivedSequenceNumber = initialSequenceNumber - 1; + _lastSentACK = initialSequenceNumber - 1; } // immediately respond with a handshake ACK From 57a6cbc9dd024ca5b5327424fa71eeb14ac4cfd1 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 29 Feb 2016 14:22:49 -0800 Subject: [PATCH 07/11] Remove _hasReceivedData --- libraries/networking/src/udt/Connection.cpp | 4 ++-- libraries/networking/src/udt/Connection.h | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index fdf8375ff3..04edc8bb55 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -412,7 +412,7 @@ bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, in return false; } - _isReceivingData = _hasReceivedData = true; + _isReceivingData = true; // mark our last receive time as now (to push the potential expiry farther) _lastReceiveTime = p_high_resolution_clock::now(); @@ -810,7 +810,7 @@ void Connection::resetReceiveState() { // the _nakInterval need not be reset, that will happen on loss // clear sync variables - _isReceivingData = _hasReceivedData = false; + _isReceivingData = false; _connectionStart = p_high_resolution_clock::now(); _acksDuringSYN = 1; diff --git a/libraries/networking/src/udt/Connection.h b/libraries/networking/src/udt/Connection.h index 2f2252a139..bf56a468aa 100644 --- a/libraries/networking/src/udt/Connection.h +++ b/libraries/networking/src/udt/Connection.h @@ -129,7 +129,6 @@ private: p_high_resolution_clock::time_point _lastReceiveTime; // holds the last time we received anything from sender bool _isReceivingData { false }; // flag used for expiry of receipt portion of connection - bool _hasReceivedData { false }; // flag used for reset of connection state on second handshake bool _isActive { true }; // flag used for inactivity of connection SequenceNumber _initialReceiveSequenceNumber; // Randomized by peer SendQueue on creation, identifies connection during re-connect requests From 04f512c99bc6ba6ee79b7240b483f263a4ca0e61 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 29 Feb 2016 14:58:25 -0800 Subject: [PATCH 08/11] Add extra debug to udt connection --- libraries/networking/src/udt/Connection.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libraries/networking/src/udt/Connection.cpp b/libraries/networking/src/udt/Connection.cpp index 04edc8bb55..e6a15aa6a0 100644 --- a/libraries/networking/src/udt/Connection.cpp +++ b/libraries/networking/src/udt/Connection.cpp @@ -731,6 +731,12 @@ void Connection::processHandshake(std::unique_ptr controlPacket) if (!_hasReceivedHandshake || initialSequenceNumber != _initialReceiveSequenceNumber) { // server sent us a handshake - we need to assume this means state should be reset // as long as we haven't received a handshake yet or we have and we've received some data + +#ifdef UDT_CONNECTION_DEBUG + if (initialSequenceNumber != _initialReceiveSequenceNumber) { + qCDebug(networking) << "Resetting receive state, received a new initial sequence number in handshake"; + } +#endif resetReceiveState(); _initialReceiveSequenceNumber = initialSequenceNumber; _lastReceivedSequenceNumber = initialSequenceNumber - 1; From 548a672df9780d52e7619b9f20b1068f6f250e34 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 29 Feb 2016 15:31:38 -0800 Subject: [PATCH 09/11] Update DomainList version to 18 --- libraries/networking/src/udt/PacketHeaders.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 4e6418279d..5f86c35e7f 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -38,6 +38,8 @@ const QSet RELIABLE_PACKETS = QSet(); PacketVersion versionForPacketType(PacketType packetType) { switch (packetType) { + case PacketType::DomainList: + return 18; case PacketType::EntityAdd: case PacketType::EntityEdit: case PacketType::EntityData: From cc9c87d281a88a82de7551abfebcfd7e0952d3ae Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 1 Mar 2016 11:31:02 -0800 Subject: [PATCH 10/11] Fix packet version mismatch not showing for domain packets --- interface/src/Application.cpp | 11 +++-------- interface/src/Application.h | 2 +- libraries/networking/src/DomainHandler.cpp | 2 ++ libraries/networking/src/DomainHandler.h | 1 + 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 89ec196fad..a2fdd3c8ac 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -549,7 +549,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : const DomainHandler& domainHandler = nodeList->getDomainHandler(); connect(&domainHandler, SIGNAL(hostnameChanged(const QString&)), SLOT(domainChanged(const QString&))); - connect(&domainHandler, SIGNAL(connectedToDomain(const QString&)), SLOT(connectedToDomain(const QString&))); + connect(&domainHandler, SIGNAL(resetting()), SLOT(resettingDomain())); connect(&domainHandler, SIGNAL(connectedToDomain(const QString&)), SLOT(updateWindowTitle())); connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(updateWindowTitle())); connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(clearDomainOctreeDetails())); @@ -3987,13 +3987,8 @@ void Application::handleDomainConnectionDeniedPacket(QSharedPointer()->getDomainHandler().getUUID(); - - if (accountManager.isLoggedIn() && !domainID.isNull()) { - _notifiedPacketVersionMismatchThisDomain = false; - } +void Application::resettingDomain() { + _notifiedPacketVersionMismatchThisDomain = false; } void Application::nodeAdded(SharedNodePointer node) { diff --git a/interface/src/Application.h b/interface/src/Application.h index 8cc2a33038..98c5937f70 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -285,7 +285,7 @@ private slots: void idle(uint64_t now); void aboutToQuit(); - void connectedToDomain(const QString& hostname); + void resettingDomain(); void audioMuteToggled(); void faceTrackerMuteToggled(); diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index db775983e1..bf27789c54 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -98,6 +98,8 @@ void DomainHandler::softReset() { } void DomainHandler::hardReset() { + emit resetting(); + softReset(); qCDebug(networking) << "Hard reset in NodeList DomainHandler."; diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index f60ac2fbe6..957f52144b 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -104,6 +104,7 @@ signals: // It means that, either from DNS lookup or ICE, we think we have a socket we can talk to DS on void completedSocketDiscovery(); + void resetting(); void connectedToDomain(const QString& hostname); void disconnectedFromDomain(); From aa63dcc9d2930e4100dd0626348d73e0dd05ebda Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 1 Mar 2016 11:31:13 -0800 Subject: [PATCH 11/11] Add PacketType qMetaType --- libraries/networking/src/udt/PacketHeaders.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 5f86c35e7f..15042708c4 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -16,6 +16,10 @@ #include #include + +Q_DECLARE_METATYPE(PacketType); +static int packetTypeMetaTypeId = qRegisterMetaType(); + const QSet NON_VERIFIED_PACKETS = QSet() << PacketType::NodeJsonStats << PacketType::EntityQuery << PacketType::OctreeDataNack << PacketType::EntityEditNack