qhttpnetworkreply.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/network/access/qhttpnetworkreply.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11-
12QHttpNetworkReply::QHttpNetworkReply(const QUrl &url, QObject *parent)-
13 : QObject(*new QHttpNetworkReplyPrivate(url), parent)-
14{-
15}-
16-
17QHttpNetworkReply::~QHttpNetworkReply()-
18{-
19 QHttpNetworkReplyPrivate * const d = d_func();-
20 if (d->connection) {-
21 d->connection->d_func()->removeReply(this);-
22 }-
23-
24-
25 if (d->autoDecompress && d->isCompressed() && d->inflateStrm)-
26 inflateEnd(d->inflateStrm);-
27-
28}-
29-
30QUrl QHttpNetworkReply::url() const-
31{-
32 return d_func()->url;-
33}-
34void QHttpNetworkReply::setUrl(const QUrl &url)-
35{-
36 QHttpNetworkReplyPrivate * const d = d_func();-
37 d->url = url;-
38}-
39-
40QUrl QHttpNetworkReply::redirectUrl() const-
41{-
42 return d_func()->redirectUrl;-
43}-
44-
45void QHttpNetworkReply::setRedirectUrl(const QUrl &url)-
46{-
47 QHttpNetworkReplyPrivate * const d = d_func();-
48 d->redirectUrl = url;-
49}-
50-
51bool QHttpNetworkReply::isHttpRedirect(int statusCode)-
52{-
53 return (statusCode == 301 || statusCode == 302 || statusCode == 303-
54 || statusCode == 305 || statusCode == 307);-
55}-
56-
57qint64 QHttpNetworkReply::contentLength() const-
58{-
59 return d_func()->contentLength();-
60}-
61-
62void QHttpNetworkReply::setContentLength(qint64 length)-
63{-
64 QHttpNetworkReplyPrivate * const d = d_func();-
65 d->setContentLength(length);-
66}-
67-
68QList<QPair<QByteArray, QByteArray> > QHttpNetworkReply::header() const-
69{-
70 return d_func()->fields;-
71}-
72-
73QByteArray QHttpNetworkReply::headerField(const QByteArray &name, const QByteArray &defaultValue) const-
74{-
75 return d_func()->headerField(name, defaultValue);-
76}-
77-
78void QHttpNetworkReply::setHeaderField(const QByteArray &name, const QByteArray &data)-
79{-
80 QHttpNetworkReplyPrivate * const d = d_func();-
81 d->setHeaderField(name, data);-
82}-
83-
84void QHttpNetworkReply::parseHeader(const QByteArray &header)-
85{-
86 QHttpNetworkReplyPrivate * const d = d_func();-
87 d->parseHeader(header);-
88}-
89-
90QHttpNetworkRequest QHttpNetworkReply::request() const-
91{-
92 return d_func()->request;-
93}-
94-
95void QHttpNetworkReply::setRequest(const QHttpNetworkRequest &request)-
96{-
97 QHttpNetworkReplyPrivate * const d = d_func();-
98 d->request = request;-
99 d->ssl = request.isSsl();-
100}-
101-
102int QHttpNetworkReply::statusCode() const-
103{-
104 return d_func()->statusCode;-
105}-
106-
107void QHttpNetworkReply::setStatusCode(int code)-
108{-
109 QHttpNetworkReplyPrivate * const d = d_func();-
110 d->statusCode = code;-
111}-
112-
113QString QHttpNetworkReply::errorString() const-
114{-
115 return d_func()->errorString;-
116}-
117-
118QString QHttpNetworkReply::reasonPhrase() const-
119{-
120 return d_func()->reasonPhrase;-
121}-
122-
123void QHttpNetworkReply::setErrorString(const QString &error)-
124{-
125 QHttpNetworkReplyPrivate * const d = d_func();-
126 d->errorString = error;-
127}-
128-
129int QHttpNetworkReply::majorVersion() const-
130{-
131 return d_func()->majorVersion;-
132}-
133-
134int QHttpNetworkReply::minorVersion() const-
135{-
136 return d_func()->minorVersion;-
137}-
138-
139qint64 QHttpNetworkReply::bytesAvailable() const-
140{-
141 const QHttpNetworkReplyPrivate * const d = d_func();-
142 if (d->connection)-
143 return d->connection->d_func()->uncompressedBytesAvailable(*this);-
144 else-
145 return -1;-
146}-
147-
148qint64 QHttpNetworkReply::bytesAvailableNextBlock() const-
149{-
150 const QHttpNetworkReplyPrivate * const d = d_func();-
151 if (d->connection)-
152 return d->connection->d_func()->uncompressedBytesAvailableNextBlock(*this);-
153 else-
154 return -1;-
155}-
156-
157bool QHttpNetworkReply::readAnyAvailable() const-
158{-
159 const QHttpNetworkReplyPrivate * const d = d_func();-
160 return (d->responseData.bufferCount() > 0);-
161}-
162-
163QByteArray QHttpNetworkReply::readAny()-
164{-
165 QHttpNetworkReplyPrivate * const d = d_func();-
166 if (d->responseData.bufferCount() == 0)-
167 return QByteArray();-
168-
169-
170 if (d->downstreamLimited && d->responseData.bufferCount() == 1 && !isFinished())-
171 d->connection->d_func()->readMoreLater(this);-
172 return d->responseData.read();-
173}-
174-
175QByteArray QHttpNetworkReply::readAll()-
176{-
177 QHttpNetworkReplyPrivate * const d = d_func();-
178 return d->responseData.readAll();-
179}-
180-
181QByteArray QHttpNetworkReply::read(qint64 amount)-
182{-
183 QHttpNetworkReplyPrivate * const d = d_func();-
184 return d->responseData.read(amount);-
185}-
186-
187-
188qint64 QHttpNetworkReply::sizeNextBlock()-
189{-
190 QHttpNetworkReplyPrivate * const d = d_func();-
191 return d->responseData.sizeNextBlock();-
192}-
193-
194void QHttpNetworkReply::setDownstreamLimited(bool dsl)-
195{-
196 QHttpNetworkReplyPrivate * const d = d_func();-
197 d->downstreamLimited = dsl;-
198 d->connection->d_func()->readMoreLater(this);-
199}-
200-
201void QHttpNetworkReply::setReadBufferSize(qint64 size)-
202{-
203 QHttpNetworkReplyPrivate * const d = d_func();-
204 d->readBufferMaxSize = size;-
205}-
206-
207bool QHttpNetworkReply::supportsUserProvidedDownloadBuffer()-
208{-
209 QHttpNetworkReplyPrivate * const d = d_func();-
210 return (!d->isChunked() && !d->autoDecompress && d->bodyLength > 0 && d->statusCode == 200);-
211}-
212-
213void QHttpNetworkReply::setUserProvidedDownloadBuffer(char* b)-
214{-
215 QHttpNetworkReplyPrivate * const d = d_func();-
216 if (supportsUserProvidedDownloadBuffer())-
217 d->userProvidedDownloadBuffer = b;-
218}-
219-
220char* QHttpNetworkReply::userProvidedDownloadBuffer()-
221{-
222 QHttpNetworkReplyPrivate * const d = d_func();-
223 return d->userProvidedDownloadBuffer;-
224}-
225-
226void QHttpNetworkReply::abort()-
227{-
228 QHttpNetworkReplyPrivate * const d = d_func();-
229 d->state = QHttpNetworkReplyPrivate::Aborted;-
230}-
231-
232bool QHttpNetworkReply::isAborted() const-
233{-
234 return d_func()->state == QHttpNetworkReplyPrivate::Aborted;-
235}-
236-
237bool QHttpNetworkReply::isFinished() const-
238{-
239 return d_func()->state == QHttpNetworkReplyPrivate::AllDoneState;-
240}-
241-
242bool QHttpNetworkReply::isPipeliningUsed() const-
243{-
244 return d_func()->pipeliningUsed;-
245}-
246-
247bool QHttpNetworkReply::isSpdyUsed() const-
248{-
249 return d_func()->spdyUsed;-
250}-
251-
252void QHttpNetworkReply::setSpdyWasUsed(bool spdy)-
253{-
254 d_func()->spdyUsed = spdy;-
255}-
256-
257bool QHttpNetworkReply::isRedirecting() const-
258{-
259 return d_func()->isRedirecting();-
260}-
261-
262QHttpNetworkConnection* QHttpNetworkReply::connection()-
263{-
264 return d_func()->connection;-
265}-
266-
267-
268QHttpNetworkReplyPrivate::QHttpNetworkReplyPrivate(const QUrl &newUrl)-
269 : QHttpNetworkHeaderPrivate(newUrl)-
270 , state(NothingDoneState)-
271 , ssl(false)-
272 , statusCode(100),-
273 majorVersion(0), minorVersion(0), bodyLength(0), contentRead(0), totalProgress(0),-
274 chunkedTransferEncoding(false),-
275 connectionCloseEnabled(true),-
276 forceConnectionCloseEnabled(false),-
277 lastChunkRead(false),-
278 currentChunkSize(0), currentChunkRead(0), readBufferMaxSize(0),-
279 windowSizeDownload(65536),-
280 windowSizeUpload(65536),-
281 currentlyReceivedDataInWindow(0),-
282 currentlyUploadedDataInWindow(0),-
283 totallyUploadedData(0),-
284 connection(0),-
285 autoDecompress(false), responseData(), requestIsPrepared(false)-
286 ,pipeliningUsed(false), spdyUsed(false), downstreamLimited(false)-
287 ,userProvidedDownloadBuffer(0)-
288-
289 ,inflateStrm(0)-
290-
291-
292{-
293 QString scheme = newUrl.scheme();-
294 if (scheme == QLatin1String("preconnect-http")-
295 || scheme == QLatin1String("preconnect-https"))-
296-
297 connectionCloseEnabled = false;-
298}-
299-
300QHttpNetworkReplyPrivate::~QHttpNetworkReplyPrivate()-
301{-
302-
303 if (inflateStrm)-
304 delete inflateStrm;-
305-
306}-
307-
308void QHttpNetworkReplyPrivate::clearHttpLayerInformation()-
309{-
310 state = NothingDoneState;-
311 statusCode = 100;-
312 bodyLength = 0;-
313 contentRead = 0;-
314 totalProgress = 0;-
315 currentChunkSize = 0;-
316 currentChunkRead = 0;-
317 lastChunkRead = false;-
318 connectionCloseEnabled = true;-
319-
320 if (autoDecompress && inflateStrm)-
321 inflateEnd(inflateStrm);-
322-
323 fields.clear();-
324}-
325-
326-
327void QHttpNetworkReplyPrivate::clear()-
328{-
329 connection = 0;-
330 connectionChannel = 0;-
331 autoDecompress = false;-
332 clearHttpLayerInformation();-
333}-
334-
335-
336qint64 QHttpNetworkReplyPrivate::bytesAvailable() const-
337{-
338 return (state != ReadingDataState ? 0 : fragment.size());-
339}-
340-
341bool QHttpNetworkReplyPrivate::isCompressed()-
342{-
343 QByteArray encoding = headerField("content-encoding");-
344 return qstricmp(encoding.constData(), "gzip") == 0 || qstricmp(encoding.constData(), "deflate") == 0;-
345}-
346-
347void QHttpNetworkReplyPrivate::removeAutoDecompressHeader()-
348{-
349-
350-
351 QByteArray name("content-length");-
352 QList<QPair<QByteArray, QByteArray> >::Iterator it = fields.begin(),-
353 end = fields.end();-
354 while (it != end) {-
355 if (qstricmp(name.constData(), it->first.constData()) == 0) {-
356 fields.erase(it);-
357 break;-
358 }-
359 ++it;-
360 }-
361-
362}-
363-
364bool QHttpNetworkReplyPrivate::findChallenge(bool forProxy, QByteArray &challenge) const-
365{-
366 challenge.clear();-
367-
368 QByteArray header = forProxy ? "proxy-authenticate" : "www-authenticate";-
369-
370 QList<QByteArray> challenges = headerFieldValues(header);-
371 for (int i = 0; i<challenges.size(); i++) {-
372 QByteArray line = challenges.at(i);-
373-
374 if (!line.toLower().startsWith("negotiate"))-
375 challenge = line;-
376 }-
377 return !challenge.isEmpty();-
378}-
379-
380QAuthenticatorPrivate::Method QHttpNetworkReplyPrivate::authenticationMethod(bool isProxy) const-
381{-
382-
383 QAuthenticatorPrivate::Method method = QAuthenticatorPrivate::None;-
384 QByteArray header = isProxy ? "proxy-authenticate" : "www-authenticate";-
385 QList<QByteArray> challenges = headerFieldValues(header);-
386 for (int i = 0; i<challenges.size(); i++) {-
387 QByteArray line = challenges.at(i).trimmed().toLower();-
388 if (method < QAuthenticatorPrivate::Basic-
389 && line.startsWith("basic")) {-
390 method = QAuthenticatorPrivate::Basic;-
391 } else if (method < QAuthenticatorPrivate::Ntlm-
392 && line.startsWith("ntlm")) {-
393 method = QAuthenticatorPrivate::Ntlm;-
394 } else if (method < QAuthenticatorPrivate::DigestMd5-
395 && line.startsWith("digest")) {-
396 method = QAuthenticatorPrivate::DigestMd5;-
397 }-
398 }-
399 return method;-
400}-
401-
402qint64 QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket)-
403{-
404 if (fragment.isEmpty()) {-
405-
406 fragment.reserve(32);-
407 }-
408-
409 qint64 bytes = 0;-
410 char c;-
411 qint64 haveRead = 0;-
412-
413 do {-
414 haveRead = socket->read(&c, 1);-
415 if (haveRead == -1)-
416 return -1;-
417 else if (haveRead == 0)-
418 break;-
419 else if (haveRead == 1 && fragment.size() == 0 && (c == 11 || c == '\n' || c == '\r' || c == ' ' || c == 31))-
420 continue;-
421-
422 bytes++;-
423-
424-
425 if (c == '\n') {-
426-
427 if (fragment.endsWith('\r')) {-
428 fragment.truncate(fragment.length()-1);-
429 }-
430 bool ok = parseStatus(fragment);-
431 state = ReadingHeaderState;-
432 fragment.clear();-
433 if (!ok) {-
434 return -1;-
435 }-
436 break;-
437 } else {-
438 fragment.append(c);-
439 }-
440-
441-
442 if (fragment.length() >= 5 && !fragment.startsWith("HTTP/"))-
443 {-
444 fragment.clear();-
445 return -1;-
446 }-
447 } while (haveRead == 1);-
448-
449 return bytes;-
450}-
451-
452bool QHttpNetworkReplyPrivate::parseStatus(const QByteArray &status)-
453{-
454-
455-
456-
457-
458-
459-
460 static const int minLength = 11;-
461 static const int dotPos = 6;-
462 static const int spacePos = 8;-
463 static const char httpMagic[] = "HTTP/";-
464-
465 if (status.length() < minLength-
466 || !status.startsWith(httpMagic)-
467 || status.at(dotPos) != '.'-
468 || status.at(spacePos) != ' ') {-
469-
470 return false;-
471 }-
472-
473-
474 majorVersion = status.at(dotPos - 1) - '0';-
475 minorVersion = status.at(dotPos + 1) - '0';-
476-
477 int i = spacePos;-
478 int j = status.indexOf(' ', i + 1);-
479 const QByteArray code = status.mid(i + 1, j - i - 1);-
480-
481 bool ok;-
482 statusCode = code.toInt(&ok);-
483 reasonPhrase = QString::fromLatin1(status.constData() + j + 1);-
484-
485 return ok && uint(majorVersion) <= 9 && uint(minorVersion) <= 9;-
486}-
487-
488qint64 QHttpNetworkReplyPrivate::readHeader(QAbstractSocket *socket)-
489{-
490 if (fragment.isEmpty()) {-
491-
492-
493-
494 fragment.reserve(512);-
495 }-
496-
497 qint64 bytes = 0;-
498 char c = 0;-
499 bool allHeaders = false;-
500 qint64 haveRead = 0;-
501 do {-
502 haveRead = socket->read(&c, 1);-
503 if (haveRead == 0) {-
504-
505 break;-
506 } else if (haveRead == -1) {-
507-
508 return -1;-
509 } else {-
510 fragment.append(c);-
511 bytes++;-
512-
513 if (c == '\n') {-
514-
515-
516-
517 if (fragment.endsWith("\n\r\n")-
518 || fragment.endsWith("\n\n"))-
519 allHeaders = true;-
520-
521-
522 if ((fragment.length() == 2 && fragment.endsWith("\r\n"))-
523 || (fragment.length() == 1 && fragment.endsWith("\n")))-
524 allHeaders = true;-
525 }-
526 }-
527 } while (!allHeaders && haveRead > 0);-
528-
529-
530 if (allHeaders) {-
531 parseHeader(fragment);-
532 state = ReadingDataState;-
533 fragment.clear();-
534 bodyLength = contentLength();-
535-
536-
537 chunkedTransferEncoding = headerField("transfer-encoding").toLower().contains("chunked");-
538-
539-
540 QByteArray connectionHeaderField = headerField("connection");-
541-
542 connectionCloseEnabled = (connectionHeaderField.toLower().contains("close") ||-
543 headerField("proxy-connection").toLower().contains("close")) ||-
544 (majorVersion == 1 && minorVersion == 0 &&-
545 (connectionHeaderField.isEmpty() && !headerField("proxy-connection").toLower().contains("keep-alive")));-
546-
547-
548 if (autoDecompress && isCompressed()) {-
549-
550 if (!inflateStrm)-
551 inflateStrm = new z_stream;-
552 int ret = initializeInflateStream();-
553 if (ret != 0)-
554 return -1;-
555 }-
556-
557-
558 }-
559 return bytes;-
560}-
561-
562void QHttpNetworkReplyPrivate::parseHeader(const QByteArray &header)-
563{-
564-
565-
566 const QByteArrayMatcher lf("\n");-
const QByteArrayMatcher colon(":");int i = 0;
567 while (i < header.count()
i < header.count()Description
TRUEevaluated 16694 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
FALSEevaluated 7 times by 1 test
Evaluated by:
  • tst_qhttpnetworkreply - unknown status
) {
7-16694
568 int j = colonheader.indexInindexOf(header':', i);-
569 if (j == -1
j == -1Description
TRUEevaluated 2138 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
FALSEevaluated 14556 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
)
2138-14556
570 break;
executed 2138 times by 13 tests: break;
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
2138
571 const QByteArray field = header.mid(i, j - i).trimmed();-
572 j++;-
573-
574 QByteArray value;-
575 do {-
576 i = lfheader.indexInindexOf(header'\n', j);-
577 if (i == -1
i == -1Description
TRUEnever evaluated
FALSEevaluated 14562 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
)
0-14562
578 break;
never executed: break;
0
579 if (!value.isEmpty()
!value.isEmpty()Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_qhttpnetworkreply - unknown status
FALSEevaluated 14561 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
)
1-14561
580 value += ' ';
executed 1 time by 1 test: value += ' ';
Executed by:
  • tst_qhttpnetworkreply - unknown status
1
581-
582 bool hasCR = (i
iDescription
TRUEevaluated 14562 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
FALSEnever evaluated
&& header[i-1] == '\r'
header[i-1] == '\r'Description
TRUEevaluated 14555 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
FALSEevaluated 7 times by 2 tests
Evaluated by:
  • tst_QNetworkReply
  • tst_qhttpnetworkreply - unknown status
);
0-14562
583 int length = i -(hasCR
hasCRDescription
TRUEevaluated 14555 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
FALSEevaluated 7 times by 2 tests
Evaluated by:
  • tst_QNetworkReply
  • tst_qhttpnetworkreply - unknown status
? 1: 0) - j;
7-14555
584 value += header.mid(j, length).trimmed();-
585 j = ++i;-
586 }
executed 14562 times by 13 tests: end of block
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
while (i < header.count()
i < header.count()Description
TRUEevaluated 14555 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
FALSEevaluated 7 times by 1 test
Evaluated by:
  • tst_qhttpnetworkreply - unknown status
&& (header.at(i) == ' '
header.at(i) == ' 'Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • tst_qhttpnetworkreply - unknown status
FALSEevaluated 14549 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
|| header.at(i) == '\t'
header.at(i) == '\t'Description
TRUEnever evaluated
FALSEevaluated 14549 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
));
0-14562
587 if (i == -1
i == -1Description
TRUEnever evaluated
FALSEevaluated 14556 times by 13 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
)
0-14556
588 break;
never executed: break;
0
589-
590 fields.append(qMakePair(field, value));-
591 }
executed 14556 times by 13 tests: end of block
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
14556
592}
executed 2145 times by 13 tests: end of block
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QHttpNetworkConnection
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_Spdy
  • tst_qhttpnetworkreply - unknown status
  • tst_qhttpsocketengine - unknown status
  • tst_qsslsocket - unknown status
  • tst_qsslsocket_onDemandCertificates_member - unknown status
  • tst_qsslsocket_onDemandCertificates_static - unknown status
  • tst_qtcpsocket - unknown status
2145
593-
594bool QHttpNetworkReplyPrivate::isChunked()-
595{-
596 return chunkedTransferEncoding;-
597}-
598-
599bool QHttpNetworkReplyPrivate::isConnectionCloseEnabled()-
600{-
601 return connectionCloseEnabled || forceConnectionCloseEnabled;-
602}-
603-
604-
605-
606qint64 QHttpNetworkReplyPrivate::readBodyVeryFast(QAbstractSocket *socket, char *b)-
607{-
608-
609 qint64 haveRead = 0;-
610 haveRead = socket->read(b, bodyLength - contentRead);-
611 if (haveRead == -1) {-
612 return -1;-
613 }-
614 contentRead += haveRead;-
615-
616 if (contentRead == bodyLength) {-
617 state = AllDoneState;-
618 }-
619-
620 return haveRead;-
621}-
622-
623-
624-
625qint64 QHttpNetworkReplyPrivate::readBodyFast(QAbstractSocket *socket, QByteDataBuffer *rb)-
626{-
627-
628 qint64 toBeRead = qMin(socket->bytesAvailable(), bodyLength - contentRead);-
629 if (readBufferMaxSize)-
630 toBeRead = qMin(toBeRead, readBufferMaxSize);-
631-
632 if (!toBeRead)-
633 return 0;-
634-
635 QByteArray bd;-
636 bd.resize(toBeRead);-
637 qint64 haveRead = socket->read(bd.data(), toBeRead);-
638 if (haveRead == -1) {-
639 bd.clear();-
640 return 0;-
641 }-
642 bd.resize(haveRead);-
643-
644 rb->append(bd);-
645-
646 if (contentRead + haveRead == bodyLength) {-
647 state = AllDoneState;-
648 }-
649-
650 contentRead += haveRead;-
651 return haveRead;-
652}-
653-
654-
655qint64 QHttpNetworkReplyPrivate::readBody(QAbstractSocket *socket, QByteDataBuffer *out)-
656{-
657 qint64 bytes = 0;-
658-
659-
660-
661 QByteDataBuffer *tempOutDataBuffer = (autoDecompress ? new QByteDataBuffer : out);-
662-
663-
664-
665-
666-
667 if (isChunked()) {-
668-
669 bytes += readReplyBodyChunked(socket, tempOutDataBuffer);-
670 } else if (bodyLength > 0) {-
671-
672 bytes += readReplyBodyRaw(socket, tempOutDataBuffer, bodyLength - contentRead);-
673 if (contentRead + bytes == bodyLength)-
674 state = AllDoneState;-
675 } else {-
676-
677 bytes += readReplyBodyRaw(socket, tempOutDataBuffer, socket->bytesAvailable());-
678 }-
679-
680-
681-
682 if (autoDecompress) {-
683 qint64 uncompressRet = uncompressBodyData(tempOutDataBuffer, out);-
684 delete tempOutDataBuffer;-
685 if (uncompressRet < 0)-
686 return -1;-
687 }-
688-
689-
690 contentRead += bytes;-
691 return bytes;-
692}-
693-
694-
695int QHttpNetworkReplyPrivate::initializeInflateStream()-
696{-
697 inflateStrm->zalloc = 0;-
698 inflateStrm->zfree = 0;-
699 inflateStrm->opaque = 0;-
700 inflateStrm->avail_in = 0;-
701 inflateStrm->next_in = 0;-
702-
703-
704-
705 int ret = inflateInit2_((inflateStrm), (15 +32), "1.2.8", (int)sizeof(z_stream));-
706 ((!(ret == 0)) ? qt_assert("ret == Z_OK",__FILE__,749751) : qt_noop());-
707 return ret;-
708}-
709-
710qint64 QHttpNetworkReplyPrivate::uncompressBodyData(QByteDataBuffer *in, QByteDataBuffer *out)-
711{-
712 if (!inflateStrm) {-
713 inflateStrm = new z_stream;-
714 initializeInflateStream();-
715 }-
716-
717 if (!inflateStrm)-
718 return -1;-
719-
720 bool triedRawDeflate = false;-
721 for (int i = 0; i < in->bufferCount(); i++) {-
722 QByteArray &bIn = (*in)[i];-
723-
724 inflateStrm->avail_in = bIn.size();-
725 inflateStrm->next_in = reinterpret_cast<Bytef*>(bIn.data());-
726-
727 do {-
728 QByteArray bOut;-
729-
730 bOut.reserve(inflateStrm->avail_in * 3 + 512);-
731 inflateStrm->avail_out = bOut.capacity();-
732 inflateStrm->next_out = reinterpret_cast<Bytef*>(bOut.data());-
733-
734 int ret = inflate(inflateStrm, 0);-
735-
736-
737 if (ret == (-3) && !triedRawDeflate) {-
738 inflateEnd(inflateStrm);-
739 triedRawDeflate = true;-
740 inflateStrm->zalloc = 0;-
741 inflateStrm->zfree = 0;-
742 inflateStrm->opaque = 0;-
743 inflateStrm->avail_in = 0;-
744 inflateStrm->next_in = 0;-
745 int ret = inflateInit2_((inflateStrm), (-15), "1.2.8", (int)sizeof(z_stream));-
746 if (ret != 0) {-
747 return -1;-
748 } else {-
749 inflateStrm->avail_in = bIn.size();-
750 inflateStrm->next_in = reinterpret_cast<Bytef*>(bIn.data());-
751 continue;-
752 }-
753 } else if (ret < 0 || ret == 2) {-
754 return -1;-
755 }-
756 bOut.resize(bOut.capacity() - inflateStrm->avail_out);-
757 out->append(bOut);-
758 if (ret == 1)-
759 return out->byteAmount();-
760 } while (inflateStrm->avail_in > 0);-
761 }-
762-
763 return out->byteAmount();-
764}-
765-
766-
767qint64 QHttpNetworkReplyPrivate::readReplyBodyRaw(QAbstractSocket *socket, QByteDataBuffer *out, qint64 size)-
768{-
769-
770 qint64 bytes = 0;-
771 ((!(socket)) ? qt_assert("socket",__FILE__,814816) : qt_noop());-
772 ((!(out)) ? qt_assert("out",__FILE__,815817) : qt_noop());-
773-
774 int toBeRead = qMin<qint64>(128*1024, qMin<qint64>(size, socket->bytesAvailable()));-
775-
776 if (readBufferMaxSize)-
777 toBeRead = qMin<qint64>(toBeRead, readBufferMaxSize);-
778-
779 while (toBeRead > 0) {-
780 QByteArray byteData;-
781 byteData.resize(toBeRead);-
782 qint64 haveRead = socket->read(byteData.data(), byteData.size());-
783 if (haveRead <= 0) {-
784-
785 byteData.clear();-
786 return bytes;-
787 }-
788-
789 byteData.resize(haveRead);-
790 out->append(byteData);-
791 bytes += haveRead;-
792 size -= haveRead;-
793-
794 toBeRead = qMin<qint64>(128*1024, qMin<qint64>(size, socket->bytesAvailable()));-
795 }-
796 return bytes;-
797-
798}-
799-
800qint64 QHttpNetworkReplyPrivate::readReplyBodyChunked(QAbstractSocket *socket, QByteDataBuffer *out)-
801{-
802 qint64 bytes = 0;-
803 while (socket->bytesAvailable()) {-
804-
805 if (readBufferMaxSize && (bytes > readBufferMaxSize))-
806 break;-
807-
808 if (!lastChunkRead && currentChunkRead >= currentChunkSize) {-
809-
810 currentChunkSize = 0;-
811 currentChunkRead = 0;-
812 if (bytes) {-
813-
814 char crlf[2];-
815-
816 qint64 haveRead = socket->read(crlf, 2);-
817-
818-
819-
820-
821 if (haveRead != 2)-
822 return bytes;-
823 bytes += haveRead;-
824 }-
825-
826 bytes += getChunkSize(socket, &currentChunkSize);-
827 if (currentChunkSize == -1)-
828 break;-
829 }-
830-
831 if (currentChunkSize == 0 || lastChunkRead) {-
832 lastChunkRead = true;-
833-
834 char crlf[2];-
835 qint64 haveRead = socket->read(crlf, 2);-
836 if (haveRead > 0)-
837 bytes += haveRead;-
838-
839 if ((haveRead == 2 && crlf[0] == '\r' && crlf[1] == '\n') || (haveRead == 1 && crlf[0] == '\n'))-
840 state = AllDoneState;-
841 else if (haveRead == 1 && crlf[0] == '\r')-
842 break;-
843 else if (haveRead > 0) {-
844-
845 forceConnectionCloseEnabled = true;-
846 state = AllDoneState;-
847 }-
848 break;-
849 }-
850-
851-
852 qint64 haveRead = readReplyBodyRaw (socket, out, currentChunkSize - currentChunkRead);-
853 currentChunkRead += haveRead;-
854 bytes += haveRead;-
855-
856-
857-
858 }-
859 return bytes;-
860}-
861-
862qint64 QHttpNetworkReplyPrivate::getChunkSize(QAbstractSocket *socket, qint64 *chunkSize)-
863{-
864 qint64 bytes = 0;-
865 char crlf[2];-
866 *chunkSize = -1;-
867-
868 int bytesAvailable = socket->bytesAvailable();-
869-
870 while (bytesAvailable > bytes) {-
871 qint64 sniffedBytes = socket->peek(crlf, 2);-
872 int fragmentSize = fragment.size();-
873-
874-
875 if ((fragmentSize && sniffedBytes == 2 && crlf[0] == '\r' && crlf[1] == '\n')-
876 ||(fragmentSize > 1 && fragment.endsWith('\r') && crlf[0] == '\n'))-
877 {-
878 bytes += socket->read(crlf, 1);-
879 if (crlf[0] == '\r')-
880 bytes += socket->read(crlf, 1);-
881 bool ok = false;-
882-
883 fragment = fragment.mid(0, fragment.indexOf(';')).trimmed();-
884 *chunkSize = fragment.toLong(&ok, 16);-
885 fragment.clear();-
886 break;-
887 } else {-
888-
889 char c = 0;-
890 qint64 haveRead = socket->read(&c, 1);-
891 if (haveRead < 0) {-
892 return -1;-
893 }-
894 bytes += haveRead;-
895 fragment.append(c);-
896 }-
897 }-
898-
899 return bytes;-
900}-
901-
902bool QHttpNetworkReplyPrivate::isRedirecting() const-
903{-
904-
905-
906 return (QHttpNetworkReply::isHttpRedirect(statusCode)-
907 && request.isFollowRedirects());-
908}-
909-
910bool QHttpNetworkReplyPrivate::shouldEmitSignals()-
911{-
912-
913-
914 return (statusCode != 401 && statusCode != 407);-
915}-
916-
917bool QHttpNetworkReplyPrivate::expectContent()-
918{-
919-
920 if ((statusCode >= 100 && statusCode < 200)-
921 || statusCode == 204 || statusCode == 304)-
922 return false;-
923 if (request.operation() == QHttpNetworkRequest::Head)-
924 return false;-
925 qint64 expectedContentLength = contentLength();-
926 if (expectedContentLength == 0)-
927 return false;-
928 if (expectedContentLength == -1 && bodyLength == 0) {-
929-
930-
931 return false;-
932 }-
933 return true;-
934}-
935-
936void QHttpNetworkReplyPrivate::eraseData()-
937{-
938 compressedData.clear();-
939 responseData.clear();-
940}-
941-
942-
943-
944-
945-
946QSslConfiguration QHttpNetworkReply::sslConfiguration() const-
947{-
948 const QHttpNetworkReplyPrivate * const d = d_func();-
949-
950 if (!d->connectionChannel)-
951 return QSslConfiguration();-
952-
953 QSslSocket *sslSocket = qobject_cast<QSslSocket*>(d->connectionChannel->socket);-
954 if (!sslSocket)-
955 return QSslConfiguration();-
956-
957 return sslSocket->sslConfiguration();-
958}-
959-
960void QHttpNetworkReply::setSslConfiguration(const QSslConfiguration &config)-
961{-
962 QHttpNetworkReplyPrivate * const d = d_func();-
963 if (d->connection)-
964 d->connection->setSslConfiguration(config);-
965}-
966-
967void QHttpNetworkReply::ignoreSslErrors()-
968{-
969 QHttpNetworkReplyPrivate * const d = d_func();-
970 if (d->connection)-
971 d->connection->ignoreSslErrors();-
972}-
973-
974void QHttpNetworkReply::ignoreSslErrors(const QList<QSslError> &errors)-
975{-
976 QHttpNetworkReplyPrivate * const d = d_func();-
977 if (d->connection)-
978 d->connection->ignoreSslErrors(errors);-
979}-
980-
981-
982-
983-
984-
985-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9