diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index b442463ac8..5f8aceca35 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -566,9 +566,14 @@ bool DomainHandler::checkInPacketTimeout() { qCDebug(networking_ice) << "Silent domain checkins:" << _checkInPacketsSinceLastReply; } - if (_checkInPacketsSinceLastReply > MAX_SILENT_DOMAIN_SERVER_CHECK_INS) { + auto nodeList = DependencyManager::get(); - auto nodeList = DependencyManager::get(); + if(_checkInPacketsSinceLastReply > 2) { + qCDebug(networking_ice) << _checkInPacketsSinceLastReply << "seconds since last domain list request, squelching traffic"; + nodeList->setDropOutgoingNodeTraffic(true); + } + + if (_checkInPacketsSinceLastReply > MAX_SILENT_DOMAIN_SERVER_CHECK_INS) { // we haven't heard back from DS in MAX_SILENT_DOMAIN_SERVER_CHECK_INS // so emit our signal that says that diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 9f4eb39013..6faaca219c 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -409,6 +409,13 @@ qint64 LimitedNodeList::sendUnreliablePacket(const NLPacket& packet, const HifiS Q_ASSERT_X(!packet.isReliable(), "LimitedNodeList::sendUnreliablePacket", "Trying to send a reliable packet unreliably."); + if(_dropOutgoingNodeTraffic) { + auto destinationNode = findNodeWithAddr(sockAddr); + if (!destinationNode.isNull() && (destinationNode->getType() != NodeType::DomainServer)) { + return ERROR_SENDING_PACKET_BYTES; + } + } + fillPacketHeader(packet, hmacAuth); return _nodeSocket.writePacket(packet, sockAddr); diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index bd5e6bd013..f9f6bf3b3e 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -335,6 +335,8 @@ public: float getInboundKbps() const { return _inboundKbps; } float getOutboundKbps() const { return _outboundKbps; } + void setDropOutgoingNodeTraffic(bool squelchOutgoingNodeTraffic) { _dropOutgoingNodeTraffic = squelchOutgoingNodeTraffic; } + const std::set SOLO_NODE_TYPES = { NodeType::AvatarMixer, NodeType::AudioMixer, @@ -493,6 +495,8 @@ private: int _outboundPPS { 0 }; float _inboundKbps { 0.0f }; float _outboundKbps { 0.0f }; + + bool _dropOutgoingNodeTraffic { false }; }; #endif // hifi_LimitedNodeList_h diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 86b33bbe20..39b8fa29a9 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -710,6 +710,7 @@ void NodeList::processDomainServerList(QSharedPointer message) // this is a packet from the domain server, reset the count of un-replied check-ins _domainHandler.clearPendingCheckins(); + setDropOutgoingNodeTraffic(false); // emit our signal so listeners know we just heard from the DS emit receivedDomainServerList();