mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Merge pull request #16095 from SimonWalton-HiFi/change-of-local-interface
BUGZ-1317: Improved handling of local-interface addresses
This commit is contained in:
commit
7466c3f2ca
5 changed files with 25 additions and 14 deletions
|
@ -1225,8 +1225,8 @@ void LimitedNodeList::connectedForLocalSocketTest() {
|
|||
auto localHostAddress = localIPTestSocket->localAddress();
|
||||
|
||||
if (localHostAddress.protocol() == QAbstractSocket::IPv4Protocol) {
|
||||
_hasTCPCheckedLocalSocket = true;
|
||||
setLocalSocket(HifiSockAddr { localHostAddress, _nodeSocket.localPort() });
|
||||
_hasTCPCheckedLocalSocket = true;
|
||||
}
|
||||
|
||||
localIPTestSocket->deleteLater();
|
||||
|
@ -1244,7 +1244,7 @@ void LimitedNodeList::errorTestingLocalSocket() {
|
|||
setLocalSocket(HifiSockAddr { getGuessedLocalAddress(), _nodeSocket.localPort() });
|
||||
}
|
||||
|
||||
localIPTestSocket->deleteLater();;
|
||||
localIPTestSocket->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -140,7 +140,7 @@ void NetworkPeer::activatePublicSocket() {
|
|||
|
||||
void NetworkPeer::activateSymmetricSocket() {
|
||||
if (_activeSocket != &_symmetricSocket) {
|
||||
qCDebug(networking) << "Activating symmetric socket for network peer with ID" << uuidStringWithoutCurlyBraces(_uuid);
|
||||
qCDebug(networking) << "Activating symmetric socket (" << _symmetricSocket << ") for network peer with ID" << uuidStringWithoutCurlyBraces(_uuid);
|
||||
setActiveSocket(&_symmetricSocket);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -263,7 +263,7 @@ Connection* Socket::findOrCreateConnection(const HifiSockAddr& sockAddr, bool fi
|
|||
if (filterCreate && _connectionCreationFilterOperator && !_connectionCreationFilterOperator(sockAddr)) {
|
||||
// the connection creation filter did not allow us to create a new connection
|
||||
#ifdef UDT_CONNECTION_DEBUG
|
||||
qCDebug(networking) << "Socket::findOrCreateConnection refusing to create connection for" << sockAddr
|
||||
qCDebug(networking) << "Socket::findOrCreateConnection refusing to create Connection class for" << sockAddr
|
||||
<< "due to connection creation filter";
|
||||
#endif // UDT_CONNECTION_DEBUG
|
||||
return nullptr;
|
||||
|
@ -279,7 +279,7 @@ Connection* Socket::findOrCreateConnection(const HifiSockAddr& sockAddr, bool fi
|
|||
QObject::connect(connection.get(), &Connection::receiverHandshakeRequestComplete,
|
||||
this, &Socket::clientHandshakeRequestComplete);
|
||||
|
||||
qCDebug(networking) << "Creating new connection to" << sockAddr;
|
||||
qCDebug(networking) << "Creating new Connection class for" << sockAddr;
|
||||
|
||||
it = _connectionsHash.insert(it, std::make_pair(sockAddr, std::move(connection)));
|
||||
}
|
||||
|
|
|
@ -56,7 +56,6 @@ static FilePersistThread* _persistThreadInstance;
|
|||
|
||||
QString getLogRollerFilename() {
|
||||
QString result = FileUtils::standardPath(LOGS_DIRECTORY);
|
||||
QHostAddress clientAddress = getGuessedLocalAddress();
|
||||
QDateTime now = QDateTime::currentDateTime();
|
||||
QString fileSessionID;
|
||||
|
||||
|
|
|
@ -9,9 +9,19 @@
|
|||
#include "NetworkUtils.h"
|
||||
#include <QtNetwork/QNetworkInterface>
|
||||
|
||||
namespace {
|
||||
const QString LINK_LOCAL_SUBNET {"169.254."};
|
||||
|
||||
// Is address local-subnet valid only (rfc 3927):
|
||||
bool isLinkLocalAddress(const QHostAddress& ip4Addr) {
|
||||
return ip4Addr.toString().startsWith(LINK_LOCAL_SUBNET);
|
||||
}
|
||||
}
|
||||
|
||||
QHostAddress getGuessedLocalAddress() {
|
||||
|
||||
QHostAddress localAddress;
|
||||
QHostAddress linkLocalAddress;
|
||||
|
||||
foreach(const QNetworkInterface &networkInterface, QNetworkInterface::allInterfaces()) {
|
||||
if (networkInterface.flags() & QNetworkInterface::IsUp
|
||||
|
@ -20,12 +30,16 @@ QHostAddress getGuessedLocalAddress() {
|
|||
// we've decided that this is the active NIC
|
||||
// enumerate it's addresses to grab the IPv4 address
|
||||
foreach(const QNetworkAddressEntry &entry, networkInterface.addressEntries()) {
|
||||
const auto& addressCandidate = entry.ip();
|
||||
// make sure it's an IPv4 address that isn't the loopback
|
||||
if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol && !entry.ip().isLoopback()) {
|
||||
|
||||
// set our localAddress and break out
|
||||
localAddress = entry.ip();
|
||||
break;
|
||||
if (addressCandidate.protocol() == QAbstractSocket::IPv4Protocol && !addressCandidate.isLoopback()) {
|
||||
if (isLinkLocalAddress(addressCandidate)) {
|
||||
linkLocalAddress = addressCandidate; // Last resort
|
||||
} else {
|
||||
// set our localAddress and break out
|
||||
localAddress = addressCandidate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +50,5 @@ QHostAddress getGuessedLocalAddress() {
|
|||
}
|
||||
|
||||
// return the looked up local address
|
||||
return localAddress;
|
||||
return localAddress.isNull() ? linkLocalAddress : localAddress;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue