8# include <QtNetwork/qsslkey.h>
9# include <QtNetwork/qsslcipher.h>
10# include <QtNetwork/qsslconfiguration.h>
13#include <private/qdecompresshelper_p.h>
28 d->connection->d_func()->removeReply(
this);
44 return d_func()->redirectUrl;
61 return d_func()->contentLength();
72 return d_func()->parser.headers();
77 return d_func()->headerField(
name, defaultValue);
100 return d_func()->request;
112 return d_func()->parser.getStatusCode();
118 d->parser.setStatusCode(code);
123 return d_func()->errorString;
128 return d_func()->httpErrorCode;
133 return d_func()->parser.getReasonPhrase();
138 d_func()->parser.setReasonPhrase(reason);
149 return d_func()->parser.getMajorVersion();
154 return d_func()->parser.getMinorVersion();
159 d_func()->parser.setMajorVersion(version);
164 d_func()->parser.setMinorVersion(version);
171 return d->connection->d_func()->uncompressedBytesAvailable(*
this);
180 return d->connection->d_func()->uncompressedBytesAvailableNextBlock(*
this);
188 return (
d->responseData.bufferCount() > 0);
194 if (
d->responseData.bufferCount() == 0)
198 if (
d->downstreamLimited &&
d->responseData.bufferCount() == 1 && !
isFinished())
199 d->connection->d_func()->readMoreLater(
this);
200 return d->responseData.read();
206 return d->responseData.readAll();
212 return d->responseData.read(amount);
219 return d->responseData.sizeNextBlock();
225 d->downstreamLimited = dsl;
226 d->connection->d_func()->readMoreLater(
this);
232 d->readBufferMaxSize =
size;
238 return !
d->isChunked() && !
d->autoDecompress &&
239 d->bodyLength > 0 &&
d->parser.getStatusCode() == 200;
246 d->userProvidedDownloadBuffer =
b;
252 return d->userProvidedDownloadBuffer;
273 return d_func()->pipeliningUsed;
278 return d_func()->h2Used;
283 d_func()->h2Used = h2;
288 return d_func()->removedContentLength;
293 return d_func()->isRedirecting();
298 return d_func()->connection;
304 ,
state(NothingDoneState)
306 bodyLength(0), contentRead(0), totalProgress(0),
307 chunkedTransferEncoding(
false),
308 connectionCloseEnabled(true),
309 forceConnectionCloseEnabled(
false),
310 lastChunkRead(
false),
311 currentChunkSize(0), currentChunkRead(0), readBufferMaxSize(0),
312 totallyUploadedData(0),
313 removedContentLength(-1),
315 autoDecompress(
false), responseData(), requestIsPrepared(
false)
317 ,userProvidedDownloadBuffer(
nullptr)
321 if (scheme ==
"preconnect-http"_L1 || scheme ==
"preconnect-https"_L1)
364 return d->isCompressed();
373 bool parseOk =
false;
388 for (
int i = 0;
i<challenges.
size();
i++) {
412 else if (haveRead == 0)
414 else if (haveRead == 1 &&
fragment.
size() == 0 && (
c == 11 ||
c ==
'\n' ||
c ==
'\r' ||
c ==
' ' ||
c == 31))
441 }
while (haveRead == 1);
462 bool allHeaders =
false;
469 }
else if (haveRead == -1) {
490 }
while (!allHeaders && haveRead > 0);
540 if (haveRead == -1) {
567 if (haveRead == -1) {
616 while (toBeRead > 0) {
618 byteData.
resize(toBeRead);
626 byteData.
resize(haveRead);
627 out->append(byteData);
676 if ((haveRead == 2 && crlf[0] ==
'\r' && crlf[1] ==
'\n') || (haveRead == 1 && crlf[0] ==
'\n'))
678 else if (haveRead == 1 && crlf[0] ==
'\r')
680 else if (haveRead > 0) {
712 if ((fragmentSize && sniffedBytes == 2 && crlf[0] ==
'\r' && crlf[1] ==
'\n')
758 if ((statusCode >= 100 && statusCode < 200)
759 || statusCode == 204 || statusCode == 304)
764 if (expectedContentLength == 0)
766 if (expectedContentLength == -1 &&
bodyLength == 0) {
787 if (!
d->connectionChannel)
790 QSslSocket *sslSocket = qobject_cast<QSslSocket*>(
d->connectionChannel->socket);
801 d->connection->setSslConfiguration(
config);
808 d->connection->ignoreSslErrors();
815 d->connection->ignoreSslErrors(errors);
824#include "moc_qhttpnetworkreply_p.cpp"
The QAbstractSocket class provides the base functionality common to all socket types.
qint64 bytesAvailable() const override
Returns the number of incoming bytes that are waiting to be read.
QByteArray trimmed() const &
char * data()
\macro QT_NO_CAST_FROM_BYTEARRAY
bool endsWith(char c) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
void reserve(qsizetype size)
Attempts to allocate memory for at least size bytes.
qsizetype indexOf(char c, qsizetype from=0) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
long toLong(bool *ok=nullptr, int base=10) const
void truncate(qsizetype pos)
Truncates the byte array at index position pos.
bool startsWith(QByteArrayView bv) const
bool contains(char c) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
void clear()
Clears the contents of the byte array and makes it null.
QByteArray toLower() const &
void resize(qsizetype size)
Sets the size of the byte array to size bytes.
QByteArray & append(char c)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QByteArray mid(qsizetype index, qsizetype len=-1) const
Returns a byte array containing len bytes from this byte array, starting at position pos.
void append(const QByteDataBuffer &other)
static bool isSupportedEncoding(const QByteArray &encoding)
bool findChallenge(bool forProxy, QByteArray &challenge) const
qint64 readReplyBodyRaw(QAbstractSocket *in, QByteDataBuffer *out, qint64 size)
bool isConnectionCloseEnabled()
QPointer< QHttpNetworkConnection > connection
qint64 readBodyVeryFast(QAbstractSocket *socket, char *b)
qint64 bytesAvailable() const
enum QHttpNetworkReplyPrivate::ReplyState state
~QHttpNetworkReplyPrivate()
qint64 removedContentLength
QPointer< QHttpNetworkConnectionChannel > connectionChannel
qint64 readBodyFast(QAbstractSocket *socket, QByteDataBuffer *rb)
bool chunkedTransferEncoding
bool parseStatus(const QByteArray &status)
qint64 readStatus(QAbstractSocket *socket)
qint64 readBody(QAbstractSocket *socket, QByteDataBuffer *out)
void removeAutoDecompressHeader()
bool isRedirecting() const
bool forceConnectionCloseEnabled
QHttpNetworkReplyPrivate(const QUrl &newUrl=QUrl())
qint64 getChunkSize(QAbstractSocket *in, qint64 *chunkSize)
qint64 readReplyBodyChunked(QAbstractSocket *in, QByteDataBuffer *out)
void parseHeader(const QByteArray &header)
qint64 readHeader(QAbstractSocket *socket)
void clearHttpLayerInformation()
bool isCompressed() const
bool connectionCloseEnabled
QHttpNetworkRequest request
void appendHeaderField(const QByteArray &name, const QByteArray &data)
QByteDataBuffer responseData
QHttpNetworkConnection * connection()
void setStatusCode(int code)
void setUrl(const QUrl &url) override
QString errorString() const
bool readAnyAvailable() const
qint64 bytesAvailableNextBlock() const
virtual ~QHttpNetworkReply()
qint64 removedContentLength() const
qint64 bytesAvailable() const
static bool isHttpRedirect(int statusCode)
QByteArray read(qint64 amount)
void setReasonPhrase(const QString &reason)
void parseHeader(const QByteArray &header)
void setErrorString(const QString &error)
bool isPipeliningUsed() const
void setMajorVersion(int version)
void setUserProvidedDownloadBuffer(char *)
bool isRedirecting() const
void setHttp2WasUsed(bool h2Used)
void setReadBufferSize(qint64 size)
void setSslConfiguration(const QSslConfiguration &config)
QNetworkReply::NetworkError errorCode() const
bool supportsUserProvidedDownloadBuffer()
void setDownstreamLimited(bool t)
QHttpNetworkReply(const QUrl &url=QUrl(), QObject *parent=nullptr)
int minorVersion() const override
void setRequest(const QHttpNetworkRequest &request)
QString reasonPhrase() const
qint64 contentLength() const override
QList< QPair< QByteArray, QByteArray > > header() const override
QSslConfiguration sslConfiguration() const
QHttpNetworkRequest request() const
char * userProvidedDownloadBuffer()
void setMinorVersion(int version)
void setRedirectUrl(const QUrl &url)
QUrl url() const override
void setHeaderField(const QByteArray &name, const QByteArray &data) override
void setContentLength(qint64 length) override
void appendHeaderField(const QByteArray &name, const QByteArray &data)
QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue=QByteArray()) const override
bool isCompressed() const
int majorVersion() const override
bool isFollowRedirects() const
Operation operation() const
qint64 peek(char *data, qint64 maxlen)
qint64 read(char *data, qint64 maxlen)
Reads at most maxSize bytes from the device into data, and returns the number of bytes read.
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
NetworkError
Indicates all possible error conditions found during the processing of the request.
The QSslConfiguration class holds the configuration and state of an SSL connection.
The QSslSocket class provides an SSL encrypted socket for both clients and servers.
QSslConfiguration sslConfiguration() const
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string starts with s; otherwise returns false.
QString toLower() const &
QString url(FormattingOptions options=FormattingOptions(PrettyDecoded)) const
Returns a string representation of the URL.
QString scheme() const
Returns the scheme of the URL.
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
DBusConnection * connection
static QString header(const QString &name)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
constexpr const T & qMin(const T &a, const T &b)
GLboolean GLboolean GLboolean b
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLenum GLsizei length
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
QTextStream out(stdout)
[7]
QUrl url("example.com")
[constructor-url-reference]
QNetworkRequest request(url)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent