aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-09-17 14:11:19 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-09-17 14:11:19 +0000
commitcf66b2ea25f6c2eb64a2c7e731e0eb4c8a904b09 (patch)
tree0c2216dad1865926d8463a73d9ed53f0102ebf02 /src
parent46163787fdd72552c2e1c60533f712e7feb135c3 (diff)
downloadqxmpp-cf66b2ea25f6c2eb64a2c7e731e0eb4c8a904b09.tar.gz
Start implementing DNS SRV lookups for Symbian. Not complete yet, but fixes build failure.
Diffstat (limited to 'src')
-rw-r--r--src/QXmppSrvInfo.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/QXmppSrvInfo.cpp b/src/QXmppSrvInfo.cpp
index 21a0a08a..6b746924 100644
--- a/src/QXmppSrvInfo.cpp
+++ b/src/QXmppSrvInfo.cpp
@@ -25,9 +25,11 @@
#include "QXmppSrvInfo.h"
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN)
#include <windows.h>
#include <windns.h>
+#elif defined(Q_OS_SYMBIAN)
+#include <dns_qry.h>
#else
#include <sys/types.h>
#include <netinet/in.h>
@@ -104,7 +106,7 @@ QXmppSrvInfo QXmppSrvInfo::fromName(const QString &dname)
{
QXmppSrvInfo result;
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN)
PDNS_RECORD records, ptr;
/* perform DNS query */
@@ -127,6 +129,35 @@ QXmppSrvInfo QXmppSrvInfo::fromName(const QString &dname)
}
DnsRecordListFree(records, DnsFreeRecordList);
+#elif defined(Q_OS_SYMBIAN)
+ RHostResolver dnsResolver;
+ RSocketServ dnsSocket;
+
+ /* initialise resolver */
+ TInt err = dnsSocket.Connect();
+ err = dnsResolver.Open(dnsSocket, KAfInet, KProtocolInetUdp);
+ if (err != KErrNone)
+ {
+ result.m_errorString = QLatin1String("RHostResolver::Open failed");
+ return result;
+ }
+
+ /* perform DNS query */
+ TDnsQueryBuf dnsQuery;
+ TDnsRespSRVBuf dnsResponse;
+ dnsQuery().SetClass(KDnsRRClassIN);
+ QByteArray utf8name = dname.toUtf8();
+ TPtrC8 queryPtr(reinterpret_cast<const TUint8*>(utf8name.constData()),utf8name.size());
+ dnsQuery().SetData(queryPtr);
+ dnsQuery().SetType(KDnsRRTypeSRV);
+ err = dnsResolver.Query(dnsQuery, dnsResponse);
+ if (err != KErrNone)
+ {
+ result.m_errorString = QLatin1String("RHostResolver::Query failed");
+ return result;
+ }
+
+ // TODO : extract results
#else
unsigned char response[PACKETSZ];
int responseLength, answerCount, answerIndex;