From 56f45a49307119ef98bdef73ee52f5f0f14337a9 Mon Sep 17 00:00:00 2001 From: LordGrey <48840279+Lord-Grey@users.noreply.github.com> Date: Sat, 14 Nov 2020 16:35:55 +0100 Subject: [PATCH] Fix hostname/domain split (#1079) --- .../leddevice/dev_net/LedDeviceCololight.cpp | 24 ++++++++++--- libsrc/ssdp/SSDPDiscover.cpp | 34 ++++++++++++++----- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/libsrc/leddevice/dev_net/LedDeviceCololight.cpp b/libsrc/leddevice/dev_net/LedDeviceCololight.cpp index 68e25cd3..9b4235b3 100644 --- a/libsrc/leddevice/dev_net/LedDeviceCololight.cpp +++ b/libsrc/leddevice/dev_net/LedDeviceCololight.cpp @@ -668,7 +668,8 @@ QJsonObject LedDeviceCololight::discover() { QJsonObject obj; - obj.insert("ip", i.key()); + QString ipAddress = i.key(); + obj.insert("ip", ipAddress); obj.insert("model", i.value().value(COLOLIGHT_MODEL)); obj.insert("type", i.value().value(COLOLIGHT_MODEL_TYPE)); obj.insert("mac", i.value().value(COLOLIGHT_MAC)); @@ -678,7 +679,6 @@ QJsonObject LedDeviceCololight::discover() if (hostInfo.error() == QHostInfo::NoError) { QString hostname = hostInfo.hostName(); - //Seems that for Windows no local domain name is resolved if (!QHostInfo::localDomainName().isEmpty()) { obj.insert("hostname", hostname.remove("." + QHostInfo::localDomainName())); @@ -686,9 +686,23 @@ QJsonObject LedDeviceCololight::discover() } else { - int domainPos = hostname.indexOf('.'); - obj.insert("hostname", hostname.left(domainPos)); - obj.insert("domain", hostname.mid(domainPos + 1)); + if (hostname.startsWith(ipAddress)) + { + obj.insert("hostname", ipAddress); + + QString domain = hostname.remove(ipAddress); + if (domain.at(0) == '.') + { + domain.remove(0, 1); + } + obj.insert("domain", domain); + } + else + { + int domainPos = hostname.indexOf('.'); + obj.insert("hostname", hostname.left(domainPos)); + obj.insert("domain", hostname.mid(domainPos + 1)); + } } } diff --git a/libsrc/ssdp/SSDPDiscover.cpp b/libsrc/ssdp/SSDPDiscover.cpp index 712e2f32..a16ee53f 100644 --- a/libsrc/ssdp/SSDPDiscover.cpp +++ b/libsrc/ssdp/SSDPDiscover.cpp @@ -316,24 +316,40 @@ QJsonArray SSDPDiscover::getServicesDiscoveredJson() const obj.insert("usn", i.value().uniqueServiceName); QUrl url (i.value().location); - obj.insert("ip", url.host()); + QString ipAddress = url.host(); + + obj.insert("ip", ipAddress); obj.insert("port", url.port()); QHostInfo hostInfo = QHostInfo::fromName(url.host()); - if (hostInfo.error() == QHostInfo::NoError ) + if (hostInfo.error() == QHostInfo::NoError) { QString hostname = hostInfo.hostName(); - //Seems that for Windows no local domain name is resolved - if (!hostInfo.localDomainName().isEmpty() ) + + if (!QHostInfo::localDomainName().isEmpty()) { - obj.insert("hostname", hostname.remove("."+hostInfo.localDomainName())); - obj.insert("domain", hostInfo.localDomainName()); + obj.insert("hostname", hostname.remove("." + QHostInfo::localDomainName())); + obj.insert("domain", QHostInfo::localDomainName()); } else { - int domainPos = hostname.indexOf('.'); - obj.insert("hostname", hostname.left(domainPos)); - obj.insert("domain", hostname.mid(domainPos+1)); + if (hostname.startsWith(ipAddress)) + { + obj.insert("hostname", ipAddress); + + QString domain = hostname.remove(ipAddress); + if (domain.at(0) == '.') + { + domain.remove(0, 1); + } + obj.insert("domain", domain); + } + else + { + int domainPos = hostname.indexOf('.'); + obj.insert("hostname", hostname.left(domainPos)); + obj.insert("domain", hostname.mid(domainPos + 1)); + } } }