summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
authorMarkus Goetz <Markus.Goetz@nokia.com>2011-04-05 16:24:01 +0200
committerMarkus Goetz <Markus.Goetz@nokia.com>2011-05-03 16:34:48 +0200
commit856da3ee19a6c0f6c88ecc77b69ad41b4d4e6ffa (patch)
tree2bd381a3de12be4cae418717eafaf93799d5f0c3 /src/network
parent0c637cb07ba3c9b353e7e483a209537485cc4e2a (diff)
QNAM: Improve internal authenticationRequired()
Make it independant from the backend architecture to improve refactorability. Reviewed-by: Peter Hartmann
Diffstat (limited to 'src/network')
-rw-r--r--src/network/access/qnetworkaccessbackend.cpp2
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp22
-rw-r--r--src/network/access/qnetworkaccessmanager_p.h6
3 files changed, 17 insertions, 13 deletions
diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp
index 6220abed02..2847cd5a50 100644
--- a/src/network/access/qnetworkaccessbackend.cpp
+++ b/src/network/access/qnetworkaccessbackend.cpp
@@ -321,7 +321,7 @@ void QNetworkAccessBackend::proxyAuthenticationRequired(const QNetworkProxy &pro
void QNetworkAccessBackend::authenticationRequired(QAuthenticator *authenticator)
{
- manager->authenticationRequired(this, authenticator);
+ manager->authenticationRequired(authenticator, reply->q_func(), synchronous, reply->url, &reply->urlForLastAuthentication);
}
void QNetworkAccessBackend::metaDataChanged()
diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp
index 5a7521e33e..a809583550 100644
--- a/src/network/access/qnetworkaccessmanager.cpp
+++ b/src/network/access/qnetworkaccessmanager.cpp
@@ -1055,35 +1055,35 @@ void QNetworkAccessManagerPrivate::createCookieJar() const
}
}
-void QNetworkAccessManagerPrivate::authenticationRequired(QNetworkAccessBackend *backend,
- QAuthenticator *authenticator)
+void QNetworkAccessManagerPrivate::authenticationRequired(QAuthenticator *authenticator,
+ QNetworkReply *reply,
+ bool synchronous,
+ QUrl &url,
+ QUrl *urlForLastAuthentication)
{
Q_Q(QNetworkAccessManager);
- // FIXME: Add support for domains (i.e., the leading path)
- QUrl url = backend->reply->url;
-
// don't try the cache for the same URL twice in a row
// being called twice for the same URL means the authentication failed
// also called when last URL is empty, e.g. on first call
- if (backend->reply->urlForLastAuthentication.isEmpty()
- || url != backend->reply->urlForLastAuthentication) {
+ if (urlForLastAuthentication->isEmpty()
+ || url != *urlForLastAuthentication) {
QNetworkAuthenticationCredential cred = authenticationManager->fetchCachedCredentials(url, authenticator);
if (!cred.isNull()) {
authenticator->setUser(cred.user);
authenticator->setPassword(cred.password);
- backend->reply->urlForLastAuthentication = url;
+ *urlForLastAuthentication = url;
return;
}
}
// if we emit a signal here in synchronous mode, the user might spin
// an event loop, which might recurse and lead to problems
- if (backend->isSynchronous())
+ if (synchronous)
return;
- backend->reply->urlForLastAuthentication = url;
- emit q->authenticationRequired(backend->reply->q_func(), authenticator);
+ *urlForLastAuthentication = url;
+ emit q->authenticationRequired(reply, authenticator);
authenticationManager->cacheCredentials(url, authenticator);
}
diff --git a/src/network/access/qnetworkaccessmanager_p.h b/src/network/access/qnetworkaccessmanager_p.h
index f64cc4dc79..a8237b30d2 100644
--- a/src/network/access/qnetworkaccessmanager_p.h
+++ b/src/network/access/qnetworkaccessmanager_p.h
@@ -94,7 +94,11 @@ public:
QNetworkReply *postProcess(QNetworkReply *reply);
void createCookieJar() const;
- void authenticationRequired(QNetworkAccessBackend *backend, QAuthenticator *authenticator);
+ void authenticationRequired(QAuthenticator *authenticator,
+ QNetworkReply *reply,
+ bool synchronous,
+ QUrl &url,
+ QUrl *urlForLastAuthentication);
void cacheCredentials(const QUrl &url, const QAuthenticator *auth);
QNetworkAuthenticationCredential *fetchCachedCredentials(const QUrl &url,
const QAuthenticator *auth = 0);