summaryrefslogtreecommitdiffstats
path: root/src/network/kernel/qdnslookup.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2023-05-16 16:38:58 -0700
committerThiago Macieira <thiago.macieira@intel.com>2023-05-23 21:23:45 -0700
commitecaf93c366f9009bcc2ba04700f16989c214677b (patch)
tree19ca5ab442bb28e8df36dbc9bdffe6c59ac58a39 /src/network/kernel/qdnslookup.cpp
parentf5b584022b9315f9de7a7df02c642ee3b396627c (diff)
QDnsLookup: centralize printing of warnings
Any resolution error that is caused by an invalid request, invalid reply (only happens on Unix), or a system error can be printed as a warning, using category "qt.network.dnslookup". Those warnings are disabled by default. Change-Id: I5f7f427ded124479baa6fffd175fc40b3e21c969 Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/network/kernel/qdnslookup.cpp')
-rw-r--r--src/network/kernel/qdnslookup.cpp51
1 files changed, 41 insertions, 10 deletions
diff --git a/src/network/kernel/qdnslookup.cpp b/src/network/kernel/qdnslookup.cpp
index f77d31a16f..3530279971 100644
--- a/src/network/kernel/qdnslookup.cpp
+++ b/src/network/kernel/qdnslookup.cpp
@@ -8,6 +8,7 @@
#include <qapplicationstatic.h>
#include <qcoreapplication.h>
#include <qdatetime.h>
+#include <qloggingcategory.h>
#include <qrandom.h>
#include <qurl.h>
@@ -15,6 +16,8 @@
QT_BEGIN_NAMESPACE
+static Q_LOGGING_CATEGORY(lcDnsLookup, "qt.network.dnslookup", QtCriticalMsg)
+
namespace {
struct QDnsLookupThreadPool : QThreadPool
{
@@ -544,6 +547,7 @@ void QDnsLookup::lookup()
d->isFinished = false;
d->reply = QDnsLookupReply();
if (!QCoreApplication::instance()) {
+ // NOT qCWarning because this isn't a result of the lookup
qWarning("QDnsLookup requires a QCoreApplication");
return;
}
@@ -1057,20 +1061,47 @@ void QDnsLookupRunnable::run()
if (qsizetype n = requestName.size(); n > MaxDomainNameLength || n == 0) {
reply.error = QDnsLookup::InvalidRequestError;
reply.errorString = QDnsLookup::tr("Invalid domain name");
- emit finished(reply);
- if (n)
- qWarning("QDnsLookup: domain name being looked up is too long (%lld bytes)", n);
- return;
+ } else {
+ // Perform request.
+ query(&reply);
+
+ // Sort results.
+ qt_qdnsmailexchangerecord_sort(reply.mailExchangeRecords);
+ qt_qdnsservicerecord_sort(reply.serviceRecords);
}
- // Perform request.
- query(&reply);
+ emit finished(reply);
- // Sort results.
- qt_qdnsmailexchangerecord_sort(reply.mailExchangeRecords);
- qt_qdnsservicerecord_sort(reply.serviceRecords);
+ // maybe print the lookup error as warning
+ switch (reply.error) {
+ case QDnsLookup::NoError:
+ case QDnsLookup::OperationCancelledError:
+ case QDnsLookup::NotFoundError:
+ case QDnsLookup::ServerFailureError:
+ case QDnsLookup::ServerRefusedError:
+ break; // no warning for these
+
+ case QDnsLookup::ResolverError:
+ case QDnsLookup::InvalidRequestError:
+ case QDnsLookup::InvalidReplyError:
+ qCWarning(lcDnsLookup()).nospace()
+ << "DNS lookup failed (" << reply.error << "): "
+ << qUtf16Printable(reply.errorString)
+ << "; request was " << this; // continues below
+ }
+}
- emit finished(reply);
+inline QDebug operator<<(QDebug &d, QDnsLookupRunnable *r)
+{
+ // continued: print the information about the request
+ d << r->requestName.left(MaxDomainNameLength);
+ if (r->requestName.size() > MaxDomainNameLength)
+ d << "... (truncated)";
+ d << " type " << r->requestType;
+ if (!r->nameserver.isNull())
+ d << " to nameserver " << qUtf16Printable(r->nameserver.toString())
+ << " port " << (r->port ? r->port : DnsPort);
+ return d;
}
QT_END_NAMESPACE