Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qnetworkreplyhttpimpl_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QNETWORKREPLYHTTPIMPL_P_H
5#define QNETWORKREPLYHTTPIMPL_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of the Network Access API. This header file may change from
13// version to version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtNetwork/private/qtnetworkglobal_p.h>
19#include "qnetworkrequest.h"
20#include "qnetworkreply.h"
21
22#include "QtCore/qpointer.h"
23#include "QtCore/qdatetime.h"
24#include "QtCore/qsharedpointer.h"
25#include "QtCore/qscopedpointer.h"
26#include "QtCore/qtimer.h"
27#include "qatomic.h"
28
29#include <QtNetwork/QNetworkCacheMetaData>
30#include <private/qhttpnetworkrequest_p.h>
31#include <private/qnetworkreply_p.h>
32#include <QtNetwork/QNetworkProxy>
33
34#ifndef QT_NO_SSL
35#include <QtNetwork/QSslConfiguration>
36#endif
37
39
40#include <private/qdecompresshelper_p.h>
41
42#include <memory>
43
45
47
48class QIODevice;
49
52{
54public:
56 virtual ~QNetworkReplyHttpImpl();
57
58 void close() override;
59 void abort() override;
60 qint64 bytesAvailable() const override;
61 bool isSequential () const override;
62 qint64 size() const override;
63 qint64 readData(char*, qint64) override;
64 void setReadBufferSize(qint64 size) override;
65 bool canReadLine () const override;
66
67 Q_DECLARE_PRIVATE(QNetworkReplyHttpImpl)
68 Q_PRIVATE_SLOT(d_func(), void _q_startOperation())
73 Q_PRIVATE_SLOT(d_func(), void _q_finished())
75
76 // From reply
78 Q_PRIVATE_SLOT(d_func(), void replyFinished())
82#ifndef QT_NO_SSL
84 Q_PRIVATE_SLOT(d_func(), void replySslErrors(const QList<QSslError> &, bool *, QList<QSslError> *))
87#endif
88#ifndef QT_NO_NETWORKPROXY
90#endif
91
92 Q_PRIVATE_SLOT(d_func(), void resetUploadDataSlot(bool *r))
99 Q_PRIVATE_SLOT(d_func(), void onRedirected(const QUrl &, int, int))
100 Q_PRIVATE_SLOT(d_func(), void followRedirect())
101
102#ifndef QT_NO_SSL
103protected:
104 void ignoreSslErrors() override;
105 void ignoreSslErrorsImplementation(const QList<QSslError> &errors) override;
106 void setSslConfigurationImplementation(const QSslConfiguration &configuration) override;
107 void sslConfigurationImplementation(QSslConfiguration &configuration) const override;
108#endif
109
110signals:
111 // To HTTP thread:
116
118
119 void haveUploadData(const qint64 pos, const QByteArray &dataArray, bool dataAtEnd, qint64 dataSize);
120};
121
123{
124public:
125
127
130
131 void _q_startOperation();
132
134
137
139
140 void _q_transferTimedOut();
142
143 void _q_finished();
144
145 void finished();
148 void _q_metaDataChanged();
149
150 void checkForRedirect(const int statusCode);
151
152 // incoming from user
155 QHttpNetworkRequest httpRequest; // There is also a copy in the HTTP thread
157
159
160 // from http thread
163
164 // upload
166 std::shared_ptr<QNonContiguousByteDevice> uploadByteDevice;
168 bool uploadDeviceChoking; // if we couldn't readPointer() any data at the moment
170 std::shared_ptr<QRingBuffer> outgoingDataBuffer;
171 void emitReplyUploadProgress(qint64 bytesSent, qint64 bytesTotal); // dup?
172 void onRedirected(const QUrl &redirectUrl, int httpStatus, int maxRedirectsRemainig);
173 void followRedirect();
175
176
177 // cache
178 void createCache();
179 void completeCacheSave();
180 void setCachingEnabled(bool enable);
181 bool isCachingEnabled() const;
182 bool isCachingAllowed() const;
183 void initCacheSaveDevice();
186
188 bool cacheEnabled; // is this for saving?
189
190
192#ifndef QT_NO_NETWORKPROXY
194#endif
195
196
197 bool canResume() const;
200
203 // We use this to keep track of whether or not we need to emit readyRead
204 // when we deal with signal compression (delaying emission) + decompressing
205 // data (potentially receiving bytes that don't end up in the final output):
207
209
210 // Only used when the "zero copy" style is used.
211 // Please note that the whole "zero copy" download buffer API is private right now. Do not use it.
214 QSharedPointer<char> downloadBufferPointer;
216
217 // Will be increased by HTTP thread:
218 std::shared_ptr<QAtomicInt> pendingDownloadDataEmissions;
219 std::shared_ptr<QAtomicInt> pendingDownloadProgressEmissions;
220
221
222#ifndef QT_NO_SSL
223 QScopedPointer<QSslConfiguration> sslConfiguration;
226#endif
227
229
231
233 void invalidateCache();
234 bool sendCacheContents(const QNetworkCacheMetaData &metaData);
236
237
238 void postRequest(const QNetworkRequest& newHttpRequest);
240 QNetworkRequest createRedirectRequest(const QNetworkRequest &originalRequests, const QUrl &url, int maxRedirectsRemainig);
241 bool isHttpRedirectResponse() const;
242
243public:
244 // From HTTP thread:
246 void replyFinished();
247 void replyDownloadMetaData(const QHttpHeaders &, int, const QString &,
248 bool, QSharedPointer<char>, qint64, qint64, bool, bool);
252#ifndef QT_NO_SSL
253 void replyEncrypted();
254 void replySslErrors(const QList<QSslError> &, bool *, QList<QSslError> *);
255 void replySslConfigurationChanged(const QSslConfiguration &newSslConfiguration);
257#endif
258#ifndef QT_NO_NETWORKPROXY
260#endif
261
262 // From QNonContiguousByteDeviceThreadForwardImpl in HTTP thread:
263 void resetUploadDataSlot(bool *r);
266
267 // From user's QNonContiguousByteDevice
269
270 Q_DECLARE_PUBLIC(QNetworkReplyHttpImpl)
271};
272
274
275#endif
The QAuthenticator class provides an authentication object.
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore \reentrant
Definition qiodevice.h:34
virtual qint64 pos() const
For random-access devices, this function returns the position that data is written to or read from.
Definition qlist.h:75
The QNetworkAccessManager class allows the application to send network requests and receive replies.
Operation
Indicates the operation this reply is processing.
The QNetworkCacheMetaData class provides cache information.
The QNetworkProxy class provides a network layer proxy.
QNetworkRequest createRedirectRequest(const QNetworkRequest &originalRequests, const QUrl &url, int maxRedirectsRemainig)
QSharedPointer< char > downloadBufferPointer
QNetworkCacheMetaData fetchCacheMetaData(const QNetworkCacheMetaData &metaData) const
void _q_error(QNetworkReply::NetworkError code, const QString &errorString)
void httpError(QNetworkReply::NetworkError error, const QString &errorString)
std::shared_ptr< QAtomicInt > pendingDownloadProgressEmissions
QNetworkAccessManagerPrivate * managerPrivate
void replyDownloadMetaData(const QHttpHeaders &, int, const QString &, bool, QSharedPointer< char >, qint64, qint64, bool, bool)
static QHttpNetworkRequest::Priority convert(const QNetworkRequest::Priority &prio)
void replySslConfigurationChanged(const QSslConfiguration &newSslConfiguration)
void onRedirected(const QUrl &redirectUrl, int httpStatus, int maxRedirectsRemainig)
QNetworkAccessManager::Operation getRedirectOperation(QNetworkAccessManager::Operation currentOp, int httpStatus)
std::shared_ptr< QNonContiguousByteDevice > uploadByteDevice
void httpAuthenticationRequired(const QHttpNetworkRequest &request, QAuthenticator *auth)
void replyDownloadProgressSlot(qint64, qint64)
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth)
bool sendCacheContents(const QNetworkCacheMetaData &metaData)
void checkForRedirect(const int statusCode)
QScopedPointer< QSslConfiguration > sslConfiguration
QNonContiguousByteDevice * createUploadByteDevice()
std::shared_ptr< QAtomicInt > pendingDownloadDataEmissions
void emitReplyUploadProgress(qint64 bytesSent, qint64 bytesTotal)
void replySslErrors(const QList< QSslError > &, bool *, QList< QSslError > *)
bool loadFromCacheIfAllowed(QHttpNetworkRequest &httpRequest)
std::shared_ptr< QRingBuffer > outgoingDataBuffer
void replyPreSharedKeyAuthenticationRequiredSlot(QSslPreSharedKeyAuthenticator *)
void postRequest(const QNetworkRequest &newHttpRequest)
void void void void void void void void void void void void void void void void void void void void void void void void onRedirected(const QUrl &, int, int)) Q_PRIVATE_SLOT(d_func()
void readBufferFreed(qint64 size)
void void void void void void void void void void httpAuthenticationRequired(const QHttpNetworkRequest &, QAuthenticator *)) Q_PRIVATE_SLOT(d_func()
void setSslConfigurationImplementation(const QSslConfiguration &configuration) override
void void void void void void void void void void void void void void void void void void void void uploadByteDeviceReadyReadSlot()) Q_PRIVATE_SLOT(d_func()
void readBufferSizeChanged(qint64 size)
void abort() override
Aborts the operation immediately and close down any network connections still open.
void void void void void void void void void void void void void void void void void void void void void void _q_cacheSaveDeviceAboutToClose()) Q_PRIVATE_SLOT(d_func()
void void void void void void void void void void void void void replySslErrors(const QList< QSslError > &, bool *, QList< QSslError > *)) Q_PRIVATE_SLOT(d_func()
void close() override
Closes this device for reading.
void void void void void _q_finished()) Q_PRIVATE_SLOT(d_func()
void void void void void void void void void void void void void void void void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth)) Q_PRIVATE_SLOT(d_func()
void void void void void void void void void void void void void void void void void void wantUploadDataSlot(qint64)) Q_PRIVATE_SLOT(d_func()
void void void void void void void void void void void void void void void void void resetUploadDataSlot(bool *r)) Q_PRIVATE_SLOT(d_func()
void void void void void void void void void void void httpError(QNetworkReply::NetworkError, const QString &)) Q_PRIVATE_SLOT(d_func()
void haveUploadData(const qint64 pos, const QByteArray &dataArray, bool dataAtEnd, qint64 dataSize)
qint64 size() const override
For open random-access devices, this function returns the size of the device.
void void void void void void void void void void void void void void void void void void void void void emitReplyUploadProgress(qint64, qint64)) Q_PRIVATE_SLOT(d_func()
void void _q_bufferOutgoingData()) Q_PRIVATE_SLOT(d_func()
void void void void void void void void replyFinished()) Q_PRIVATE_SLOT(d_func()
void void void void _q_transferTimedOut()) Q_PRIVATE_SLOT(d_func()
QNetworkReplyHttpImpl(QNetworkAccessManager *const, const QNetworkRequest &, QNetworkAccessManager::Operation &, QIODevice *outgoingData)
void void void void void void void void void replyDownloadProgressSlot(qint64, qint64)) Q_PRIVATE_SLOT(d_func()
void void void _q_bufferOutgoingDataFinished()) Q_PRIVATE_SLOT(d_func()
void void void void void void void void void void void void void void void void void void void sentUploadDataSlot(qint64, qint64)) Q_PRIVATE_SLOT(d_func()
void void void void void void _q_error(QNetworkReply::NetworkError, const QString &)) Q_PRIVATE_SLOT(d_func()
void void void void void void void void void void void void void void void replyPreSharedKeyAuthenticationRequiredSlot(QSslPreSharedKeyAuthenticator *)) Q_PRIVATE_SLOT(d_func()
void startHttpRequestSynchronously()
void void void void void void void void void void void void void void void void void void void void void void void void void followRedirect()) protected void ignoreSslErrorsImplementation(const QList< QSslError > &errors) override
void sslConfigurationImplementation(QSslConfiguration &configuration) const override
void void void void void void void void void void void void void void void void void void void void void void void _q_metaDataChanged()) Q_PRIVATE_SLOT(d_func()
void void void void void void void void void void void void replyEncrypted()) Q_PRIVATE_SLOT(d_func()
qint64 bytesAvailable() const override
Returns the number of bytes that are available for reading.
bool isSequential() const override
void void void void void void void void void void void void void void replySslConfigurationChanged(const QSslConfiguration &)) Q_PRIVATE_SLOT(d_func()
void void void void void void void replyDownloadData(QByteArray)) Q_PRIVATE_SLOT(d_func()
bool canReadLine() const override
Returns true if a complete line of data can be read from the device; otherwise returns false.
void setReadBufferSize(qint64 size) override
Sets the size of the read buffer to be size bytes.
void _q_cacheLoadReadyRead()) Q_PRIVATE_SLOT(d_func()
QNetworkRequest request
The QNetworkReply class contains the data and headers for a request sent with QNetworkAccessManager.
NetworkError
Indicates all possible error conditions found during the processing of the request.
virtual void ignoreSslErrors()
If this function is called, SSL errors related to network connection will be ignored,...
The QNetworkRequest class holds a request to be sent with QNetworkAccessManager.
The QSslConfiguration class holds the configuration and state of an SSL connection.
The QSslError class provides an SSL error.
Definition qsslerror.h:21
The QSslPreSharedKeyAuthenticator class provides authentication data for pre shared keys (PSK) cipher...
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
Definition qtimer.h:20
\inmodule QtCore
Definition qurl.h:94
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLboolean r
[2]
GLenum GLsizei dataSize
GLboolean enable
GLenum GLuint GLintptr offset
#define QT_REQUIRE_CONFIG(feature)
#define Q_OBJECT
#define Q_MOC_INCLUDE(...)
#define signals
#define Q_PRIVATE_SLOT(d, signature)
unsigned long long quint64
Definition qtypes.h:61
long long qint64
Definition qtypes.h:60
QByteArray readData()
QNetworkProxy proxy
[0]