aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppOutgoingClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-01-31 09:18:46 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2012-01-31 09:18:46 +0000
commit29ddffd8818c2f566e24418ff91ea94d2a2c8e9d (patch)
tree82f202aef622c619fb32bb9a1abbd1c3ecfa213e /src/QXmppOutgoingClient.cpp
parent9ed7f845dd5f5cbf95135de24c465b08b709ca9f (diff)
downloadqxmpp-29ddffd8818c2f566e24418ff91ea94d2a2c8e9d.tar.gz
switch from QXmppSrvInfo to QDnsLookup
Diffstat (limited to 'src/QXmppOutgoingClient.cpp')
-rw-r--r--src/QXmppOutgoingClient.cpp38
1 files changed, 22 insertions, 16 deletions
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp
index 19f27708..985a3f3f 100644
--- a/src/QXmppOutgoingClient.cpp
+++ b/src/QXmppOutgoingClient.cpp
@@ -25,6 +25,7 @@
#include <QCryptographicHash>
#include <QSslSocket>
#include <QUrl>
+#include "qdnslookup.h"
#include "QXmppConfiguration.h"
#include "QXmppConstants.h"
@@ -34,7 +35,6 @@
#include "QXmppPacket.h"
#include "QXmppPresence.h"
#include "QXmppOutgoingClient.h"
-#include "QXmppSrvInfo.h"
#include "QXmppStreamFeatures.h"
#include "QXmppNonSASLAuth.h"
#include "QXmppSaslAuth.h"
@@ -66,6 +66,7 @@ public:
// State data
QString bindId;
+ QDnsLookup dns;
QString sessionId;
bool sessionAvailable;
bool sessionStarted;
@@ -102,10 +103,10 @@ QXmppOutgoingClient::QXmppOutgoingClient(QObject *parent)
bool check;
Q_UNUSED(check);
+ // initialise socket
QSslSocket *socket = new QSslSocket(this);
setSocket(socket);
- // initialise logger
check = connect(socket, SIGNAL(sslErrors(QList<QSslError>)),
this, SLOT(socketSslErrors(QList<QSslError>)));
Q_ASSERT(check);
@@ -114,6 +115,11 @@ QXmppOutgoingClient::QXmppOutgoingClient(QObject *parent)
this, SLOT(socketError(QAbstractSocket::SocketError)));
Q_ASSERT(check);
+ // DNS lookups
+ check = connect(&d->dns, SIGNAL(finished()),
+ this, SLOT(_q_dnsLookupFinished()));
+ Q_ASSERT(check);
+
// XEP-0199: XMPP Ping
d->pingTimer = new QTimer(this);
check = connect(d->pingTimer, SIGNAL(timeout()),
@@ -162,8 +168,7 @@ void QXmppOutgoingClient::connectToHost()
}
// if an explicit host was provided, connect to it
- if (!host.isEmpty() && port)
- {
+ if (!host.isEmpty() && port) {
info(QString("Connecting to %1:%2").arg(host, QString::number(port)));
socket()->setProxy(configuration().networkProxy());
socket()->connectToHost(host, port);
@@ -173,26 +178,27 @@ void QXmppOutgoingClient::connectToHost()
// otherwise, lookup server
const QString domain = configuration().domain();
debug(QString("Looking up server for domain %1").arg(domain));
- QXmppSrvInfo::lookupService("_xmpp-client._tcp." + domain, this,
- SLOT(connectToHost(QXmppSrvInfo)));
+ d->dns.setName("_xmpp-client._tcp." + domain);
+ d->dns.setType(QDnsLookup::SRV);
+ d->dns.lookup();
}
-void QXmppOutgoingClient::connectToHost(const QXmppSrvInfo &serviceInfo)
+void QXmppOutgoingClient::_q_dnsLookupFinished()
{
- const QString domain = configuration().domain();
- QString host = configuration().host();
- quint16 port = configuration().port();
+ QString host;
+ quint16 port;
- if (!serviceInfo.records().isEmpty())
- {
+ if (d->dns.error() == QDnsLookup::NoError &&
+ !d->dns.serviceRecords().isEmpty()) {
// take the first returned record
- host = serviceInfo.records().first().target();
- port = serviceInfo.records().first().port();
+ host = d->dns.serviceRecords().first().target();
+ port = d->dns.serviceRecords().first().port();
} else {
// as a fallback, use domain as the host name
warning(QString("Lookup for domain %1 failed: %2")
- .arg(domain, serviceInfo.errorString()));
- host = domain;
+ .arg(d->dns.name(), d->dns.errorString()));
+ host = configuration().domain();
+ port = configuration().port();
}
// connect to server