aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-09-03 09:37:49 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-09-03 09:37:49 +0000
commit6aa29f3cf73b93797076b5bec4a220c08dc765fb (patch)
tree1f1f34b5a70546596a29361d88fd5d3ba6faf353 /src
parent00795301d517e9084f8f9f75b1c271d2da8cc865 (diff)
downloadqxmpp-6aa29f3cf73b93797076b5bec4a220c08dc765fb.tar.gz
rename QXmppSrvLookup to QXmppSrvInfo, and restore previous API
Diffstat (limited to 'src')
-rw-r--r--src/QXmppOutgoingClient.cpp12
-rw-r--r--src/QXmppOutgoingServer.cpp12
-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.pro4
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 \