diff options
author | Peter Hartmann <phartmann@rim.com> | 2013-02-20 17:01:08 +0100 |
---|---|---|
committer | Peter Hartmann <phartmann@blackberry.com> | 2013-05-07 16:42:43 +0200 |
commit | ae3b86c8a5076f371ef8d80551c5dbb8d5cd5e67 (patch) | |
tree | b1a4b24666889cd94558d1c27c1636bbb9c535bf | |
parent | 3f7923e326a29ec24f0615fdb9cc8a8f8a762d70 (diff) | |
download | qt4-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.cpp | 19 | ||||
-rw-r--r-- | src/network/access/qhttpnetworkconnection_p.h | 17 | ||||
-rw-r--r-- | src/network/access/qhttpthreaddelegate.cpp | 11 | ||||
-rw-r--r-- | src/network/access/qhttpthreaddelegate_p.h | 1 | ||||
-rw-r--r-- | src/network/access/qnetworkaccesshttpbackend.cpp | 5 | ||||
-rw-r--r-- | src/network/access/qnetworkaccessmanager.cpp | 1 | ||||
-rw-r--r-- | src/network/access/qnetworkaccessmanager_p.h | 4 |
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; |