aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent9ed7f845dd5f5cbf95135de24c465b08b709ca9f (diff)
downloadqxmpp-29ddffd8818c2f566e24418ff91ea94d2a2c8e9d.tar.gz
switch from QXmppSrvInfo to QDnsLookup
Diffstat (limited to 'src')
-rw-r--r--src/QXmppOutgoingClient.cpp38
-rw-r--r--src/QXmppOutgoingClient.h3
-rw-r--r--src/QXmppOutgoingServer.cpp27
-rw-r--r--src/QXmppOutgoingServer.h3
4 files changed, 42 insertions, 29 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
diff --git a/src/QXmppOutgoingClient.h b/src/QXmppOutgoingClient.h
index d19c5080..4bb00d67 100644
--- a/src/QXmppOutgoingClient.h
+++ b/src/QXmppOutgoingClient.h
@@ -37,7 +37,6 @@ class QXmppConfiguration;
class QXmppPresence;
class QXmppIq;
class QXmppMessage;
-class QXmppSrvInfo;
class QXmppOutgoingClientPrivate;
@@ -86,7 +85,7 @@ protected:
/// \endcond
private slots:
- void connectToHost(const QXmppSrvInfo &serviceInfo);
+ void _q_dnsLookupFinished();
void socketError(QAbstractSocket::SocketError);
void socketSslErrors(const QList<QSslError>&);
diff --git a/src/QXmppOutgoingServer.cpp b/src/QXmppOutgoingServer.cpp
index 0845c6d4..e980c27e 100644
--- a/src/QXmppOutgoingServer.cpp
+++ b/src/QXmppOutgoingServer.cpp
@@ -25,11 +25,11 @@
#include <QSslKey>
#include <QSslSocket>
#include <QTimer>
+#include "qdnslookup.h"
#include "QXmppConstants.h"
#include "QXmppDialback.h"
#include "QXmppOutgoingServer.h"
-#include "QXmppSrvInfo.h"
#include "QXmppStreamFeatures.h"
#include "QXmppUtils.h"
@@ -37,6 +37,7 @@ class QXmppOutgoingServerPrivate
{
public:
QList<QByteArray> dataQueue;
+ QDnsLookup dns;
QString localDomain;
QString localStreamKey;
QString remoteDomain;
@@ -59,6 +60,7 @@ QXmppOutgoingServer::QXmppOutgoingServer(const QString &domain, QObject *parent)
bool check;
Q_UNUSED(check);
+ // socket initialisation
QSslSocket *socket = new QSslSocket(this);
setSocket(socket);
@@ -66,6 +68,11 @@ QXmppOutgoingServer::QXmppOutgoingServer(const QString &domain, 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);
+
d->dialbackTimer = new QTimer(this);
d->dialbackTimer->setInterval(5000);
d->dialbackTimer->setSingleShot(true);
@@ -99,23 +106,25 @@ void QXmppOutgoingServer::connectToHost(const QString &domain)
// lookup server for domain
debug(QString("Looking up server for domain %1").arg(domain));
- QXmppSrvInfo::lookupService("_xmpp-server._tcp." + domain, this,
- SLOT(connectToHost(QXmppSrvInfo)));
+ d->dns.setName("_xmpp-server._tcp." + domain);
+ d->dns.setType(QDnsLookup::SRV);
+ d->dns.lookup();
}
-void QXmppOutgoingServer::connectToHost(const QXmppSrvInfo &serviceInfo)
+void QXmppOutgoingServer::_q_dnsLookupFinished()
{
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(d->remoteDomain, serviceInfo.errorString()));
+ warning(QString("Lookup for domain %1 failed: %2")
+ .arg(d->dns.name(), d->dns.errorString()));
host = d->remoteDomain;
port = 5269;
}
diff --git a/src/QXmppOutgoingServer.h b/src/QXmppOutgoingServer.h
index a8141a6a..4e117c0e 100644
--- a/src/QXmppOutgoingServer.h
+++ b/src/QXmppOutgoingServer.h
@@ -32,7 +32,6 @@ class QSslError;
class QXmppDialback;
class QXmppOutgoingServer;
class QXmppOutgoingServerPrivate;
-class QXmppSrvInfo;
/// \brief The QXmppOutgoingServer class represents an outgoing XMPP stream
/// to another XMPP server.
@@ -70,7 +69,7 @@ public slots:
void queueData(const QByteArray &data);
private slots:
- void connectToHost(const QXmppSrvInfo &serviceInfo);
+ void _q_dnsLookupFinished();
void sendDialback();
void slotSslErrors(const QList<QSslError> &errors);
void socketError(QAbstractSocket::SocketError error);