| Line | Source Code | Coverage |
|---|
| 1 | /**************************************************************************** | - |
| 2 | ** | - |
| 3 | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | - |
| 4 | ** Contact: http://www.qt-project.org/legal | - |
| 5 | ** | - |
| 6 | ** This file is part of the QtNetwork module of the Qt Toolkit. | - |
| 7 | ** | - |
| 8 | ** $QT_BEGIN_LICENSE:LGPL$ | - |
| 9 | ** Commercial License Usage | - |
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in | - |
| 11 | ** accordance with the commercial license agreement provided with the | - |
| 12 | ** Software or, alternatively, in accordance with the terms contained in | - |
| 13 | ** a written agreement between you and Digia. For licensing terms and | - |
| 14 | ** conditions see http://qt.digia.com/licensing. For further information | - |
| 15 | ** use the contact form at http://qt.digia.com/contact-us. | - |
| 16 | ** | - |
| 17 | ** GNU Lesser General Public License Usage | - |
| 18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | - |
| 19 | ** General Public License version 2.1 as published by the Free Software | - |
| 20 | ** Foundation and appearing in the file LICENSE.LGPL included in the | - |
| 21 | ** packaging of this file. Please review the following information to | - |
| 22 | ** ensure the GNU Lesser General Public License version 2.1 requirements | - |
| 23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | - |
| 24 | ** | - |
| 25 | ** In addition, as a special exception, Digia gives you certain additional | - |
| 26 | ** rights. These rights are described in the Digia Qt LGPL Exception | - |
| 27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | - |
| 28 | ** | - |
| 29 | ** GNU General Public License Usage | - |
| 30 | ** Alternatively, this file may be used under the terms of the GNU | - |
| 31 | ** General Public License version 3.0 as published by the Free Software | - |
| 32 | ** Foundation and appearing in the file LICENSE.GPL included in the | - |
| 33 | ** packaging of this file. Please review the following information to | - |
| 34 | ** ensure the GNU General Public License version 3.0 requirements will be | - |
| 35 | ** met: http://www.gnu.org/copyleft/gpl.html. | - |
| 36 | ** | - |
| 37 | ** | - |
| 38 | ** $QT_END_LICENSE$ | - |
| 39 | ** | - |
| 40 | ****************************************************************************/ | - |
| 41 | | - |
| 42 | #include "qhttpnetworkrequest_p.h" | - |
| 43 | #include "private/qnoncontiguousbytedevice_p.h" | - |
| 44 | | - |
| 45 | #ifndef QT_NO_HTTP | - |
| 46 | | - |
| 47 | QT_BEGIN_NAMESPACE | - |
| 48 | | - |
| 49 | QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(QHttpNetworkRequest::Operation op, | - |
| 50 | QHttpNetworkRequest::Priority pri, const QUrl &newUrl) | - |
| 51 | : QHttpNetworkHeaderPrivate(newUrl), operation(op), priority(pri), uploadByteDevice(0), | - |
| 52 | autoDecompress(false), pipeliningAllowed(false), withCredentials(true) | - |
| 53 | { | - |
| 54 | } executed: }Execution Count:5837 | 5837 |
| 55 | | - |
| 56 | QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(const QHttpNetworkRequestPrivate &other) | - |
| 57 | : QHttpNetworkHeaderPrivate(other) | - |
| 58 | { | - |
| 59 | operation = other.operation; executed (the execution status of this line is deduced): operation = other.operation; | - |
| 60 | priority = other.priority; executed (the execution status of this line is deduced): priority = other.priority; | - |
| 61 | uploadByteDevice = other.uploadByteDevice; executed (the execution status of this line is deduced): uploadByteDevice = other.uploadByteDevice; | - |
| 62 | autoDecompress = other.autoDecompress; executed (the execution status of this line is deduced): autoDecompress = other.autoDecompress; | - |
| 63 | pipeliningAllowed = other.pipeliningAllowed; executed (the execution status of this line is deduced): pipeliningAllowed = other.pipeliningAllowed; | - |
| 64 | customVerb = other.customVerb; executed (the execution status of this line is deduced): customVerb = other.customVerb; | - |
| 65 | withCredentials = other.withCredentials; executed (the execution status of this line is deduced): withCredentials = other.withCredentials; | - |
| 66 | ssl = other.ssl; executed (the execution status of this line is deduced): ssl = other.ssl; | - |
| 67 | } executed: }Execution Count:867 | 867 |
| 68 | | - |
| 69 | QHttpNetworkRequestPrivate::~QHttpNetworkRequestPrivate() | - |
| 70 | { | - |
| 71 | } | - |
| 72 | | - |
| 73 | bool QHttpNetworkRequestPrivate::operator==(const QHttpNetworkRequestPrivate &other) const | - |
| 74 | { | - |
| 75 | return QHttpNetworkHeaderPrivate::operator==(other) never executed: return QHttpNetworkHeaderPrivate::operator==(other) && (operation == other.operation) && (ssl == other.ssl) && (uploadByteDevice == other.uploadByteDevice); | 0 |
| 76 | && (operation == other.operation) never executed: return QHttpNetworkHeaderPrivate::operator==(other) && (operation == other.operation) && (ssl == other.ssl) && (uploadByteDevice == other.uploadByteDevice); | 0 |
| 77 | && (ssl == other.ssl) never executed: return QHttpNetworkHeaderPrivate::operator==(other) && (operation == other.operation) && (ssl == other.ssl) && (uploadByteDevice == other.uploadByteDevice); | 0 |
| 78 | && (uploadByteDevice == other.uploadByteDevice); never executed: return QHttpNetworkHeaderPrivate::operator==(other) && (operation == other.operation) && (ssl == other.ssl) && (uploadByteDevice == other.uploadByteDevice); | 0 |
| 79 | } | - |
| 80 | | - |
| 81 | QByteArray QHttpNetworkRequestPrivate::methodName() const | - |
| 82 | { | - |
| 83 | switch (operation) { | - |
| 84 | case QHttpNetworkRequest::Get: | - |
| 85 | return "GET"; executed: return "GET";Execution Count:707 | 707 |
| 86 | case QHttpNetworkRequest::Head: | - |
| 87 | return "HEAD"; executed: return "HEAD";Execution Count:47 | 47 |
| 88 | case QHttpNetworkRequest::Post: | - |
| 89 | return "POST"; executed: return "POST";Execution Count:238 | 238 |
| 90 | case QHttpNetworkRequest::Options: | - |
| 91 | return "OPTIONS"; never executed: return "OPTIONS"; | 0 |
| 92 | case QHttpNetworkRequest::Put: | - |
| 93 | return "PUT"; executed: return "PUT";Execution Count:36 | 36 |
| 94 | case QHttpNetworkRequest::Delete: | - |
| 95 | return "DELETE"; executed: return "DELETE";Execution Count:7 | 7 |
| 96 | case QHttpNetworkRequest::Trace: | - |
| 97 | return "TRACE"; never executed: return "TRACE"; | 0 |
| 98 | case QHttpNetworkRequest::Connect: | - |
| 99 | return "CONNECT"; never executed: return "CONNECT"; | 0 |
| 100 | case QHttpNetworkRequest::Custom: | - |
| 101 | return customVerb; executed: return customVerb;Execution Count:6 | 6 |
| 102 | default: | - |
| 103 | break; | 0 |
| 104 | } | - |
| 105 | return QByteArray(); never executed: return QByteArray(); | 0 |
| 106 | } | - |
| 107 | | - |
| 108 | QByteArray QHttpNetworkRequestPrivate::uri(bool throughProxy) const | - |
| 109 | { | - |
| 110 | QUrl::FormattingOptions format(QUrl::RemoveFragment | QUrl::RemoveUserInfo | QUrl::FullyEncoded); executed (the execution status of this line is deduced): QUrl::FormattingOptions format(QUrl::RemoveFragment | QUrl::RemoveUserInfo | QUrl::FullyEncoded); | - |
| 111 | | - |
| 112 | // for POST, query data is send as content | - |
| 113 | if (operation == QHttpNetworkRequest::Post && !uploadByteDevice) evaluated: operation == QHttpNetworkRequest::Post| yes Evaluation Count:238 | yes Evaluation Count:803 |
partially evaluated: !uploadByteDevice| no Evaluation Count:0 | yes Evaluation Count:238 |
| 0-803 |
| 114 | format |= QUrl::RemoveQuery; never executed: format |= QUrl::RemoveQuery; | 0 |
| 115 | // for requests through proxy, the Request-URI contains full url | - |
| 116 | if (!throughProxy) evaluated: !throughProxy| yes Evaluation Count:937 | yes Evaluation Count:104 |
| 104-937 |
| 117 | format |= QUrl::RemoveScheme | QUrl::RemoveAuthority; executed: format |= QUrl::RemoveScheme | QUrl::RemoveAuthority;Execution Count:937 | 937 |
| 118 | QUrl copy = url; executed (the execution status of this line is deduced): QUrl copy = url; | - |
| 119 | if (copy.path().isEmpty()) evaluated: copy.path().isEmpty()| yes Evaluation Count:179 | yes Evaluation Count:862 |
| 179-862 |
| 120 | copy.setPath(QStringLiteral("/")); executed: copy.setPath(QString::fromUtf8("" "/" "", sizeof("/") - 1));Execution Count:179 | 179 |
| 121 | QByteArray uri = copy.toEncoded(format); executed (the execution status of this line is deduced): QByteArray uri = copy.toEncoded(format); | - |
| 122 | return uri; executed: return uri;Execution Count:1041 | 1041 |
| 123 | } | - |
| 124 | | - |
| 125 | QByteArray QHttpNetworkRequestPrivate::header(const QHttpNetworkRequest &request, bool throughProxy) | - |
| 126 | { | - |
| 127 | QList<QPair<QByteArray, QByteArray> > fields = request.header(); executed (the execution status of this line is deduced): QList<QPair<QByteArray, QByteArray> > fields = request.header(); | - |
| 128 | QByteArray ba; executed (the execution status of this line is deduced): QByteArray ba; | - |
| 129 | ba.reserve(40 + fields.length()*25); // very rough lower bound estimation executed (the execution status of this line is deduced): ba.reserve(40 + fields.length()*25); | - |
| 130 | | - |
| 131 | ba += request.d->methodName(); executed (the execution status of this line is deduced): ba += request.d->methodName(); | - |
| 132 | ba += ' '; executed (the execution status of this line is deduced): ba += ' '; | - |
| 133 | ba += request.d->uri(throughProxy); executed (the execution status of this line is deduced): ba += request.d->uri(throughProxy); | - |
| 134 | | - |
| 135 | ba += " HTTP/"; executed (the execution status of this line is deduced): ba += " HTTP/"; | - |
| 136 | ba += QByteArray::number(request.majorVersion()); executed (the execution status of this line is deduced): ba += QByteArray::number(request.majorVersion()); | - |
| 137 | ba += '.'; executed (the execution status of this line is deduced): ba += '.'; | - |
| 138 | ba += QByteArray::number(request.minorVersion()); executed (the execution status of this line is deduced): ba += QByteArray::number(request.minorVersion()); | - |
| 139 | ba += "\r\n"; executed (the execution status of this line is deduced): ba += "\r\n"; | - |
| 140 | | - |
| 141 | QList<QPair<QByteArray, QByteArray> >::const_iterator it = fields.constBegin(); executed (the execution status of this line is deduced): QList<QPair<QByteArray, QByteArray> >::const_iterator it = fields.constBegin(); | - |
| 142 | QList<QPair<QByteArray, QByteArray> >::const_iterator endIt = fields.constEnd(); executed (the execution status of this line is deduced): QList<QPair<QByteArray, QByteArray> >::const_iterator endIt = fields.constEnd(); | - |
| 143 | for (; it != endIt; ++it) { evaluated: it != endIt| yes Evaluation Count:4974 | yes Evaluation Count:859 |
| 859-4974 |
| 144 | ba += it->first; executed (the execution status of this line is deduced): ba += it->first; | - |
| 145 | ba += ": "; executed (the execution status of this line is deduced): ba += ": "; | - |
| 146 | ba += it->second; executed (the execution status of this line is deduced): ba += it->second; | - |
| 147 | ba += "\r\n"; executed (the execution status of this line is deduced): ba += "\r\n"; | - |
| 148 | } executed: }Execution Count:4974 | 4974 |
| 149 | if (request.d->operation == QHttpNetworkRequest::Post) { evaluated: request.d->operation == QHttpNetworkRequest::Post| yes Evaluation Count:187 | yes Evaluation Count:672 |
| 187-672 |
| 150 | // add content type, if not set in the request | - |
| 151 | if (request.headerField("content-type").isEmpty()) { partially evaluated: request.headerField("content-type").isEmpty()| no Evaluation Count:0 | yes Evaluation Count:187 |
| 0-187 |
| 152 | //Content-Type is mandatory. We can't say anything about the encoding, but x-www-form-urlencoded is the most likely to work. | - |
| 153 | //This warning indicates a bug in application code not setting a required header. | - |
| 154 | //Note that if using QHttpMultipart, the content-type is set in QNetworkAccessManagerPrivate::prepareMultipart already | - |
| 155 | qWarning("content-type missing in HTTP POST, defaulting to application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix this problem."); never executed (the execution status of this line is deduced): QMessageLogger("access/qhttpnetworkrequest.cpp", 155, __PRETTY_FUNCTION__).warning("content-type missing in HTTP POST, defaulting to application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix this problem."); | - |
| 156 | ba += "Content-Type: application/x-www-form-urlencoded\r\n"; never executed (the execution status of this line is deduced): ba += "Content-Type: application/x-www-form-urlencoded\r\n"; | - |
| 157 | } | 0 |
| 158 | if (!request.d->uploadByteDevice && request.d->url.hasQuery()) { partially evaluated: !request.d->uploadByteDevice| no Evaluation Count:0 | yes Evaluation Count:187 |
never evaluated: request.d->url.hasQuery() | 0-187 |
| 159 | QByteArray query = request.d->url.query(QUrl::FullyEncoded).toLatin1(); never executed (the execution status of this line is deduced): QByteArray query = request.d->url.query(QUrl::FullyEncoded).toLatin1(); | - |
| 160 | ba += "Content-Length: "; never executed (the execution status of this line is deduced): ba += "Content-Length: "; | - |
| 161 | ba += QByteArray::number(query.size()); never executed (the execution status of this line is deduced): ba += QByteArray::number(query.size()); | - |
| 162 | ba += "\r\n\r\n"; never executed (the execution status of this line is deduced): ba += "\r\n\r\n"; | - |
| 163 | ba += query; never executed (the execution status of this line is deduced): ba += query; | - |
| 164 | } else { | 0 |
| 165 | ba += "\r\n"; executed (the execution status of this line is deduced): ba += "\r\n"; | - |
| 166 | } executed: }Execution Count:187 | 187 |
| 167 | } else { | - |
| 168 | ba += "\r\n"; executed (the execution status of this line is deduced): ba += "\r\n"; | - |
| 169 | } executed: }Execution Count:672 | 672 |
| 170 | return ba; executed: return ba;Execution Count:859 | 859 |
| 171 | } | - |
| 172 | | - |
| 173 | | - |
| 174 | // QHttpNetworkRequest | - |
| 175 | | - |
| 176 | QHttpNetworkRequest::QHttpNetworkRequest(const QUrl &url, Operation operation, Priority priority) | - |
| 177 | : d(new QHttpNetworkRequestPrivate(operation, priority, url)) | - |
| 178 | { | - |
| 179 | } executed: }Execution Count:5837 | 5837 |
| 180 | | - |
| 181 | QHttpNetworkRequest::QHttpNetworkRequest(const QHttpNetworkRequest &other) | - |
| 182 | : QHttpNetworkHeader(other), d(other.d) | - |
| 183 | { | - |
| 184 | } executed: }Execution Count:3739 | 3739 |
| 185 | | - |
| 186 | QHttpNetworkRequest::~QHttpNetworkRequest() | - |
| 187 | { | - |
| 188 | } | - |
| 189 | | - |
| 190 | QUrl QHttpNetworkRequest::url() const | - |
| 191 | { | - |
| 192 | return d->url; executed: return d->url;Execution Count:3179 | 3179 |
| 193 | } | - |
| 194 | void QHttpNetworkRequest::setUrl(const QUrl &url) | - |
| 195 | { | - |
| 196 | d->url = url; executed (the execution status of this line is deduced): d->url = url; | - |
| 197 | } executed: }Execution Count:738 | 738 |
| 198 | | - |
| 199 | bool QHttpNetworkRequest::isSsl() const | - |
| 200 | { | - |
| 201 | return d->ssl; executed: return d->ssl;Execution Count:694 | 694 |
| 202 | } | - |
| 203 | void QHttpNetworkRequest::setSsl(bool s) | - |
| 204 | { | - |
| 205 | d->ssl = s; executed (the execution status of this line is deduced): d->ssl = s; | - |
| 206 | } executed: }Execution Count:712 | 712 |
| 207 | | - |
| 208 | qint64 QHttpNetworkRequest::contentLength() const | - |
| 209 | { | - |
| 210 | return d->contentLength(); executed: return d->contentLength();Execution Count:584 | 584 |
| 211 | } | - |
| 212 | | - |
| 213 | void QHttpNetworkRequest::setContentLength(qint64 length) | - |
| 214 | { | - |
| 215 | d->setContentLength(length); executed (the execution status of this line is deduced): d->setContentLength(length); | - |
| 216 | } executed: }Execution Count:178 | 178 |
| 217 | | - |
| 218 | QList<QPair<QByteArray, QByteArray> > QHttpNetworkRequest::header() const | - |
| 219 | { | - |
| 220 | return d->fields; executed: return d->fields;Execution Count:859 | 859 |
| 221 | } | - |
| 222 | | - |
| 223 | QByteArray QHttpNetworkRequest::headerField(const QByteArray &name, const QByteArray &defaultValue) const | - |
| 224 | { | - |
| 225 | return d->headerField(name, defaultValue); executed: return d->headerField(name, defaultValue);Execution Count:3648 | 3648 |
| 226 | } | - |
| 227 | | - |
| 228 | void QHttpNetworkRequest::setHeaderField(const QByteArray &name, const QByteArray &data) | - |
| 229 | { | - |
| 230 | d->setHeaderField(name, data); executed (the execution status of this line is deduced): d->setHeaderField(name, data); | - |
| 231 | } executed: }Execution Count:3966 | 3966 |
| 232 | | - |
| 233 | QHttpNetworkRequest &QHttpNetworkRequest::operator=(const QHttpNetworkRequest &other) | - |
| 234 | { | - |
| 235 | d = other.d; executed (the execution status of this line is deduced): d = other.d; | - |
| 236 | return *this; executed: return *this;Execution Count:2743 | 2743 |
| 237 | } | - |
| 238 | | - |
| 239 | bool QHttpNetworkRequest::operator==(const QHttpNetworkRequest &other) const | - |
| 240 | { | - |
| 241 | return d->operator==(*other.d); never executed: return d->operator==(*other.d); | 0 |
| 242 | } | - |
| 243 | | - |
| 244 | QHttpNetworkRequest::Operation QHttpNetworkRequest::operation() const | - |
| 245 | { | - |
| 246 | return d->operation; executed: return d->operation;Execution Count:872 | 872 |
| 247 | } | - |
| 248 | | - |
| 249 | void QHttpNetworkRequest::setOperation(Operation operation) | - |
| 250 | { | - |
| 251 | d->operation = operation; executed (the execution status of this line is deduced): d->operation = operation; | - |
| 252 | } executed: }Execution Count:709 | 709 |
| 253 | | - |
| 254 | QByteArray QHttpNetworkRequest::customVerb() const | - |
| 255 | { | - |
| 256 | return d->customVerb; never executed: return d->customVerb; | 0 |
| 257 | } | - |
| 258 | | - |
| 259 | void QHttpNetworkRequest::setCustomVerb(const QByteArray &customVerb) | - |
| 260 | { | - |
| 261 | d->customVerb = customVerb; executed (the execution status of this line is deduced): d->customVerb = customVerb; | - |
| 262 | } executed: }Execution Count:6 | 6 |
| 263 | | - |
| 264 | QHttpNetworkRequest::Priority QHttpNetworkRequest::priority() const | - |
| 265 | { | - |
| 266 | return d->priority; executed: return d->priority;Execution Count:694 | 694 |
| 267 | } | - |
| 268 | | - |
| 269 | void QHttpNetworkRequest::setPriority(Priority priority) | - |
| 270 | { | - |
| 271 | d->priority = priority; executed (the execution status of this line is deduced): d->priority = priority; | - |
| 272 | } executed: }Execution Count:709 | 709 |
| 273 | | - |
| 274 | bool QHttpNetworkRequest::isPipeliningAllowed() const | - |
| 275 | { | - |
| 276 | return d->pipeliningAllowed; executed: return d->pipeliningAllowed;Execution Count:805 | 805 |
| 277 | } | - |
| 278 | | - |
| 279 | void QHttpNetworkRequest::setPipeliningAllowed(bool b) | - |
| 280 | { | - |
| 281 | d->pipeliningAllowed = b; executed (the execution status of this line is deduced): d->pipeliningAllowed = b; | - |
| 282 | } executed: }Execution Count:20 | 20 |
| 283 | | - |
| 284 | bool QHttpNetworkRequest::withCredentials() const | - |
| 285 | { | - |
| 286 | return d->withCredentials; executed: return d->withCredentials;Execution Count:1289 | 1289 |
| 287 | } | - |
| 288 | | - |
| 289 | void QHttpNetworkRequest::setWithCredentials(bool b) | - |
| 290 | { | - |
| 291 | d->withCredentials = b; executed (the execution status of this line is deduced): d->withCredentials = b; | - |
| 292 | } executed: }Execution Count:1 | 1 |
| 293 | | - |
| 294 | void QHttpNetworkRequest::setUploadByteDevice(QNonContiguousByteDevice *bd) | - |
| 295 | { | - |
| 296 | d->uploadByteDevice = bd; executed (the execution status of this line is deduced): d->uploadByteDevice = bd; | - |
| 297 | } executed: }Execution Count:179 | 179 |
| 298 | | - |
| 299 | QNonContiguousByteDevice* QHttpNetworkRequest::uploadByteDevice() const | - |
| 300 | { | - |
| 301 | return d->uploadByteDevice; executed: return d->uploadByteDevice;Execution Count:7902 | 7902 |
| 302 | } | - |
| 303 | | - |
| 304 | int QHttpNetworkRequest::majorVersion() const | - |
| 305 | { | - |
| 306 | return 1; executed: return 1;Execution Count:859 | 859 |
| 307 | } | - |
| 308 | | - |
| 309 | int QHttpNetworkRequest::minorVersion() const | - |
| 310 | { | - |
| 311 | return 1; executed: return 1;Execution Count:859 | 859 |
| 312 | } | - |
| 313 | | - |
| 314 | | - |
| 315 | QT_END_NAMESPACE | - |
| 316 | | - |
| 317 | #endif | - |
| 318 | | - |
| 319 | | - |
| | |