From cf66b2ea25f6c2eb64a2c7e731e0eb4c8a904b09 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Fri, 17 Sep 2010 14:11:19 +0000 Subject: Start implementing DNS SRV lookups for Symbian. Not complete yet, but fixes build failure. --- src/QXmppSrvInfo.cpp | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'src/QXmppSrvInfo.cpp') 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 #include +#elif defined(Q_OS_SYMBIAN) +#include #else #include #include @@ -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(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; -- cgit v1.2.3