summaryrefslogtreecommitdiffstats
path: root/tests/manual/qdnslookup/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/qdnslookup/main.cpp')
-rw-r--r--tests/manual/qdnslookup/main.cpp68
1 files changed, 59 insertions, 9 deletions
diff --git a/tests/manual/qdnslookup/main.cpp b/tests/manual/qdnslookup/main.cpp
index a07eac6d45..41dda45b8f 100644
--- a/tests/manual/qdnslookup/main.cpp
+++ b/tests/manual/qdnslookup/main.cpp
@@ -11,6 +11,11 @@
#include <QtNetwork/QHostInfo>
#include <QtNetwork/QDnsLookup>
+#if QT_CONFIG(ssl)
+# include <QtNetwork/QSslCipher>
+# include <QtNetwork/QSslConfiguration>
+#endif
+
#include <stdlib.h>
#include <stdio.h>
@@ -32,6 +37,20 @@ static QDnsLookup::Type typeFromString(QString str)
return QDnsLookup::Type(value);
}
+template <typename Enum> QByteArray enumToString(Enum value)
+{
+ QMetaEnum me = QMetaEnum::fromType<Enum>();
+ QByteArray keys = me.valueToKeys(int(value));
+ if (keys.isEmpty())
+ return QByteArrayLiteral("<unknown>");
+
+ // return the last one
+ qsizetype idx = keys.lastIndexOf('|');
+ if (idx > 0)
+ return std::move(keys).sliced(idx + 1);
+ return keys;
+}
+
static int showHelp(const char *argv0, int exitcode)
{
// like dig
@@ -43,7 +62,7 @@ static auto parseServerAddress(QString server)
{
struct R {
QHostAddress address;
- int port = -1;
+ int port;
} r;
// let's use QUrl to help us
@@ -52,7 +71,7 @@ static auto parseServerAddress(QString server)
if (!url.isValid() || !url.userInfo().isNull())
return r; // failed
- r.port = url.port();
+ r.port = url.port(0);
r.address.setAddress(url.host());
if (r.address.isNull()) {
// try to resolve a hostname
@@ -102,15 +121,26 @@ static void printAnswers(const QDnsLookup &lookup)
printf("%s ", qPrintable(QDebug::toString(data)));
puts("");
}
+
+ for (const QDnsTlsAssociationRecord &rr : lookup.tlsAssociationRecords()) {
+ printRecordCommon(rr, "TLSA");
+ printf("( %u %u %u ; %s %s %s\n\t%s )\n", quint8(rr.usage()), quint8(rr.selector()),
+ quint8(rr.matchType()), enumToString(rr.usage()).constData(),
+ enumToString(rr.selector()).constData(), enumToString(rr.matchType()).constData(),
+ rr.value().toHex().toUpper().constData());
+ }
}
static void printResults(const QDnsLookup &lookup, QElapsedTimer::Duration duration)
{
if (QDnsLookup::Error error = lookup.error())
- printf(";; status: %s (%s)\n", QMetaEnum::fromType<QDnsLookup::Error>().valueToKey(error),
+ printf(";; status: %s (%s)", QMetaEnum::fromType<QDnsLookup::Error>().valueToKey(error),
qPrintable(lookup.errorString()));
else
- printf(";; status: NoError\n");
+ printf(";; status: NoError");
+ if (lookup.isAuthenticData())
+ printf("; AuthenticData");
+ puts("");
QMetaEnum me = QMetaEnum::fromType<QDnsLookup::Type>();
printf(";; QUESTION:\n");
@@ -121,8 +151,21 @@ static void printResults(const QDnsLookup &lookup, QElapsedTimer::Duration durat
printAnswers(lookup);
printf("\n;; Query time: %lld ms\n", qint64(duration_cast<milliseconds>(duration).count()));
- if (QHostAddress server = lookup.nameserver(); !server.isNull())
- printf(";; SERVER: %s#%d\n", qPrintable(server.toString()), lookup.nameserverPort());
+ if (QHostAddress server = lookup.nameserver(); !server.isNull()) {
+ quint16 port = lookup.nameserverPort();
+ if (port == 0)
+ port = QDnsLookup::defaultPortForProtocol(lookup.nameserverProtocol());
+ printf(";; SERVER: %s#%d", qPrintable(server.toString()), port);
+#if QT_CONFIG(ssl)
+ if (lookup.nameserverProtocol() != QDnsLookup::Standard) {
+ if (QSslConfiguration conf = lookup.sslConfiguration(); !conf.isNull()) {
+ printf(" (%s %s)", enumToString(conf.sessionProtocol()).constData(),
+ qPrintable(conf.sessionCipher().name()));
+ }
+ }
+#endif
+ puts("");
+ }
}
int main(int argc, char *argv[])
@@ -130,6 +173,7 @@ int main(int argc, char *argv[])
QCoreApplication a(argc, argv);
QDnsLookup::Type type = {};
+ QDnsLookup::Protocol protocol = QDnsLookup::Standard;
QString domain, server;
const QStringList args = QCoreApplication::arguments().sliced(1);
for (const QString &arg : args) {
@@ -139,6 +183,14 @@ int main(int argc, char *argv[])
}
if (arg == u"-h")
return showHelp(argv[0], EXIT_SUCCESS);
+ if (arg == "+tls") {
+ protocol = QDnsLookup::DnsOverTls;
+ continue;
+ } else if (arg == "+notls") {
+ protocol = QDnsLookup::Standard;
+ continue;
+ }
+
if (domain.isNull()) {
domain = arg;
continue;
@@ -170,9 +222,7 @@ int main(int argc, char *argv[])
argv[0], qPrintable(server));
return EXIT_FAILURE;
}
- lookup.setNameserver(addr.address);
- if (addr.port > 0)
- lookup.setNameserverPort(addr.port);
+ lookup.setNameserver(protocol, addr.address, addr.port);
}
// execute the lookup