summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hartmann <phartmann@rim.com>2013-02-20 17:01:08 +0100
committerPeter Hartmann <phartmann@blackberry.com>2013-05-07 16:42:43 +0200
commitae3b86c8a5076f371ef8d80551c5dbb8d5cd5e67 (patch)
treeb1a4b24666889cd94558d1c27c1636bbb9c535bf
parent3f7923e326a29ec24f0615fdb9cc8a8f8a762d70 (diff)
downloadqt4-tools-ae3b86c8a5076f371ef8d80551c5dbb8d5cd5e67.tar.gz
[BB10-internal] HTTP internals: store QNetworkConfiguration to be set on the socket
The QNetworkConfiguration can be set via the QNetworkAccessManager and needs to be set on the socket, e.g. when preferring cellular traffic over Wifi. Change-Id: Ia2d9ed8cdc29db77ca5d01b462aab65c72cca394 Signed-off-by: Peter Hartmann <phartmann@rim.com>
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp19
-rw-r--r--src/network/access/qhttpnetworkconnection_p.h17
-rw-r--r--src/network/access/qhttpthreaddelegate.cpp11
-rw-r--r--src/network/access/qhttpthreaddelegate_p.h1
-rw-r--r--src/network/access/qnetworkaccesshttpbackend.cpp5
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp1
-rw-r--r--src/network/access/qnetworkaccessmanager_p.h4
7 files changed, 51 insertions, 7 deletions
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 355ce4d483..95d7b934b8 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -878,19 +878,26 @@ void QHttpNetworkConnectionPrivate::readMoreLater(QHttpNetworkReply *reply)
}
#ifndef QT_NO_BEARERMANAGEMENT
-QHttpNetworkConnection::QHttpNetworkConnection(const QString &hostName, quint16 port, bool encrypt, QObject *parent, QSharedPointer<QNetworkSession> networkSession)
+QHttpNetworkConnection::QHttpNetworkConnection(const QString &hostName, quint16 port, bool encrypt,
+ QObject *parent, QSharedPointer<QNetworkSession> networkSession,
+ const QNetworkConfiguration &networkConfiguration)
: QObject(*(new QHttpNetworkConnectionPrivate(hostName, port, encrypt)), parent)
{
Q_D(QHttpNetworkConnection);
d->networkSession = networkSession;
+ d->networkConfig = networkConfiguration;
d->init();
}
-QHttpNetworkConnection::QHttpNetworkConnection(quint16 connectionCount, const QString &hostName, quint16 port, bool encrypt, QObject *parent, QSharedPointer<QNetworkSession> networkSession)
+QHttpNetworkConnection::QHttpNetworkConnection(quint16 connectionCount, const QString &hostName,
+ quint16 port, bool encrypt, QObject *parent,
+ QSharedPointer<QNetworkSession> networkSession,
+ const QNetworkConfiguration &networkConfiguration)
: QObject(*(new QHttpNetworkConnectionPrivate(connectionCount, hostName, port, encrypt)), parent)
{
Q_D(QHttpNetworkConnection);
d->networkSession = networkSession;
+ d->networkConfig = networkConfiguration;
d->init();
}
#else
@@ -976,6 +983,14 @@ QNetworkProxy QHttpNetworkConnection::transparentProxy() const
}
#endif
+#ifndef QT_NO_BEARERMANAGEMENT
+void QHttpNetworkConnection::setNetworkConfiguration(const QNetworkConfiguration &conf) {
+ d_func()->networkConfig = conf;
+}
+QNetworkConfiguration QHttpNetworkConnection::networkConfiguration() {
+ return d_func()->networkConfig;
+}
+#endif
// SSL support below
#ifndef QT_NO_OPENSSL
diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h
index c2b4a2a5a2..31e4f71896 100644
--- a/src/network/access/qhttpnetworkconnection_p.h
+++ b/src/network/access/qhttpnetworkconnection_p.h
@@ -93,8 +93,14 @@ class Q_AUTOTEST_EXPORT QHttpNetworkConnection : public QObject
public:
#ifndef QT_NO_BEARERMANAGEMENT
- QHttpNetworkConnection(const QString &hostName, quint16 port = 80, bool encrypt = false, QObject *parent = 0, QSharedPointer<QNetworkSession> networkSession = QSharedPointer<QNetworkSession>());
- QHttpNetworkConnection(quint16 channelCount, const QString &hostName, quint16 port = 80, bool encrypt = false, QObject *parent = 0, QSharedPointer<QNetworkSession> networkSession = QSharedPointer<QNetworkSession>());
+ QHttpNetworkConnection(const QString &hostName, quint16 port = 80, bool encrypt = false,
+ QObject *parent = 0,
+ QSharedPointer<QNetworkSession> networkSession = QSharedPointer<QNetworkSession>(),
+ const QNetworkConfiguration &networkConfiguration = QNetworkConfiguration());
+ QHttpNetworkConnection(quint16 channelCount, const QString &hostName, quint16 port = 80,
+ bool encrypt = false, QObject *parent = 0,
+ QSharedPointer<QNetworkSession> networkSession = QSharedPointer<QNetworkSession>(),
+ const QNetworkConfiguration &networkConfiguration = QNetworkConfiguration());
#else
QHttpNetworkConnection(const QString &hostName, quint16 port = 80, bool encrypt = false, QObject *parent = 0);
QHttpNetworkConnection(quint16 channelCount, const QString &hostName, quint16 port = 80, bool encrypt = false, QObject *parent = 0);
@@ -117,6 +123,10 @@ public:
QNetworkProxy transparentProxy() const;
#endif
+#ifndef QT_NO_BEARERMANAGEMENT
+ void setNetworkConfiguration(const QNetworkConfiguration &conf);
+ QNetworkConfiguration networkConfiguration();
+#endif
bool isSsl() const;
QHttpNetworkConnectionChannel *channels() const;
@@ -216,6 +226,9 @@ public:
void emitProxyAuthenticationRequired(const QHttpNetworkConnectionChannel *chan, const QNetworkProxy &proxy, QAuthenticator* auth);
#endif
+#ifndef QT_NO_BEARERMANAGEMENT
+ QNetworkConfiguration networkConfig;
+#endif
//The request queues
QList<HttpMessagePair> highPriorityQueue;
QList<HttpMessagePair> lowPriorityQueue;
diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp
index 1f7265e849..38d9bc1177 100644
--- a/src/network/access/qhttpthreaddelegate.cpp
+++ b/src/network/access/qhttpthreaddelegate.cpp
@@ -154,12 +154,17 @@ public:
QNetworkAccessCachedHttpConnection(const QString &hostName, quint16 port, bool encrypt)
: QHttpNetworkConnection(hostName, port, encrypt)
#else
- QNetworkAccessCachedHttpConnection(const QString &hostName, quint16 port, bool encrypt, QSharedPointer<QNetworkSession> networkSession)
- : QHttpNetworkConnection(hostName, port, encrypt, /*parent=*/0, networkSession)
+ QNetworkAccessCachedHttpConnection(const QString &hostName, quint16 port, bool encrypt,
+ QSharedPointer<QNetworkSession> networkSession,
+ const QNetworkConfiguration &networkConfiguration)
+ : QHttpNetworkConnection(hostName, port, encrypt, /*parent=*/0, networkSession,
+ networkConfiguration)
#endif
{
setExpires(true);
setShareable(true);
+ // ### if manager's configuration valid and different from default,
+ // set the configuration on the connection
}
virtual void dispose()
@@ -270,7 +275,7 @@ void QHttpThreadDelegate::startRequest()
#ifdef QT_NO_BEARERMANAGEMENT
httpConnection = new QNetworkAccessCachedHttpConnection(urlCopy.host(), urlCopy.port(), ssl);
#else
- httpConnection = new QNetworkAccessCachedHttpConnection(urlCopy.host(), urlCopy.port(), ssl, networkSession);
+ httpConnection = new QNetworkAccessCachedHttpConnection(urlCopy.host(), urlCopy.port(), ssl, networkSession, networkConfiguration);
#endif
#ifndef QT_NO_OPENSSL
// Set the QSslConfiguration from this QNetworkRequest.
diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h
index 57326112d1..310d6688f7 100644
--- a/src/network/access/qhttpthreaddelegate_p.h
+++ b/src/network/access/qhttpthreaddelegate_p.h
@@ -116,6 +116,7 @@ public:
QString incomingErrorDetail;
#ifndef QT_NO_BEARERMANAGEMENT
QSharedPointer<QNetworkSession> networkSession;
+ QNetworkConfiguration networkConfiguration;
#endif
protected:
diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp
index 892d762996..f3ae1bcb7f 100644
--- a/src/network/access/qnetworkaccesshttpbackend.cpp
+++ b/src/network/access/qnetworkaccesshttpbackend.cpp
@@ -525,6 +525,11 @@ void QNetworkAccessHttpBackend::postRequest()
QVariant v(property("_q_networksession"));
if (v.isValid())
delegate->networkSession = qvariant_cast<QSharedPointer<QNetworkSession> >(v);
+ // only pass the network configuration if the user set it,
+ // because the default one can change and we do not want to
+ // be stuck with an old invalid config
+ if (manager->customNetworkConfiguration)
+ delegate->networkConfiguration = manager->networkConfiguration;
#endif
// For the synchronous HTTP, this is the normal way the delegate gets deleted
diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp
index a423af9adb..840c817d1d 100644
--- a/src/network/access/qnetworkaccessmanager.cpp
+++ b/src/network/access/qnetworkaccessmanager.cpp
@@ -760,6 +760,7 @@ void QNetworkAccessManager::setConfiguration(const QNetworkConfiguration &config
Q_D(QNetworkAccessManager);
d->networkConfiguration = config;
QNetworkConfigurationManager manager;
+ d->customNetworkConfiguration = true;
if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired)
d->createSession(config);
}
diff --git a/src/network/access/qnetworkaccessmanager_p.h b/src/network/access/qnetworkaccessmanager_p.h
index 86f5e03e70..6a6c5fb0cc 100644
--- a/src/network/access/qnetworkaccessmanager_p.h
+++ b/src/network/access/qnetworkaccessmanager_p.h
@@ -79,6 +79,7 @@ public:
#endif
#ifndef QT_NO_BEARERMANAGEMENT
lastSessionState(QNetworkSession::Invalid),
+ customNetworkConfiguration(false),
networkAccessible(QNetworkAccessManager::Accessible),
activeReplyCount(0),
online(false),
@@ -141,6 +142,9 @@ public:
QWeakPointer<QNetworkSession> networkSessionWeakRef;
QNetworkSession::State lastSessionState;
QNetworkConfiguration networkConfiguration;
+ // we need to track whether the user set a config or not,
+ // because the default config might change
+ bool customNetworkConfiguration;
QNetworkAccessManager::NetworkAccessibility networkAccessible;
int activeReplyCount;
bool online;