diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-01-31 09:18:46 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-01-31 09:18:46 +0000 |
| commit | 29ddffd8818c2f566e24418ff91ea94d2a2c8e9d (patch) | |
| tree | 82f202aef622c619fb32bb9a1abbd1c3ecfa213e /src | |
| parent | 9ed7f845dd5f5cbf95135de24c465b08b709ca9f (diff) | |
| download | qxmpp-29ddffd8818c2f566e24418ff91ea94d2a2c8e9d.tar.gz | |
switch from QXmppSrvInfo to QDnsLookup
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppOutgoingClient.cpp | 38 | ||||
| -rw-r--r-- | src/QXmppOutgoingClient.h | 3 | ||||
| -rw-r--r-- | src/QXmppOutgoingServer.cpp | 27 | ||||
| -rw-r--r-- | src/QXmppOutgoingServer.h | 3 |
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); |
