diff --git a/core/backends/lan/lanlinkprovider.cpp b/core/backends/lan/lanlinkprovider.cpp index c7b3d1843..637105e45 100644 --- a/core/backends/lan/lanlinkprovider.cpp +++ b/core/backends/lan/lanlinkprovider.cpp @@ -230,6 +230,7 @@ void LanLinkProvider::sendUdpIdentityPacket(QUdpSocket &socket, const QListaddress == QHostAddress::Null) { discoveredService->address = QHostAddress(from); // In case we don't receive a A record, use from as address } + qWarning() << "Got a PTR for addres" << discoveredService->address; } break; case MDNS_RECORDTYPE_SRV: { static char nameBuffer[256]; @@ -239,7 +240,7 @@ void Discoverer::sendQuery(const QString &serviceType) qCDebug(KDECONNECT_CORE) << "Sending mDNS query via socket" << socket; int ret = mdns_multiquery_send(socket, &query, 1, buffer, sizeof(buffer), 0); if (ret < 0) { - qCWarning(KDECONNECT_CORE) << "Failed to send mDNS query:" << strerror(errno); + qWarning() << "Failed to send mDNS query:" << strerror(errno); } } } @@ -278,7 +279,7 @@ static QHostAddress findBestAddressMatchV4(const QVector &hostAddr return hostAddresses[0]; } - // qDebug() << "I have more than one IP address:" << hostAddresses << "- Finding best match for source IP:" << otherIp; + qWarning() << "I have more than one IP address:" << hostAddresses << "- Finding best match for source IP:" << otherIp; QHostAddress matchingIp = hostAddresses[0]; int matchingBits = -1; @@ -294,7 +295,7 @@ static QHostAddress findBestAddressMatchV4(const QVector &hostAddr } } - // qDebug() << "Found match:" << matchingIp; + qWarning() << "Found match:" << matchingIp; return matchingIp; } @@ -372,12 +373,17 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle int ret = 0; if (name == dnsSdName) { + qWarning() << "Someone queried all services for" << recordTypeToStr(record_type); if ((record_type == MDNS_RECORDTYPE_PTR) || (record_type == MDNS_RECORDTYPE_ANY)) { // The PTR query was for the DNS-SD domain, send answer with a PTR record for the service name we advertise. mdns_record_t answer = createMdnsRecord(self, MDNS_RECORDTYPE_PTR); + // Send the answer, unicast or multicast depending on flag in query uint16_t unicast = (rclass & MDNS_UNICAST_RESPONSE); + + printf(" --> answer %.*s (%s)\n", MDNS_STRING_FORMAT(answer.data.ptr.name), (unicast ? "unicast" : "multicast")); + if (unicast) { ret = mdns_query_answer_unicast(sock, from, addrlen, sendbuffer, sizeof(sendbuffer), query_id, (mdns_record_type_t)record_type, nameMdnsString.str, nameMdnsString.length, @@ -387,6 +393,7 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle } } } else if (name == self.serviceType) { + qWarning() << "Someone queried my service type for" << recordTypeToStr(record_type); if ((record_type == MDNS_RECORDTYPE_PTR) || (record_type == MDNS_RECORDTYPE_ANY)) { // The PTR query was for our service, answer a PTR record reverse mapping the queried service name // to our service instance name and add additional records containing the SRV record mapping the @@ -407,7 +414,10 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle additional.append(createMdnsRecord(self, MDNS_RECORDTYPE_TXT, nullptr, txtIterator)); } + // Send the answer, unicast or multicast depending on flag in query uint16_t unicast = (rclass & MDNS_UNICAST_RESPONSE); + printf(" --> answer %.*s (%s)\n", MDNS_STRING_FORMAT(answer.data.ptr.name), (unicast ? "unicast" : "multicast")); + if (unicast) { ret = mdns_query_answer_unicast(sock, from, addrlen, sendbuffer, sizeof(sendbuffer), query_id, (mdns_record_type_t)record_type, nameMdnsString.str, nameMdnsString.length, @@ -418,6 +428,7 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle } } } else if (name == self.serviceInstance) { + qWarning() << "Someone queried my service instance" << recordTypeToStr(record_type); if ((record_type == MDNS_RECORDTYPE_SRV) || (record_type == MDNS_RECORDTYPE_ANY)) { // The SRV query was for our service instance, answer a SRV record mapping the service // instance name to our qualified hostname (typically ".local.") and port, as @@ -437,7 +448,10 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle additional.append(createMdnsRecord(self, MDNS_RECORDTYPE_TXT, nullptr, txtIterator)); } + // Send the answer, unicast or multicast depending on flag in query uint16_t unicast = (rclass & MDNS_UNICAST_RESPONSE); + printf(" --> answer %.*s port %d (%s)\n", MDNS_STRING_FORMAT(answer.data.srv.name), answer.data.srv.port, (unicast ? "unicast" : "multicast")); + if (unicast) { ret = mdns_query_answer_unicast(sock, from, addrlen, sendbuffer, sizeof(sendbuffer), query_id, (mdns_record_type_t)record_type, nameMdnsString.str, nameMdnsString.length, @@ -448,6 +462,7 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle } } } else if (name == self.hostname) { + qWarning() << "Someone queried my host for" << recordTypeToStr(record_type); if (((record_type == MDNS_RECORDTYPE_A) || (record_type == MDNS_RECORDTYPE_ANY)) && !self.addressesV4.empty()) { // The A query was for our qualified hostname and we have an IPv4 address, answer with an A // record mapping the hostname to an IPv4 address, as well as an AAAA record and TXT records @@ -463,7 +478,10 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle additional.append(createMdnsRecord(self, MDNS_RECORDTYPE_TXT, nullptr, txtIterator)); } + // Send the answer, unicast or multicast depending on flag in query uint16_t unicast = (rclass & MDNS_UNICAST_RESPONSE); + printf(" --> answer %.*s IPv4 (%s)\n", MDNS_STRING_FORMAT(answer.name), (unicast ? "unicast" : "multicast")); + if (unicast) { ret = mdns_query_answer_unicast(sock, from, addrlen, sendbuffer, sizeof(sendbuffer), query_id, (mdns_record_type_t)record_type, nameMdnsString.str, nameMdnsString.length, @@ -487,7 +505,10 @@ static int service_callback(int sock, const struct sockaddr* from, size_t addrle additional.append(createMdnsRecord(self, MDNS_RECORDTYPE_TXT, nullptr, txtIterator)); } + // Send the answer, unicast or multicast depending on flag in query uint16_t unicast = (rclass & MDNS_UNICAST_RESPONSE); + printf(" --> answer %.*s IPv6 (%s)\n", MDNS_STRING_FORMAT(answer.name), (unicast ? "unicast" : "multicast")); + if (unicast) { ret = mdns_query_answer_unicast(sock, from, addrlen, sendbuffer, sizeof(sendbuffer), query_id, (mdns_record_type_t)record_type, nameMdnsString.str, nameMdnsString.length, @@ -572,6 +593,7 @@ Announcer::Announcer(const QString &instanceName, const QString &serviceType, ui void Announcer::detectHostAddresses() { + qWarning() << "detectHostAddresses"; self.addressesV4.clear(); self.addressesV6.clear(); for (const QNetworkInterface &iface : QNetworkInterface::allInterfaces()) { @@ -582,8 +604,10 @@ void Announcer::detectHostAddresses() for (const QNetworkAddressEntry &ifaceAddress : iface.addressEntries()) { QHostAddress sourceAddress = ifaceAddress.ip(); if (sourceAddress.protocol() == QAbstractSocket::IPv4Protocol && sourceAddress != QHostAddress::LocalHost) { + qWarning() << "Found ipv4" << sourceAddress; self.addressesV4.append(sourceAddress); } else if (sourceAddress.protocol() == QAbstractSocket::IPv6Protocol && sourceAddress != QHostAddress::LocalHostIPv6) { + qWarning() << "Found ipv6" << sourceAddress; self.addressesV6.append(sourceAddress); } } @@ -594,7 +618,7 @@ void Announcer::startAnnouncing() { int num_sockets = listenForQueries(); if (num_sockets <= 0) { - qCWarning(KDECONNECT_CORE) << "Failed to open any MDNS client sockets"; + qWarning() << "Failed to open any client sockets"; return; } sendMulticastAnnounce(false);