diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-01 13:36:05 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-01 13:36:05 +0000 |
| commit | 107ef82269aed199b0cf4bb5cc9ff4c7e49fd0aa (patch) | |
| tree | 551e62e8e8d7c0103b178bc610562f1ade89f1ec /src | |
| parent | a32b43697366723348e77858c5efb7437171a34d (diff) | |
| download | qxmpp-107ef82269aed199b0cf4bb5cc9ff4c7e49fd0aa.tar.gz | |
API change
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppOutgoingClient.cpp | 4 | ||||
| -rw-r--r-- | src/QXmppOutgoingServer.cpp | 4 | ||||
| -rw-r--r-- | src/QXmppSrvLookup.cpp | 50 | ||||
| -rw-r--r-- | src/QXmppSrvLookup.h | 7 |
4 files changed, 38 insertions, 27 deletions
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp index 2baaa940..0131b9a2 100644 --- a/src/QXmppOutgoingClient.cpp +++ b/src/QXmppOutgoingClient.cpp @@ -161,8 +161,8 @@ void QXmppOutgoingClient::connectToHost() if (host.isEmpty() || !port) { debug(QString("Looking up server for domain %1").arg(domain)); - QXmppSrvLookup srvLookup = QXmppSrvLookup::fromName("_xmpp-client._tcp." + domain); - if (!srvLookup.records().isEmpty()) + QXmppSrvLookup srvLookup; + if (srvLookup.fromNameC2S(domain)) { // take the first returned record host = srvLookup.records().first().hostName(); diff --git a/src/QXmppOutgoingServer.cpp b/src/QXmppOutgoingServer.cpp index e66397ad..cb93434d 100644 --- a/src/QXmppOutgoingServer.cpp +++ b/src/QXmppOutgoingServer.cpp @@ -82,8 +82,8 @@ void QXmppOutgoingServer::connectToHost(const QString &domain) // lookup server for domain debug(QString("Looking up server for domain %1").arg(domain)); - QXmppSrvLookup srvLookup = QXmppSrvLookup::fromName("_xmpp-server._tcp." + domain); - if (!srvLookup.records().isEmpty()) + QXmppSrvLookup srvLookup; + if (srvLookup.fromNameS2S(domain)) { // take the first returned record host = srvLookup.records().first().hostName(); diff --git a/src/QXmppSrvLookup.cpp b/src/QXmppSrvLookup.cpp index 68b19595..75a566fe 100644 --- a/src/QXmppSrvLookup.cpp +++ b/src/QXmppSrvLookup.cpp @@ -37,6 +37,9 @@ #include <resolv.h> #endif +const QString QXmppSrvLookup::c2sPrefix = "_xmpp-client._tcp."; +const QString QXmppSrvLookup::s2sPrefix = "_xmpp-server._tcp."; + /// Constructs an empty service record object. /// @@ -94,24 +97,27 @@ QList<QXmppSrvLookup::SrvRecord> QXmppSrvLookup::records() const return m_records; } -/// Perform a DNS lookup for an SRV entry. -/// -/// Returns a QXmppSrvLookup object containing the found records. -/// -/// \param dname +bool QXmppSrvLookup::fromNameC2S(const QString &domain) +{ + return fromName(c2sPrefix+domain); +} -QXmppSrvLookup QXmppSrvLookup::fromName(const QString &dname) +bool QXmppSrvLookup::fromNameS2S(const QString &domain) { - QXmppSrvLookup result; + return fromName(s2sPrefix+domain); +} +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) { - result.m_errorString = QLatin1String("DnsQuery_UTF8 failed"); - return result; + m_errorString = QLatin1String("DnsQuery_UTF8 failed"); + return false; } /* extract results */ @@ -122,7 +128,7 @@ QXmppSrvLookup QXmppSrvLookup::fromName(const QString &dname) QXmppSrvLookup::SrvRecord record; record.setHostName(QString::fromUtf8((char*)ptr->Data.Srv.pNameTarget)); record.setPort(ptr->Data.Srv.wPort); - result.m_records.append(record); + m_records.append(record); } } @@ -139,16 +145,16 @@ QXmppSrvLookup QXmppSrvLookup::fromName(const QString &dname) responseLength = res_query(dname.toAscii(), C_IN, T_SRV, response, sizeof(response)); if (responseLength < int(sizeof(HEADER))) { - result.m_errorString = QString("res_query failed: %1").arg(hstrerror(h_errno)); - return result; + m_errorString = QString("res_query failed: %1").arg(hstrerror(h_errno)); + return false; } /* check the response header */ HEADER *header = (HEADER*)response; if (header->rcode != NOERROR || !(answerCount = ntohs(header->ancount))) { - result.m_errorString = QLatin1String("res_query returned an error"); - return result; + m_errorString = QLatin1String("res_query returned an error"); + return false; } /* skip the query */ @@ -157,8 +163,8 @@ QXmppSrvLookup QXmppSrvLookup::fromName(const QString &dname) int status = dn_expand(response, response + responseLength, p, host, sizeof(host)); if (status < 0) { - result.m_errorString = QLatin1String("dn_expand failed"); - return result; + m_errorString = QLatin1String("dn_expand failed"); + return false; } p += status + 4; @@ -170,8 +176,8 @@ QXmppSrvLookup QXmppSrvLookup::fromName(const QString &dname) status = dn_expand(response, response + responseLength, p, host, sizeof(host)); if (status < 0) { - result.m_errorString = QLatin1String("dn_expand failed"); - return result; + m_errorString = QLatin1String("dn_expand failed"); + return false; } p += status; @@ -190,13 +196,13 @@ QXmppSrvLookup QXmppSrvLookup::fromName(const QString &dname) status = dn_expand(response, response + responseLength, p + 6, answer, sizeof(answer)); if (status < 0) { - result.m_errorString = QLatin1String("dn_expand failed"); - return result; + m_errorString = QLatin1String("dn_expand failed"); + return false; } QXmppSrvLookup::SrvRecord record; record.setHostName(answer); record.setPort(port); - result.m_records.append(record); + m_records.append(record); } else { qWarning("Unexpected DNS answer type"); } @@ -204,5 +210,5 @@ QXmppSrvLookup QXmppSrvLookup::fromName(const QString &dname) answerIndex++; } #endif - return result; + return true; } diff --git a/src/QXmppSrvLookup.h b/src/QXmppSrvLookup.h index 3e4d98d6..601f3278 100644 --- a/src/QXmppSrvLookup.h +++ b/src/QXmppSrvLookup.h @@ -33,6 +33,9 @@ class QXmppSrvLookup { public: + static const QString c2sPrefix; + static const QString s2sPrefix; + /// \brief Represents a DNS SRV record /// class SrvRecord @@ -54,7 +57,9 @@ public: QString errorString() const; QList<QXmppSrvLookup::SrvRecord> records() const; - static QXmppSrvLookup fromName(const QString &dname); + bool fromName(const QString &name); + bool fromNameC2S(const QString &domain); + bool fromNameS2S(const QString &domain); private: QString m_errorString; |
