From d4a11ce0e61cd27e0908fd94e75933ae0721cf8e Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Fri, 1 Dec 2023 00:14:43 +0100 Subject: [PATCH 1/2] Initial fix for manual networking, still needs work --- domain-server/src/DomainServer.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index fb92ff526d..060fcfa4d8 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -73,9 +73,9 @@ Q_LOGGING_CATEGORY(domain_server_auth, "overte.domain_server.auth") const QString ACCESS_TOKEN_KEY_PATH = "metaverse.access_token"; const QString DomainServer::REPLACEMENT_FILE_EXTENSION = ".replace"; +const QString& DOMAIN_SERVER_SETTINGS_KEY = "domain_server"; const QString PUBLIC_SOCKET_ADDRESS_KEY = "network_address"; const QString PUBLIC_SOCKET_PORT_KEY = "network_port"; -const QString DOMAIN_UPDATE_AUTOMATIC_NETWORKING_KEY = "automatic_networking"; const int MIN_PORT = 1; const int MAX_PORT = 65535; @@ -1567,7 +1567,6 @@ QJsonObject jsonForDomainSocketUpdate(const SockAddr& socket) { } void DomainServer::performIPAddressPortUpdate(const SockAddr& newPublicSockAddr) { - const QString& DOMAIN_SERVER_SETTINGS_KEY = "domain_server"; const QString& publicSocketAddress = newPublicSockAddr.getAddress().toString(); const int publicSocketPort = newPublicSockAddr.getPort(); @@ -1579,6 +1578,7 @@ void DomainServer::performIPAddressPortUpdate(const SockAddr& newPublicSockAddr) domainServerObject.insert(PUBLIC_SOCKET_PORT_KEY, publicSocketPort); rootObject.insert(DOMAIN_SERVER_SETTINGS_KEY, domainServerObject); QJsonDocument doc(rootObject); + qDebug() << "DomainServer::performIPAddressPortUpdate: " << doc; _settingsManager.recurseJSONObjectAndOverwriteSettings(rootObject, DomainSettings); } @@ -2487,6 +2487,16 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url return true; } auto domainID = domainSetting.toString(); + qDebug() << connection->parseUrlEncodedForm(); + auto parsed = connection->parseUrlEncodedForm(); + if (parsed.contains(PUBLIC_SOCKET_PORT_KEY) || parsed.contains(PUBLIC_SOCKET_ADDRESS_KEY)) { + QJsonObject domainServerObject; + domainServerObject.insert(PUBLIC_SOCKET_PORT_KEY, parsed[PUBLIC_SOCKET_PORT_KEY]); + domainServerObject.insert(PUBLIC_SOCKET_ADDRESS_KEY, parsed[PUBLIC_SOCKET_ADDRESS_KEY]); + QJsonObject rootObject; + rootObject.insert(DOMAIN_SERVER_SETTINGS_KEY, domainServerObject); + _settingsManager.recurseJSONObjectAndOverwriteSettings(rootObject, DomainSettings); + } return forwardMetaverseAPIRequest(connection, url, "/api/v1/domains/" + domainID, "domain", { }, { "network_address", "network_port", "label" }); } else if (url.path() == URI_API_PLACES) { From f0a3a3390568a63b1472cfb28c364b392291fce2 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Fri, 1 Dec 2023 21:15:11 +0100 Subject: [PATCH 2/2] Fix setting external port and IP address for manual networking modes --- domain-server/resources/web/settings/js/settings.js | 10 ++++++++-- domain-server/src/DomainServer.cpp | 11 +++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/domain-server/resources/web/settings/js/settings.js b/domain-server/resources/web/settings/js/settings.js index cc7451e3f2..d3792cf36e 100644 --- a/domain-server/resources/web/settings/js/settings.js +++ b/domain-server/resources/web/settings/js/settings.js @@ -601,7 +601,7 @@ $(document).ready(function(){ form += ''; form += ' Edit'; form += ''; - form += '
This defines how nodes will connect to your domain. You can read more about automatic networking here.
'; + form += '
This defines how nodes will connect to your domain. Since the displayed setting is read back from directory server, it takes some time to update after being edited. You can read more about automatic networking here.
'; form += ''; form = $(form); @@ -664,7 +664,13 @@ $(document).ready(function(){ success: function(xhr) { console.log(xhr, parseJSONResponse(xhr)); dialog.modal('hide'); - reloadDomainInfo(); + reloadDomainInfo(); // TODO: this one doesn't work since directory server still has old data + setTimeout(function() { + reloadDomainInfo(); + }, 16000); + setTimeout(function() { + reloadDomainInfo(); + }, 64000); }, error:function(xhr) { var data = parseJSONResponse(xhr); diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 060fcfa4d8..7d9456f059 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1570,12 +1570,19 @@ void DomainServer::performIPAddressPortUpdate(const SockAddr& newPublicSockAddr) const QString& publicSocketAddress = newPublicSockAddr.getAddress().toString(); const int publicSocketPort = newPublicSockAddr.getPort(); - sendHeartbeatToMetaverse(publicSocketAddress, publicSocketPort); + if (_automaticNetworkingSetting == IP_ONLY_AUTOMATIC_NETWORKING_VALUE) { + sendHeartbeatToMetaverse(publicSocketAddress, 0); + } else { + // Full automatic networking, update both port and IP address + sendHeartbeatToMetaverse(publicSocketAddress, publicSocketPort); + } QJsonObject rootObject; QJsonObject domainServerObject; domainServerObject.insert(PUBLIC_SOCKET_ADDRESS_KEY, publicSocketAddress); - domainServerObject.insert(PUBLIC_SOCKET_PORT_KEY, publicSocketPort); + if (_automaticNetworkingSetting == FULL_AUTOMATIC_NETWORKING_VALUE) { + domainServerObject.insert(PUBLIC_SOCKET_PORT_KEY, publicSocketPort); + } rootObject.insert(DOMAIN_SERVER_SETTINGS_KEY, domainServerObject); QJsonDocument doc(rootObject); qDebug() << "DomainServer::performIPAddressPortUpdate: " << doc;