aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-01 13:36:05 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-01 13:36:05 +0000
commit107ef82269aed199b0cf4bb5cc9ff4c7e49fd0aa (patch)
tree551e62e8e8d7c0103b178bc610562f1ade89f1ec /src
parenta32b43697366723348e77858c5efb7437171a34d (diff)
downloadqxmpp-107ef82269aed199b0cf4bb5cc9ff4c7e49fd0aa.tar.gz
API change
Diffstat (limited to 'src')
-rw-r--r--src/QXmppOutgoingClient.cpp4
-rw-r--r--src/QXmppOutgoingServer.cpp4
-rw-r--r--src/QXmppSrvLookup.cpp50
-rw-r--r--src/QXmppSrvLookup.h7
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;