summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
authorShane Kearns <shane.kearns@accenture.com>2011-03-21 18:53:42 (GMT)
committerShane Kearns <shane.kearns@accenture.com>2011-03-22 10:11:34 (GMT)
commit40fc1a3ca3b7050f317513cf69dd89a01479e098 (patch)
tree2fdfe24c95445d1cda24aed56b6690b35c726401 /src/network
parent67c6737c6702506b5b09fd84389e20ba539cc000 (diff)
downloadQt-40fc1a3ca3b7050f317513cf69dd89a01479e098.zip
Qt-40fc1a3ca3b7050f317513cf69dd89a01479e098.tar.gz
Qt-40fc1a3ca3b7050f317513cf69dd89a01479e098.tar.bz2
Implement network session support for synchronous QHostInfo
Private API, QHostInfoPrivate::fromName, which is called from QAbstractSocket when the network session property is set. Reviewed-by: Markus Goetz
Diffstat (limited to 'src/network')
-rw-r--r--src/network/kernel/qhostinfo.cpp14
-rw-r--r--src/network/kernel/qhostinfo_p.h5
-rw-r--r--src/network/kernel/qhostinfo_symbian.cpp15
-rw-r--r--src/network/socket/qabstractsocket.cpp9
4 files changed, 33 insertions, 10 deletions
diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp
index 1ae0bbd..aff55d9 100644
--- a/src/network/kernel/qhostinfo.cpp
+++ b/src/network/kernel/qhostinfo.cpp
@@ -272,6 +272,20 @@ QHostInfo QHostInfo::fromName(const QString &name)
return hostInfo;
}
+#ifndef QT_NO_BEARERMANAGEMENT
+QHostInfo QHostInfoPrivate::fromName(const QString &name, QSharedPointer<QNetworkSession> session)
+{
+#if defined QHOSTINFO_DEBUG
+ qDebug("QHostInfoPrivate::fromName(\"%s\") with session %p",name.toLatin1().constData(), session.data());
+#endif
+
+ QHostInfo hostInfo = QHostInfoAgent::fromName(name, session);
+ QAbstractHostInfoLookupManger* manager = theHostInfoLookupManager();
+ manager->cache.put(name, hostInfo);
+ return hostInfo;
+}
+#endif
+
/*!
\enum QHostInfo::HostInfoError
diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h
index e3f7f19..a40104a 100644
--- a/src/network/kernel/qhostinfo_p.h
+++ b/src/network/kernel/qhostinfo_p.h
@@ -70,6 +70,7 @@
#include <QCache>
#include <QNetworkSession>
+#include <QSharedPointer>
#ifdef Q_OS_SYMBIAN
// Symbian Headers
@@ -117,6 +118,10 @@ public:
lookupId(0)
{
}
+#ifndef QT_NO_BEARERMANAGEMENT
+ //not a public API yet
+ static QHostInfo fromName(const QString &hostName, QSharedPointer<QNetworkSession> networkSession);
+#endif
QHostInfo::HostInfoError err;
QString errorStr;
diff --git a/src/network/kernel/qhostinfo_symbian.cpp b/src/network/kernel/qhostinfo_symbian.cpp
index 347bf67..65c3d62 100644
--- a/src/network/kernel/qhostinfo_symbian.cpp
+++ b/src/network/kernel/qhostinfo_symbian.cpp
@@ -66,16 +66,11 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName, QSharedPointer<QNetw
RHostResolver hostResolver;
- // TODO - check if networkSession is null
- // RConnection connection = magicalApi(networkSession);
- // int err = connection.Open(blah, blah);
- // if (err) {
- // do something;
- // }
-
- // Will return both IPv4 and IPv6
- // TODO: Pass RHostResolver.Open() the global RConnection
- int err = hostResolver.Open(socketServ, KAfInet, KProtocolInetUdp);
+ int err;
+ if (networkSession)
+ err = QNetworkSessionPrivate::nativeOpenHostResolver(*networkSession, hostResolver, KAfInet, KProtocolInetUdp);
+ else
+ err = hostResolver.Open(socketServ, KAfInet, KProtocolInetUdp);
if (err) {
results.setError(QHostInfo::UnknownError);
results.setErrorString(QSystemError(err,QSystemError::NativeError).toString());
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp
index 020de42..801556e 100644
--- a/src/network/socket/qabstractsocket.cpp
+++ b/src/network/socket/qabstractsocket.cpp
@@ -367,6 +367,7 @@
#include "qabstractsocket_p.h"
#include "private/qhostinfo_p.h"
+#include "private/qnetworksession_p.h"
#include <qabstracteventdispatcher.h>
#include <qhostaddress.h>
@@ -1786,6 +1787,14 @@ bool QAbstractSocket::waitForConnected(int msecs)
#endif
QHostInfo::abortHostLookup(d->hostLookupId);
d->hostLookupId = -1;
+#ifndef QT_NO_BEARERMANAGEMENT
+ QSharedPointer<QNetworkSession> networkSession;
+ QVariant v(property("_q_networksession"));
+ if (v.isValid()) {
+ networkSession = qvariant_cast< QSharedPointer<QNetworkSession> >(v);
+ d->_q_startConnecting(QHostInfoPrivate::fromName(d->hostName, networkSession));
+ } else
+#endif
d->_q_startConnecting(QHostInfo::fromName(d->hostName));
}
if (state() == UnconnectedState)