diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-03 09:37:49 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-03 09:37:49 +0000 |
| commit | 6aa29f3cf73b93797076b5bec4a220c08dc765fb (patch) | |
| tree | 1f1f34b5a70546596a29361d88fd5d3ba6faf353 /src | |
| parent | 00795301d517e9084f8f9f75b1c271d2da8cc865 (diff) | |
| download | qxmpp-6aa29f3cf73b93797076b5bec4a220c08dc765fb.tar.gz | |
rename QXmppSrvLookup to QXmppSrvInfo, and restore previous API
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppOutgoingClient.cpp | 12 | ||||
| -rw-r--r-- | src/QXmppOutgoingServer.cpp | 12 | ||||
| -rw-r--r-- | src/QXmppSrvInfo.cpp (renamed from src/QXmppSrvLookup.cpp) | 73 | ||||
| -rw-r--r-- | src/QXmppSrvInfo.h (renamed from src/QXmppSrvLookup.h) | 49 | ||||
| -rw-r--r-- | src/src.pro | 4 |
5 files changed, 69 insertions, 81 deletions
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp index 0131b9a2..17a90060 100644 --- a/src/QXmppOutgoingClient.cpp +++ b/src/QXmppOutgoingClient.cpp @@ -32,7 +32,7 @@ #include "QXmppPacket.h" #include "QXmppPresence.h" #include "QXmppOutgoingClient.h" -#include "QXmppSrvLookup.h" +#include "QXmppSrvInfo.h" #include "QXmppStreamFeatures.h" #include "QXmppNonSASLAuth.h" #include "QXmppSaslAuth.h" @@ -161,15 +161,15 @@ void QXmppOutgoingClient::connectToHost() if (host.isEmpty() || !port) { debug(QString("Looking up server for domain %1").arg(domain)); - QXmppSrvLookup srvLookup; - if (srvLookup.fromNameC2S(domain)) + QXmppSrvInfo serviceInfo = QXmppSrvInfo::fromName("_xmpp-client._tcp." + domain); + if (!serviceInfo.records().isEmpty()) { // take the first returned record - host = srvLookup.records().first().hostName(); - port = srvLookup.records().first().port(); + host = serviceInfo.records().first().hostName(); + port = serviceInfo.records().first().port(); } else { // as a fallback, use domain as the host name - warning(QString("Lookup for domain %1 failed: %2").arg(domain, srvLookup.errorString())); + warning(QString("Lookup for domain %1 failed: %2").arg(domain, serviceInfo.errorString())); host = domain; } } diff --git a/src/QXmppOutgoingServer.cpp b/src/QXmppOutgoingServer.cpp index cb93434d..30d366f0 100644 --- a/src/QXmppOutgoingServer.cpp +++ b/src/QXmppOutgoingServer.cpp @@ -28,7 +28,7 @@ #include "QXmppConstants.h" #include "QXmppDialback.h" #include "QXmppOutgoingServer.h" -#include "QXmppSrvLookup.h" +#include "QXmppSrvInfo.h" #include "QXmppStreamFeatures.h" #include "QXmppUtils.h" @@ -82,15 +82,15 @@ void QXmppOutgoingServer::connectToHost(const QString &domain) // lookup server for domain debug(QString("Looking up server for domain %1").arg(domain)); - QXmppSrvLookup srvLookup; - if (srvLookup.fromNameS2S(domain)) + QXmppSrvInfo serviceInfo = QXmppSrvInfo::fromName("_xmpp-server._tcp." + domain); + if (!serviceInfo.records().isEmpty()) { // take the first returned record - host = srvLookup.records().first().hostName(); - port = srvLookup.records().first().port(); + host = serviceInfo.records().first().hostName(); + port = serviceInfo.records().first().port(); } else { // as a fallback, use domain as the host name - warning(QString("Lookup for domain %1 failed: %2").arg(domain, srvLookup.errorString())); + warning(QString("Lookup for domain %1 failed: %2").arg(domain, serviceInfo.errorString())); host = domain; port = 5269; } diff --git a/src/QXmppSrvLookup.cpp b/src/QXmppSrvInfo.cpp index 58f20df9..21a0a08a 100644 --- a/src/QXmppSrvLookup.cpp +++ b/src/QXmppSrvInfo.cpp @@ -1,9 +1,8 @@ /* * Copyright (C) 2008-2010 The QXmpp developers * - * Authors: + * Author: * Jeremy Lainé - * Manjeet Dahiya * * Source: * http://code.google.com/p/qxmpp @@ -24,7 +23,7 @@ #include <QDebug> -#include "QXmppSrvLookup.h" +#include "QXmppSrvInfo.h" #ifdef Q_OS_WIN #include <windows.h> @@ -38,13 +37,10 @@ #include <resolv.h> #endif -const QString QXmppSrvLookup::c2sPrefix = "_xmpp-client._tcp."; -const QString QXmppSrvLookup::s2sPrefix = "_xmpp-server._tcp."; - /// Constructs an empty service record object. /// -QXmppSrvLookup::SrvRecord::SrvRecord() +QXmppSrvRecord::QXmppSrvRecord() : host_port(0) { } @@ -52,7 +48,7 @@ QXmppSrvLookup::SrvRecord::SrvRecord() /// Returns host name for this service record. /// -QString QXmppSrvLookup::SrvRecord::hostName() const +QString QXmppSrvRecord::hostName() const { return host_name; } @@ -61,7 +57,7 @@ QString QXmppSrvLookup::SrvRecord::hostName() const /// /// \param hostName -void QXmppSrvLookup::SrvRecord::setHostName(const QString &hostName) +void QXmppSrvRecord::setHostName(const QString &hostName) { host_name = hostName; } @@ -69,7 +65,7 @@ void QXmppSrvLookup::SrvRecord::setHostName(const QString &hostName) /// Returns the port for this service record. /// -quint16 QXmppSrvLookup::SrvRecord::port() const +quint16 QXmppSrvRecord::port() const { return host_port; } @@ -78,7 +74,7 @@ quint16 QXmppSrvLookup::SrvRecord::port() const /// /// \param port -void QXmppSrvLookup::SrvRecord::setPort(quint16 port) +void QXmppSrvRecord::setPort(quint16 port) { host_port = port; } @@ -86,39 +82,36 @@ void QXmppSrvLookup::SrvRecord::setPort(quint16 port) /// If the lookup failed, this function returns a human readable description of the error. /// -QString QXmppSrvLookup::errorString() const +QString QXmppSrvInfo::errorString() const { return m_errorString; } /// Returns the list of records associated with this service. /// -QList<QXmppSrvLookup::SrvRecord> QXmppSrvLookup::records() const +QList<QXmppSrvRecord> QXmppSrvInfo::records() const { return m_records; } -bool QXmppSrvLookup::fromNameC2S(const QString &domain) -{ - return fromName(c2sPrefix+domain); -} +/// Perform a DNS lookup for an SRV entry. +/// +/// Returns a QXmppSrvInfo object containing the found records. +/// +/// \param dname -bool QXmppSrvLookup::fromNameS2S(const QString &domain) +QXmppSrvInfo QXmppSrvInfo::fromName(const QString &dname) { - return fromName(s2sPrefix+domain); -} + QXmppSrvInfo result; -bool QXmppSrvLookup::fromName(const QString &dname) -{ - m_errorString.clear(); #ifdef Q_OS_WIN PDNS_RECORD records, ptr; /* perform DNS query */ if (DnsQuery_UTF8(dname.toUtf8(), DNS_TYPE_SRV, DNS_QUERY_STANDARD, NULL, &records, NULL) != ERROR_SUCCESS) { - m_errorString = QLatin1String("DnsQuery_UTF8 failed"); - return false; + result.m_errorString = QLatin1String("DnsQuery_UTF8 failed"); + return result; } /* extract results */ @@ -126,10 +119,10 @@ bool QXmppSrvLookup::fromName(const QString &dname) { if ((ptr->wType == DNS_TYPE_SRV) && !strcmp((char*)ptr->pName, dname.toUtf8())) { - QXmppSrvLookup::SrvRecord record; + QXmppSrvRecord record; record.setHostName(QString::fromUtf8((char*)ptr->Data.Srv.pNameTarget)); record.setPort(ptr->Data.Srv.wPort); - m_records.append(record); + result.m_records.append(record); } } @@ -146,16 +139,16 @@ bool QXmppSrvLookup::fromName(const QString &dname) responseLength = res_query(dname.toAscii(), C_IN, T_SRV, response, sizeof(response)); if (responseLength < int(sizeof(HEADER))) { - m_errorString = QString("res_query failed: %1").arg(hstrerror(h_errno)); - return false; + result.m_errorString = QString("res_query failed: %1").arg(hstrerror(h_errno)); + return result; } /* check the response header */ HEADER *header = (HEADER*)response; if (header->rcode != NOERROR || !(answerCount = ntohs(header->ancount))) { - m_errorString = QLatin1String("res_query returned an error"); - return false; + result.m_errorString = QLatin1String("res_query returned an error"); + return result; } /* skip the query */ @@ -164,8 +157,8 @@ bool QXmppSrvLookup::fromName(const QString &dname) int status = dn_expand(response, response + responseLength, p, host, sizeof(host)); if (status < 0) { - m_errorString = QLatin1String("dn_expand failed"); - return false; + result.m_errorString = QLatin1String("dn_expand failed"); + return result; } p += status + 4; @@ -177,8 +170,8 @@ bool QXmppSrvLookup::fromName(const QString &dname) status = dn_expand(response, response + responseLength, p, host, sizeof(host)); if (status < 0) { - m_errorString = QLatin1String("dn_expand failed"); - return false; + result.m_errorString = QLatin1String("dn_expand failed"); + return result; } p += status; @@ -197,13 +190,13 @@ bool QXmppSrvLookup::fromName(const QString &dname) status = dn_expand(response, response + responseLength, p + 6, answer, sizeof(answer)); if (status < 0) { - m_errorString = QLatin1String("dn_expand failed"); - return false; + result.m_errorString = QLatin1String("dn_expand failed"); + return result; } - QXmppSrvLookup::SrvRecord record; + QXmppSrvRecord record; record.setHostName(answer); record.setPort(port); - m_records.append(record); + result.m_records.append(record); } else { qWarning("Unexpected DNS answer type"); } @@ -211,5 +204,5 @@ bool QXmppSrvLookup::fromName(const QString &dname) answerIndex++; } #endif - return true; + return result; } diff --git a/src/QXmppSrvLookup.h b/src/QXmppSrvInfo.h index 9cac4f83..3c36867a 100644 --- a/src/QXmppSrvLookup.h +++ b/src/QXmppSrvInfo.h @@ -1,9 +1,8 @@ /* * Copyright (C) 2008-2010 The QXmpp developers * - * Authors: + * Author: * Jeremy Lainé - * Manjeet Dahiya * * Source: * http://code.google.com/p/qxmpp @@ -22,49 +21,45 @@ * */ -#ifndef QXMPPSRVLOOKUP_H -#define QXMPPSRVLOOKUP_H +#ifndef QXMPPSRVINFO_H +#define QXMPPSRVINFO_H #include <QList> #include <QString> -/// \brief The QXmppSrvLookup class provides static methods for DNS SRV lookups. +/// \brief The QXmppSrvRecord class represents a DNS SRV record. /// -class QXmppSrvLookup +class QXmppSrvRecord { public: - static const QString c2sPrefix; - static const QString s2sPrefix; + QXmppSrvRecord(); - /// \brief Represents a DNS SRV record - /// - class SrvRecord - { - public: - SrvRecord(); + QString hostName() const; + void setHostName(const QString &hostName); - QString hostName() const; - void setHostName(const QString &hostName); + quint16 port() const; + void setPort(quint16 port); - quint16 port() const; - void setPort(quint16 port); +private: + QString host_name; + quint16 host_port; +}; - private: - QString host_name; - quint16 host_port; - }; +/// \brief The QXmppSrvInfo class provides static methods for DNS SRV lookups. +/// +class QXmppSrvInfo +{ +public: QString errorString() const; - QList<QXmppSrvLookup::SrvRecord> records() const; + QList<QXmppSrvRecord> records() const; - bool fromName(const QString &name); - bool fromNameC2S(const QString &domain); - bool fromNameS2S(const QString &domain); + static QXmppSrvInfo fromName(const QString &dname); private: QString m_errorString; - QList<QXmppSrvLookup::SrvRecord> m_records; + QList<QXmppSrvRecord> m_records; }; #endif diff --git a/src/src.pro b/src/src.pro index 71872400..f369be40 100644 --- a/src/src.pro +++ b/src/src.pro @@ -66,7 +66,7 @@ INSTALL_HEADERS = QXmppUtils.h \ QXmppServer.h \ QXmppServerExtension.h \ QXmppServerPlugin.h \ - QXmppSrvLookup.h \ + QXmppSrvInfo.h \ QXmppSessionIq.h \ QXmppSocks.h \ QXmppStanza.h \ @@ -120,7 +120,7 @@ SOURCES += QXmppUtils.cpp \ QXmppSaslAuth.cpp \ QXmppServer.cpp \ QXmppServerExtension.cpp \ - QXmppSrvLookup.cpp \ + QXmppSrvInfo.cpp \ QXmppSessionIq.cpp \ QXmppSocks.cpp \ QXmppStanza.cpp \ |
