diff options
author | Mandeep Sandhu <mandeepsandhu.chd@gmail.com> | 2014-03-17 19:21:25 +0530 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-03-09 08:32:14 +0000 |
commit | d815de8c26ccee33713e37a0fec2982755dcfe1f (patch) | |
tree | 9bfae5a77f94368c139e5290399a9f7ec6471367 /src/network/access/qhttpnetworkreply_p.h | |
parent | f7118e7f1b495fc0a0b8d83dff1a207dfddb09aa (diff) |
QNetworkAccessManager: Support HTTP redirection
This commit adds support for following HTTP redirect responses on a per
request basis.
This behavior is disabled by default. It can be switched on by
setting the QNetworkRequest::FollowRedirectAttribute to true.
2 new error codes have been added to QNetworkReply:
* TooManyRedirectsError: Set when the number of redirects exceed a
given value set by the user (defaults to 50 if not set)
* UnsecureRedirectError: Set when we are redirecting from a 'https'
to 'http' protocol.
Test cases for the following scenarios:
* Single HTTP redirect using local test server
* Changing max-redirects
* Testing all redirect related error scenarios
The next commit will extend this feature at a QNAM level.
Task-number: QTBUG-8232
Change-Id: If9e28ad12bad08bcdc5bc511b1cd59dc9d8150f0
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Diffstat (limited to 'src/network/access/qhttpnetworkreply_p.h')
-rw-r--r-- | src/network/access/qhttpnetworkreply_p.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 0fe298da27..6e81663500 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -127,8 +127,15 @@ public: bool isSpdyUsed() const; void setSpdyWasUsed(bool spdy); + bool isRedirecting() const; + QHttpNetworkConnection* connection(); + QUrl redirectUrl() const; + void setRedirectUrl(const QUrl &url); + + static bool isHttpRedirect(int statusCode); + #ifndef QT_NO_SSL QSslConfiguration sslConfiguration() const; void setSslConfiguration(const QSslConfiguration &config); @@ -153,6 +160,7 @@ Q_SIGNALS: void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); #endif void authenticationRequired(const QHttpNetworkRequest &request, QAuthenticator *authenticator); + void redirected(const QUrl &url, int httpStatus, int maxRedirectsRemaining); private: Q_DECLARE_PRIVATE(QHttpNetworkReply) friend class QHttpSocketEngine; @@ -185,6 +193,7 @@ public: qint64 readReplyBodyChunked(QAbstractSocket *in, QByteDataBuffer *out); qint64 getChunkSize(QAbstractSocket *in, qint64 *chunkSize); + bool isRedirecting() const; bool shouldEmitSignals(); bool expectContent(); void eraseData(); @@ -245,6 +254,7 @@ public: bool downstreamLimited; char* userProvidedDownloadBuffer; + QUrl redirectUrl; #ifndef QT_NO_COMPRESS z_stream_s *inflateStrm; |