mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 13:09:52 +02:00
Merge pull request #877 from vircadia/feature/domain-server-reporting-socket
Send address and port with each metaverse heartbeat.
This commit is contained in:
commit
f894a0a141
5 changed files with 61 additions and 21 deletions
|
@ -2013,6 +2013,23 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "domain_server",
|
||||||
|
"label": "Setup Domain Server",
|
||||||
|
"restart": false,
|
||||||
|
"hidden": true,
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"name": "network_address",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "network_port",
|
||||||
|
"type": "int",
|
||||||
|
"default": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "installed_content",
|
"name": "installed_content",
|
||||||
"label": "Installed Content",
|
"label": "Installed Content",
|
||||||
|
|
|
@ -129,9 +129,10 @@ function getCurrentDomainIDType() {
|
||||||
return DOMAIN_ID_TYPE_UNKNOWN;
|
return DOMAIN_ID_TYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
if (DomainInfo !== null) {
|
if (DomainInfo !== null) {
|
||||||
if (DomainInfo.name !== undefined) {
|
// Disabled because detecting as temp domain... and we're not even using temp domains right now.
|
||||||
return DOMAIN_ID_TYPE_TEMP;
|
// if (DomainInfo.name !== undefined) {
|
||||||
}
|
// return DOMAIN_ID_TYPE_TEMP;
|
||||||
|
// }
|
||||||
return DOMAIN_ID_TYPE_FULL;
|
return DOMAIN_ID_TYPE_FULL;
|
||||||
}
|
}
|
||||||
return DOMAIN_ID_TYPE_UNKNOWN;
|
return DOMAIN_ID_TYPE_UNKNOWN;
|
||||||
|
|
|
@ -68,6 +68,9 @@ Q_LOGGING_CATEGORY(domain_server_ice, "hifi.domain_server.ice")
|
||||||
|
|
||||||
const QString ACCESS_TOKEN_KEY_PATH = "metaverse.access_token";
|
const QString ACCESS_TOKEN_KEY_PATH = "metaverse.access_token";
|
||||||
const QString DomainServer::REPLACEMENT_FILE_EXTENSION = ".replace";
|
const QString DomainServer::REPLACEMENT_FILE_EXTENSION = ".replace";
|
||||||
|
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 MIN_PORT = 1;
|
||||||
const int MAX_PORT = 65535;
|
const int MAX_PORT = 65535;
|
||||||
|
|
||||||
|
@ -901,14 +904,13 @@ void DomainServer::setupAutomaticNetworking() {
|
||||||
qDebug() << "domain-server" << _automaticNetworkingSetting << "automatic networking enabled for ID"
|
qDebug() << "domain-server" << _automaticNetworkingSetting << "automatic networking enabled for ID"
|
||||||
<< uuidStringWithoutCurlyBraces(domainID) << "via" << _oauthProviderURL.toString();
|
<< uuidStringWithoutCurlyBraces(domainID) << "via" << _oauthProviderURL.toString();
|
||||||
|
|
||||||
|
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
||||||
|
|
||||||
|
// send any public socket changes to the data server so nodes can find us at our new IP
|
||||||
|
connect(nodeList.data(), &LimitedNodeList::publicSockAddrChanged, this,
|
||||||
|
&DomainServer::performIPAddressPortUpdate);
|
||||||
|
|
||||||
if (_automaticNetworkingSetting == IP_ONLY_AUTOMATIC_NETWORKING_VALUE) {
|
if (_automaticNetworkingSetting == IP_ONLY_AUTOMATIC_NETWORKING_VALUE) {
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
|
||||||
|
|
||||||
// send any public socket changes to the data server so nodes can find us at our new IP
|
|
||||||
connect(nodeList.data(), &LimitedNodeList::publicSockAddrChanged,
|
|
||||||
this, &DomainServer::performIPAddressUpdate);
|
|
||||||
|
|
||||||
// have the LNL enable public socket updating via STUN
|
// have the LNL enable public socket updating via STUN
|
||||||
nodeList->startSTUNPublicSocketUpdate();
|
nodeList->startSTUNPublicSocketUpdate();
|
||||||
}
|
}
|
||||||
|
@ -1504,13 +1506,23 @@ QJsonObject jsonForDomainSocketUpdate(const HifiSockAddr& socket) {
|
||||||
return socketObject;
|
return socketObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString DOMAIN_UPDATE_AUTOMATIC_NETWORKING_KEY = "automatic_networking";
|
void DomainServer::performIPAddressPortUpdate(const HifiSockAddr& newPublicSockAddr) {
|
||||||
|
const QString& DOMAIN_SERVER_SETTINGS_KEY = "domain_server";
|
||||||
|
const QString& publicSocketAddress = newPublicSockAddr.getAddress().toString();
|
||||||
|
const int publicSocketPort = newPublicSockAddr.getPort();
|
||||||
|
|
||||||
void DomainServer::performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr) {
|
sendHeartbeatToMetaverse(publicSocketAddress, publicSocketPort);
|
||||||
sendHeartbeatToMetaverse(newPublicSockAddr.getAddress().toString());
|
|
||||||
|
QJsonObject rootObject;
|
||||||
|
QJsonObject domainServerObject;
|
||||||
|
domainServerObject.insert(PUBLIC_SOCKET_ADDRESS_KEY, publicSocketAddress);
|
||||||
|
domainServerObject.insert(PUBLIC_SOCKET_PORT_KEY, publicSocketPort);
|
||||||
|
rootObject.insert(DOMAIN_SERVER_SETTINGS_KEY, domainServerObject);
|
||||||
|
QJsonDocument doc(rootObject);
|
||||||
|
_settingsManager.recurseJSONObjectAndOverwriteSettings(rootObject, DomainSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress) {
|
void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress, const int port) {
|
||||||
// Setup the domain object to send to the data server
|
// Setup the domain object to send to the data server
|
||||||
QJsonObject domainObject;
|
QJsonObject domainObject;
|
||||||
|
|
||||||
|
@ -1520,10 +1532,20 @@ void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress) {
|
||||||
static const QString PROTOCOL_VERSION_KEY = "protocol";
|
static const QString PROTOCOL_VERSION_KEY = "protocol";
|
||||||
domainObject[PROTOCOL_VERSION_KEY] = protocolVersionsSignatureBase64();
|
domainObject[PROTOCOL_VERSION_KEY] = protocolVersionsSignatureBase64();
|
||||||
|
|
||||||
// add networking
|
static const QString NETWORK_ADDRESS_SETTINGS_KEY = "domain_server." + PUBLIC_SOCKET_ADDRESS_KEY;
|
||||||
|
const QString networkAddressFromSettings = _settingsManager.valueForKeyPath(NETWORK_ADDRESS_SETTINGS_KEY).toString();
|
||||||
if (!networkAddress.isEmpty()) {
|
if (!networkAddress.isEmpty()) {
|
||||||
static const QString PUBLIC_NETWORK_ADDRESS_KEY = "network_address";
|
domainObject[PUBLIC_SOCKET_ADDRESS_KEY] = networkAddress;
|
||||||
domainObject[PUBLIC_NETWORK_ADDRESS_KEY] = networkAddress;
|
} else if (!networkAddressFromSettings.isEmpty()) {
|
||||||
|
domainObject[PUBLIC_SOCKET_ADDRESS_KEY] = networkAddressFromSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const QString PORT_SETTINGS_KEY = "domain_server." + PUBLIC_SOCKET_PORT_KEY;
|
||||||
|
const int portFromSettings = _settingsManager.valueForKeyPath(PORT_SETTINGS_KEY).toInt();
|
||||||
|
if (port != NULL) {
|
||||||
|
domainObject[PUBLIC_SOCKET_PORT_KEY] = port;
|
||||||
|
} else if (portFromSettings != NULL) {
|
||||||
|
domainObject[PUBLIC_SOCKET_PORT_KEY] = portFromSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const QString AUTOMATIC_NETWORKING_KEY = "automatic_networking";
|
static const QString AUTOMATIC_NETWORKING_KEY = "automatic_networking";
|
||||||
|
|
|
@ -112,8 +112,8 @@ private slots:
|
||||||
void setupPendingAssignmentCredits();
|
void setupPendingAssignmentCredits();
|
||||||
void sendPendingTransactionsToServer();
|
void sendPendingTransactionsToServer();
|
||||||
|
|
||||||
void performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr);
|
void performIPAddressPortUpdate(const HifiSockAddr& newPublicSockAddr);
|
||||||
void sendHeartbeatToMetaverse() { sendHeartbeatToMetaverse(QString()); }
|
void sendHeartbeatToMetaverse() { sendHeartbeatToMetaverse(QString(), int()); }
|
||||||
void sendHeartbeatToIceServer();
|
void sendHeartbeatToIceServer();
|
||||||
void nodePingMonitor();
|
void nodePingMonitor();
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ private:
|
||||||
void setupAutomaticNetworking();
|
void setupAutomaticNetworking();
|
||||||
void setupICEHeartbeatForFullNetworking();
|
void setupICEHeartbeatForFullNetworking();
|
||||||
void setupHeartbeatToMetaverse();
|
void setupHeartbeatToMetaverse();
|
||||||
void sendHeartbeatToMetaverse(const QString& networkAddress);
|
void sendHeartbeatToMetaverse(const QString& networkAddress, const int port);
|
||||||
|
|
||||||
void randomizeICEServerAddress(bool shouldTriggerHostLookup);
|
void randomizeICEServerAddress(bool shouldTriggerHostLookup);
|
||||||
|
|
||||||
|
|
|
@ -1197,7 +1197,7 @@ void LimitedNodeList::stopInitialSTUNUpdate(bool success) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// We now setup a timer here to fire every so often to check that our IP address has not changed.
|
// We now setup a timer here to fire every so often to check that our IP address has not changed.
|
||||||
// Or, if we failed - if will check if we can eventually get a public socket
|
// Or, if we failed - it will check if we can eventually get a public socket
|
||||||
const int STUN_IP_ADDRESS_CHECK_INTERVAL_MSECS = 10 * 1000;
|
const int STUN_IP_ADDRESS_CHECK_INTERVAL_MSECS = 10 * 1000;
|
||||||
|
|
||||||
QTimer* stunOccasionalTimer = new QTimer { this };
|
QTimer* stunOccasionalTimer = new QTimer { this };
|
||||||
|
|
Loading…
Reference in a new issue