diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-17 14:11:19 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-17 14:11:19 +0000 |
| commit | cf66b2ea25f6c2eb64a2c7e731e0eb4c8a904b09 (patch) | |
| tree | 0c2216dad1865926d8463a73d9ed53f0102ebf02 /src | |
| parent | 46163787fdd72552c2e1c60533f712e7feb135c3 (diff) | |
| download | qxmpp-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.cpp | 35 |
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; |
