From 740438d08dd5ab07fc86b4a4bcd64907ed022327 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 31 Mar 2015 16:11:41 -0700 Subject: [PATCH] handle domain-server local port changes once connected --- libraries/networking/src/AddressManager.cpp | 10 +--------- libraries/networking/src/AddressManager.h | 2 -- libraries/networking/src/DomainHandler.h | 1 + libraries/networking/src/NodeList.cpp | 17 +++++++++++++++++ 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 3c27c4644c..f8b297c025 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -33,8 +33,7 @@ AddressManager::AddressManager() : _rootPlaceName(), _rootPlaceID(), _positionGetter(NULL), - _orientationGetter(NULL), - _localDSPortSharedMem(NULL) + _orientationGetter(NULL) { connect(qApp, &QCoreApplication::aboutToQuit, this, &AddressManager::storeCurrentAddress); } @@ -331,13 +330,6 @@ bool AddressManager::handleNetworkAddress(const QString& lookupString) { quint16 domainPort = DEFAULT_DOMAIN_SERVER_PORT; - if (domainHostname == "localhost") { - auto nodeList = DependencyManager::get(); - nodeList->getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, - _localDSPortSharedMem, - domainPort); - } - if (!hostnameRegex.cap(2).isEmpty()) { domainPort = (qint16) hostnameRegex.cap(2).toInt(); } diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index a2522afcbc..db1cd6a3c8 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -95,8 +95,6 @@ private: QUuid _rootPlaceID; PositionGetter _positionGetter; OrientationGetter _orientationGetter; - - QSharedMemory* _localDSPortSharedMem; // memory shared with domain server }; #endif // hifi_AddressManager_h diff --git a/libraries/networking/src/DomainHandler.h b/libraries/networking/src/DomainHandler.h index 0877f657e1..35ef7d8e2c 100644 --- a/libraries/networking/src/DomainHandler.h +++ b/libraries/networking/src/DomainHandler.h @@ -47,6 +47,7 @@ public: void setSockAddr(const HifiSockAddr& sockAddr, const QString& hostname); unsigned short getPort() const { return _sockAddr.getPort(); } + void setPort(quint16 port) { _sockAddr.setPort(port); } const QUuid& getAssignmentUUID() const { return _assignmentUUID; } void setAssignmentUUID(const QUuid& assignmentUUID) { _assignmentUUID = assignmentUUID; } diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index e63f230f6e..83424d7688 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -277,6 +277,23 @@ void NodeList::sendDomainServerCheckIn() { if (!_domainHandler.isConnected()) { qDebug() << "Sending connect request to domain-server at" << _domainHandler.getHostname(); + + // is this our localhost domain-server? + // if so we need to make sure we have an up-to-date local port in case it restarted + + if (_domainHandler.getSockAddr().getAddress() == QHostAddress::LocalHost + || _domainHandler.getHostname() == "localhost") { + + static QSharedMemory* localDSPortSharedMem = NULL; + + quint16 domainPort = DEFAULT_DOMAIN_SERVER_PORT; + getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, + localDSPortSharedMem, + domainPort); + qDebug() << "Local domain-server port read from shared memory (or default) is" << domainPort; + _domainHandler.setPort(domainPort); + } + } // construct the DS check in packet