From f59335ceff908d6a2db5f26227840ddc172c1661 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 6 Jun 2016 11:49:01 -0700 Subject: [PATCH] don't thrash API re-check when connection denied --- libraries/networking/src/DomainHandler.cpp | 6 ++---- libraries/networking/src/DomainHandler.h | 3 ++- libraries/networking/src/NodeList.cpp | 9 ++++++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index 1efcfc7f27..9b94c07ed2 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -85,6 +85,7 @@ void DomainHandler::softReset() { clearSettings(); + _domainConnectionRefusals.clear(); _connectionDenialsSinceKeypairRegen = 0; // cancel the failure timeout for any pending requests for settings @@ -141,9 +142,6 @@ void DomainHandler::setSocketAndID(const QString& hostname, quint16 port, const // set the new hostname _hostname = hostname; - // FIXME - is this the right place??? - _domainConnectionRefusals.clear(); - qCDebug(networking) << "Updated domain hostname to" << _hostname; // re-set the sock addr to null and fire off a lookup of the IP address for this domain-server's hostname @@ -168,7 +166,7 @@ void DomainHandler::setSocketAndID(const QString& hostname, quint16 port, const } void DomainHandler::setIceServerHostnameAndID(const QString& iceServerHostname, const QUuid& id) { - if (id != _uuid) { + if (_iceServerSockAddr.getAddress().toString() != iceServerHostname && id != _pendingDomainID) { // re-set the domain info to connect to new domain hardReset(); diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index 226186f1d0..c33a946d98 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -72,10 +72,11 @@ public: bool isConnected() const { return _isConnected; } void setIsConnected(bool isConnected); + bool wasConnectionRefused() const { return !_domainConnectionRefusals.isEmpty(); } + bool hasSettings() const { return !_settingsObject.isEmpty(); } void requestDomainSettings(); const QJsonObject& getSettingsObject() const { return _settingsObject; } - void setPendingPath(const QString& pendingPath) { _pendingPath = pendingPath; } const QString& getPendingPath() { return _pendingPath; } diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 082200fccc..41cfe2cfd7 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -356,7 +356,14 @@ void NodeList::sendDomainServerCheckIn() { _numNoReplyDomainCheckIns++; } - if (!_publicSockAddr.isNull() && !_domainHandler.isConnected() && !_domainHandler.getPendingDomainID().isNull()) { + const int NUM_NO_REPLY_CHECKINS_BEFORE_API_REFRESH = 2; + + if (!_publicSockAddr.isNull() + && !_domainHandler.isConnected() + && _numNoReplyDomainCheckIns > NUM_NO_REPLY_CHECKINS_BEFORE_API_REFRESH + && !_domainHandler.getPendingDomainID().isNull() + && !_domainHandler.wasConnectionRefused()) { + // if we aren't connected to the domain-server, and we have an ID // (that we presume belongs to a domain in the HF Metaverse) // we request connection information for the domain every so often to make sure what we have is up to date