| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/network/access/qnetworkrequest.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||
| 2 | class QNetworkRequestPrivate: public QSharedData, public QNetworkHeadersPrivate | - | ||||||||||||
| 3 | { | - | ||||||||||||
| 4 | public: | - | ||||||||||||
| 5 | static const int maxRedirectCount = 50; | - | ||||||||||||
| 6 | inline QNetworkRequestPrivate() | - | ||||||||||||
| 7 | : priority(QNetworkRequest::NormalPriority) | - | ||||||||||||
| 8 | - | |||||||||||||
| 9 | , sslConfiguration(0) | - | ||||||||||||
| 10 | - | |||||||||||||
| 11 | , maxRedirectsAllowed(maxRedirectCount) | - | ||||||||||||
| 12 | { qRegisterMetaType<QNetworkRequest>(); } | - | ||||||||||||
| 13 | ~QNetworkRequestPrivate() | - | ||||||||||||
| 14 | { | - | ||||||||||||
| 15 | - | |||||||||||||
| 16 | delete sslConfiguration; | - | ||||||||||||
| 17 | - | |||||||||||||
| 18 | } | - | ||||||||||||
| 19 | - | |||||||||||||
| 20 | - | |||||||||||||
| 21 | QNetworkRequestPrivate(const QNetworkRequestPrivate &other) | - | ||||||||||||
| 22 | : QSharedData(other), QNetworkHeadersPrivate(other) | - | ||||||||||||
| 23 | { | - | ||||||||||||
| 24 | url = other.url; | - | ||||||||||||
| 25 | priority = other.priority; | - | ||||||||||||
| 26 | maxRedirectsAllowed = other.maxRedirectsAllowed; | - | ||||||||||||
| 27 | - | |||||||||||||
| 28 | sslConfiguration = 0; | - | ||||||||||||
| 29 | if (other.sslConfiguration) | - | ||||||||||||
| 30 | sslConfiguration = new QSslConfiguration(*other.sslConfiguration); | - | ||||||||||||
| 31 | - | |||||||||||||
| 32 | } | - | ||||||||||||
| 33 | - | |||||||||||||
| 34 | inline bool operator==(const QNetworkRequestPrivate &other) const | - | ||||||||||||
| 35 | { | - | ||||||||||||
| 36 | return url == other.url && | - | ||||||||||||
| 37 | priority == other.priority && | - | ||||||||||||
| 38 | rawHeaders == other.rawHeaders && | - | ||||||||||||
| 39 | attributes == other.attributes && | - | ||||||||||||
| 40 | maxRedirectsAllowed == other.maxRedirectsAllowed; | - | ||||||||||||
| 41 | - | |||||||||||||
| 42 | } | - | ||||||||||||
| 43 | - | |||||||||||||
| 44 | QUrl url; | - | ||||||||||||
| 45 | QNetworkRequest::Priority priority; | - | ||||||||||||
| 46 | - | |||||||||||||
| 47 | mutable QSslConfiguration *sslConfiguration; | - | ||||||||||||
| 48 | - | |||||||||||||
| 49 | int maxRedirectsAllowed; | - | ||||||||||||
| 50 | }; | - | ||||||||||||
| 51 | - | |||||||||||||
| 52 | - | |||||||||||||
| 53 | - | |||||||||||||
| 54 | - | |||||||||||||
| 55 | - | |||||||||||||
| 56 | - | |||||||||||||
| 57 | - | |||||||||||||
| 58 | QNetworkRequest::QNetworkRequest(const QUrl &url) | - | ||||||||||||
| 59 | : d(new QNetworkRequestPrivate) | - | ||||||||||||
| 60 | { | - | ||||||||||||
| 61 | d->url = url; | - | ||||||||||||
| 62 | } | - | ||||||||||||
| 63 | - | |||||||||||||
| 64 | - | |||||||||||||
| 65 | - | |||||||||||||
| 66 | - | |||||||||||||
| 67 | QNetworkRequest::QNetworkRequest(const QNetworkRequest &other) | - | ||||||||||||
| 68 | : d(other.d) | - | ||||||||||||
| 69 | { | - | ||||||||||||
| 70 | } | - | ||||||||||||
| 71 | - | |||||||||||||
| 72 | - | |||||||||||||
| 73 | - | |||||||||||||
| 74 | - | |||||||||||||
| 75 | QNetworkRequest::~QNetworkRequest() | - | ||||||||||||
| 76 | { | - | ||||||||||||
| 77 | - | |||||||||||||
| 78 | d = 0; | - | ||||||||||||
| 79 | } | - | ||||||||||||
| 80 | - | |||||||||||||
| 81 | - | |||||||||||||
| 82 | - | |||||||||||||
| 83 | - | |||||||||||||
| 84 | - | |||||||||||||
| 85 | - | |||||||||||||
| 86 | - | |||||||||||||
| 87 | bool QNetworkRequest::operator==(const QNetworkRequest &other) const | - | ||||||||||||
| 88 | { | - | ||||||||||||
| 89 | return d == other.d || *d == *other.d; | - | ||||||||||||
| 90 | } | - | ||||||||||||
| 91 | QNetworkRequest &QNetworkRequest::operator=(const QNetworkRequest &other) | - | ||||||||||||
| 92 | { | - | ||||||||||||
| 93 | d = other.d; | - | ||||||||||||
| 94 | return *this; | - | ||||||||||||
| 95 | } | - | ||||||||||||
| 96 | QUrl QNetworkRequest::url() const | - | ||||||||||||
| 97 | { | - | ||||||||||||
| 98 | return d->url; | - | ||||||||||||
| 99 | } | - | ||||||||||||
| 100 | - | |||||||||||||
| 101 | - | |||||||||||||
| 102 | - | |||||||||||||
| 103 | - | |||||||||||||
| 104 | - | |||||||||||||
| 105 | - | |||||||||||||
| 106 | void QNetworkRequest::setUrl(const QUrl &url) | - | ||||||||||||
| 107 | { | - | ||||||||||||
| 108 | d->url = url; | - | ||||||||||||
| 109 | } | - | ||||||||||||
| 110 | QVariant QNetworkRequest::header(KnownHeaders header) const | - | ||||||||||||
| 111 | { | - | ||||||||||||
| 112 | return d->cookedHeaders.value(header); | - | ||||||||||||
| 113 | } | - | ||||||||||||
| 114 | void QNetworkRequest::setHeader(KnownHeaders header, const QVariant &value) | - | ||||||||||||
| 115 | { | - | ||||||||||||
| 116 | d->setCookedHeader(header, value); | - | ||||||||||||
| 117 | } | - | ||||||||||||
| 118 | - | |||||||||||||
| 119 | - | |||||||||||||
| 120 | - | |||||||||||||
| 121 | - | |||||||||||||
| 122 | - | |||||||||||||
| 123 | - | |||||||||||||
| 124 | - | |||||||||||||
| 125 | bool QNetworkRequest::hasRawHeader(const QByteArray &headerName) const | - | ||||||||||||
| 126 | { | - | ||||||||||||
| 127 | return d->findRawHeader(headerName) != d->rawHeaders.constEnd(); | - | ||||||||||||
| 128 | } | - | ||||||||||||
| 129 | QByteArray QNetworkRequest::rawHeader(const QByteArray &headerName) const | - | ||||||||||||
| 130 | { | - | ||||||||||||
| 131 | QNetworkHeadersPrivate::RawHeadersList::ConstIterator it = | - | ||||||||||||
| 132 | d->findRawHeader(headerName); | - | ||||||||||||
| 133 | if (it != d->rawHeaders.constEnd()) | - | ||||||||||||
| 134 | return it->second; | - | ||||||||||||
| 135 | return QByteArray(); | - | ||||||||||||
| 136 | } | - | ||||||||||||
| 137 | - | |||||||||||||
| 138 | - | |||||||||||||
| 139 | - | |||||||||||||
| 140 | - | |||||||||||||
| 141 | - | |||||||||||||
| 142 | - | |||||||||||||
| 143 | - | |||||||||||||
| 144 | QList<QByteArray> QNetworkRequest::rawHeaderList() const | - | ||||||||||||
| 145 | { | - | ||||||||||||
| 146 | return d->rawHeadersKeys(); | - | ||||||||||||
| 147 | } | - | ||||||||||||
| 148 | void QNetworkRequest::setRawHeader(const QByteArray &headerName, const QByteArray &headerValue) | - | ||||||||||||
| 149 | { | - | ||||||||||||
| 150 | d->setRawHeader(headerName, headerValue); | - | ||||||||||||
| 151 | } | - | ||||||||||||
| 152 | QVariant QNetworkRequest::attribute(Attribute code, const QVariant &defaultValue) const | - | ||||||||||||
| 153 | { | - | ||||||||||||
| 154 | return d->attributes.value(code, defaultValue); | - | ||||||||||||
| 155 | } | - | ||||||||||||
| 156 | void QNetworkRequest::setAttribute(Attribute code, const QVariant &value) | - | ||||||||||||
| 157 | { | - | ||||||||||||
| 158 | if (value.isValid()) | - | ||||||||||||
| 159 | d->attributes.insert(code, value); | - | ||||||||||||
| 160 | else | - | ||||||||||||
| 161 | d->attributes.remove(code); | - | ||||||||||||
| 162 | } | - | ||||||||||||
| 163 | QSslConfiguration QNetworkRequest::sslConfiguration() const | - | ||||||||||||
| 164 | { | - | ||||||||||||
| 165 | if (!d->sslConfiguration) | - | ||||||||||||
| 166 | d->sslConfiguration = new QSslConfiguration(QSslConfiguration::defaultConfiguration()); | - | ||||||||||||
| 167 | return *d->sslConfiguration; | - | ||||||||||||
| 168 | } | - | ||||||||||||
| 169 | void QNetworkRequest::setSslConfiguration(const QSslConfiguration &config) | - | ||||||||||||
| 170 | { | - | ||||||||||||
| 171 | if (!d->sslConfiguration) | - | ||||||||||||
| 172 | d->sslConfiguration = new QSslConfiguration(config); | - | ||||||||||||
| 173 | else | - | ||||||||||||
| 174 | *d->sslConfiguration = config; | - | ||||||||||||
| 175 | } | - | ||||||||||||
| 176 | void QNetworkRequest::setOriginatingObject(QObject *object) | - | ||||||||||||
| 177 | { | - | ||||||||||||
| 178 | d->originatingObject = object; | - | ||||||||||||
| 179 | } | - | ||||||||||||
| 180 | QObject *QNetworkRequest::originatingObject() const | - | ||||||||||||
| 181 | { | - | ||||||||||||
| 182 | return d->originatingObject.data(); | - | ||||||||||||
| 183 | } | - | ||||||||||||
| 184 | QNetworkRequest::Priority QNetworkRequest::priority() const | - | ||||||||||||
| 185 | { | - | ||||||||||||
| 186 | return d->priority; | - | ||||||||||||
| 187 | } | - | ||||||||||||
| 188 | void QNetworkRequest::setPriority(Priority priority) | - | ||||||||||||
| 189 | { | - | ||||||||||||
| 190 | d->priority = priority; | - | ||||||||||||
| 191 | } | - | ||||||||||||
| 192 | int QNetworkRequest::maximumRedirectsAllowed() const | - | ||||||||||||
| 193 | { | - | ||||||||||||
| 194 | return d->maxRedirectsAllowed; | - | ||||||||||||
| 195 | } | - | ||||||||||||
| 196 | void QNetworkRequest::setMaximumRedirectsAllowed(int maxRedirectsAllowed) | - | ||||||||||||
| 197 | { | - | ||||||||||||
| 198 | d->maxRedirectsAllowed = maxRedirectsAllowed; | - | ||||||||||||
| 199 | } | - | ||||||||||||
| 200 | - | |||||||||||||
| 201 | static QByteArray headerName(QNetworkRequest::KnownHeaders header) | - | ||||||||||||
| 202 | { | - | ||||||||||||
| 203 | switch (header) { | - | ||||||||||||
| 204 | case QNetworkRequest::ContentTypeHeader: | - | ||||||||||||
| 205 | return "Content-Type"; | - | ||||||||||||
| 206 | - | |||||||||||||
| 207 | case QNetworkRequest::ContentLengthHeader: | - | ||||||||||||
| 208 | return "Content-Length"; | - | ||||||||||||
| 209 | - | |||||||||||||
| 210 | case QNetworkRequest::LocationHeader: | - | ||||||||||||
| 211 | return "Location"; | - | ||||||||||||
| 212 | - | |||||||||||||
| 213 | case QNetworkRequest::LastModifiedHeader: | - | ||||||||||||
| 214 | return "Last-Modified"; | - | ||||||||||||
| 215 | - | |||||||||||||
| 216 | case QNetworkRequest::CookieHeader: | - | ||||||||||||
| 217 | return "Cookie"; | - | ||||||||||||
| 218 | - | |||||||||||||
| 219 | case QNetworkRequest::SetCookieHeader: | - | ||||||||||||
| 220 | return "Set-Cookie"; | - | ||||||||||||
| 221 | - | |||||||||||||
| 222 | case QNetworkRequest::ContentDispositionHeader: | - | ||||||||||||
| 223 | return "Content-Disposition"; | - | ||||||||||||
| 224 | - | |||||||||||||
| 225 | case QNetworkRequest::UserAgentHeader: | - | ||||||||||||
| 226 | return "User-Agent"; | - | ||||||||||||
| 227 | - | |||||||||||||
| 228 | case QNetworkRequest::ServerHeader: | - | ||||||||||||
| 229 | return "Server"; | - | ||||||||||||
| 230 | - | |||||||||||||
| 231 | - | |||||||||||||
| 232 | - | |||||||||||||
| 233 | } | - | ||||||||||||
| 234 | - | |||||||||||||
| 235 | return QByteArray(); | - | ||||||||||||
| 236 | } | - | ||||||||||||
| 237 | - | |||||||||||||
| 238 | static QByteArray headerValue(QNetworkRequest::KnownHeaders header, const QVariant &value) | - | ||||||||||||
| 239 | { | - | ||||||||||||
| 240 | switch (header) { | - | ||||||||||||
| 241 | case executed 93 times by 4 tests: QNetworkRequest::ContentTypeHeader:case QNetworkRequest::ContentTypeHeader:Executed by:
executed 93 times by 4 tests: case QNetworkRequest::ContentTypeHeader:Executed by:
| 93 | ||||||||||||
| 242 | case executed 251 times by 5 tests: QNetworkRequest::ContentLengthHeader:case QNetworkRequest::ContentLengthHeader:Executed by:
executed 251 times by 5 tests: case QNetworkRequest::ContentLengthHeader:Executed by:
| 251 | ||||||||||||
| 243 | case executed 36 times by 2 tests: QNetworkRequest::ContentDispositionHeader:case QNetworkRequest::ContentDispositionHeader:Executed by:
executed 36 times by 2 tests: case QNetworkRequest::ContentDispositionHeader:Executed by:
| 36 | ||||||||||||
| 244 | case executed 1 time by 1 test: QNetworkRequest::UserAgentHeader:case QNetworkRequest::UserAgentHeader:Executed by:
executed 1 time by 1 test: case QNetworkRequest::UserAgentHeader:Executed by:
| 1 | ||||||||||||
| 245 | case never executed: QNetworkRequest::ServerHeader:case QNetworkRequest::ServerHeader:never executed: case QNetworkRequest::ServerHeader: | 0 | ||||||||||||
| 246 | return executed 381 times by 5 tests: value.toByteArray();return value.toByteArray();Executed by:
executed 381 times by 5 tests: return value.toByteArray();Executed by:
| 381 | ||||||||||||
| 247 | - | |||||||||||||
| 248 | case executed 3 times by 1 test: QNetworkRequest::LocationHeader:case QNetworkRequest::LocationHeader:Executed by:
executed 3 times by 1 test: case QNetworkRequest::LocationHeader:Executed by:
| 3 | ||||||||||||
| 249 | switch (value.userType()) { | - | ||||||||||||
| 250 | case executed 1 time by 1 test: QMetaType::QUrl:case QMetaType::QUrl:Executed by:
executed 1 time by 1 test: case QMetaType::QUrl:Executed by:
| 1 | ||||||||||||
| 251 | return executed 1 time by 1 test: value.toUrl().toEncoded();return value.toUrl().toEncoded();Executed by:
executed 1 time by 1 test: return value.toUrl().toEncoded();Executed by:
| 1 | ||||||||||||
| 252 | - | |||||||||||||
| 253 | default executed 2 times by 1 test: :default:Executed by:
executed 2 times by 1 test: default:Executed by:
| 2 | ||||||||||||
| 254 | return executed 2 times by 1 test: value.toByteArray();return value.toByteArray();Executed by:
executed 2 times by 1 test: return value.toByteArray();Executed by:
| 2 | ||||||||||||
| 255 | } | - | ||||||||||||
| 256 | - | |||||||||||||
| 257 | case executed 57 times by 3 tests: QNetworkRequest::LastModifiedHeader:case QNetworkRequest::LastModifiedHeader:Executed by:
executed 57 times by 3 tests: case QNetworkRequest::LastModifiedHeader:Executed by:
| 57 | ||||||||||||
| 258 | switch (value.userType()) { | - | ||||||||||||
| 259 | case executed 1 time by 1 test: QMetaType::QDate:case QMetaType::QDate:Executed by:
executed 1 time by 1 test: case QMetaType::QDate:Executed by:
| 1 | ||||||||||||
| 260 | case executed 56 times by 3 tests: QMetaType::QDateTime:case QMetaType::QDateTime:Executed by:
executed 56 times by 3 tests: case QMetaType::QDateTime:Executed by:
| 56 | ||||||||||||
| 261 | - | |||||||||||||
| 262 | return executed 57 times by 3 tests: QNetworkHeadersPrivate::toHttpDate(value.toDateTime());return QNetworkHeadersPrivate::toHttpDate(value.toDateTime());Executed by:
executed 57 times by 3 tests: return QNetworkHeadersPrivate::toHttpDate(value.toDateTime());Executed by:
| 57 | ||||||||||||
| 263 | - | |||||||||||||
| 264 | default never executed: :default:never executed: default: | 0 | ||||||||||||
| 265 | return never executed: value.toByteArray();return value.toByteArray();never executed: return value.toByteArray(); | 0 | ||||||||||||
| 266 | } | - | ||||||||||||
| 267 | - | |||||||||||||
| 268 | case executed 11 times by 2 tests: QNetworkRequest::CookieHeader:case QNetworkRequest::CookieHeader:Executed by:
executed 11 times by 2 tests: {case QNetworkRequest::CookieHeader:Executed by:
| 11 | ||||||||||||
| 269 | QList<QNetworkCookie> cookies = qvariant_cast<QList<QNetworkCookie> >(value); | - | ||||||||||||
| 270 | if (cookies.isEmpty()
| 0-11 | ||||||||||||
| 271 | cookies << qvariant_cast<QNetworkCookie>(value); never executed: cookies << qvariant_cast<QNetworkCookie>(value); | 0 | ||||||||||||
| 272 | - | |||||||||||||
| 273 | QByteArray result; | - | ||||||||||||
| 274 | bool first = true; | - | ||||||||||||
| for (QForeachContainer<typename QtPrivate::remove_reference<decltype(cookies)>::type> _container_((cookies)); _container_.control && _container_.i != _container_.e; | ||||||||||||||
| 275 | ++_container_.i, _container_.control ^= 1)for (const QNetworkCookie &cookie = *_container_.i; _container_.control; _container_.control = 0): qAsConst(cookies)) { | - | ||||||||||||
| 276 | if (!first
| 3-11 | ||||||||||||
| 277 | result += "; "; executed 3 times by 2 tests: result += "; ";Executed by:
| 3 | ||||||||||||
| 278 | first = false; | - | ||||||||||||
| 279 | result += cookie.toRawForm(QNetworkCookie::NameAndValueOnly); | - | ||||||||||||
| 280 | } executed 14 times by 2 tests: end of blockExecuted by:
| 14 | ||||||||||||
| 281 | return executed 11 times by 2 tests: result;return result;Executed by:
executed 11 times by 2 tests: return result;Executed by:
| 11 | ||||||||||||
| 282 | } | - | ||||||||||||
| 283 | - | |||||||||||||
| 284 | case executed 3 times by 1 test: QNetworkRequest::SetCookieHeader:case QNetworkRequest::SetCookieHeader:Executed by:
executed 3 times by 1 test: {case QNetworkRequest::SetCookieHeader:Executed by:
| 3 | ||||||||||||
| 285 | QList<QNetworkCookie> cookies = qvariant_cast<QList<QNetworkCookie> >(value); | - | ||||||||||||
| 286 | if (cookies.isEmpty()
| 0-3 | ||||||||||||
| 287 | cookies << qvariant_cast<QNetworkCookie>(value); never executed: cookies << qvariant_cast<QNetworkCookie>(value); | 0 | ||||||||||||
| 288 | - | |||||||||||||
| 289 | QByteArray result; | - | ||||||||||||
| 290 | bool first = true; | - | ||||||||||||
| for (QForeachContainer<typename QtPrivate::remove_reference<decltype(cookies)>::type> _container_((cookies)); _container_.control && _container_.i != _container_.e; | ||||||||||||||
| 291 | ++_container_.i, _container_.control ^= 1)for (const QNetworkCookie &cookie = *_container_.i; _container_.control; _container_.control = 0): qAsConst(cookies)) { | - | ||||||||||||
| 292 | if (!first
| 1-3 | ||||||||||||
| 293 | result += ", "; executed 1 time by 1 test: result += ", ";Executed by:
| 1 | ||||||||||||
| 294 | first = false; | - | ||||||||||||
| 295 | result += cookie.toRawForm(QNetworkCookie::Full); | - | ||||||||||||
| 296 | } executed 4 times by 1 test: end of blockExecuted by:
| 4 | ||||||||||||
| 297 | return executed 3 times by 1 test: result;return result;Executed by:
executed 3 times by 1 test: return result;Executed by:
| 3 | ||||||||||||
| 298 | } | - | ||||||||||||
| 299 | } | - | ||||||||||||
| 300 | - | |||||||||||||
| 301 | return never executed: QByteArray();return QByteArray();never executed: return QByteArray(); | 0 | ||||||||||||
| 302 | } | - | ||||||||||||
| 303 | - | |||||||||||||
| 304 | static int parseHeaderName(const QByteArray &headerName) | - | ||||||||||||
| 305 | { | - | ||||||||||||
| 306 | if (headerName.isEmpty()) | - | ||||||||||||
| 307 | return -1; | - | ||||||||||||
| 308 | - | |||||||||||||
| 309 | switch (tolower(headerName.at(0))) { | - | ||||||||||||
| 310 | case 'c': | - | ||||||||||||
| 311 | if (qstricmp(headerName.constData(), "content-type") == 0) | - | ||||||||||||
| 312 | return QNetworkRequest::ContentTypeHeader; | - | ||||||||||||
| 313 | else if (qstricmp(headerName.constData(), "content-length") == 0) | - | ||||||||||||
| 314 | return QNetworkRequest::ContentLengthHeader; | - | ||||||||||||
| 315 | else if (qstricmp(headerName.constData(), "cookie") == 0) | - | ||||||||||||
| 316 | return QNetworkRequest::CookieHeader; | - | ||||||||||||
| 317 | break; | - | ||||||||||||
| 318 | - | |||||||||||||
| 319 | case 'l': | - | ||||||||||||
| 320 | if (qstricmp(headerName.constData(), "location") == 0) | - | ||||||||||||
| 321 | return QNetworkRequest::LocationHeader; | - | ||||||||||||
| 322 | else if (qstricmp(headerName.constData(), "last-modified") == 0) | - | ||||||||||||
| 323 | return QNetworkRequest::LastModifiedHeader; | - | ||||||||||||
| 324 | break; | - | ||||||||||||
| 325 | - | |||||||||||||
| 326 | case 's': | - | ||||||||||||
| 327 | if (qstricmp(headerName.constData(), "set-cookie") == 0) | - | ||||||||||||
| 328 | return QNetworkRequest::SetCookieHeader; | - | ||||||||||||
| 329 | else if (qstricmp(headerName.constData(), "server") == 0) | - | ||||||||||||
| 330 | return QNetworkRequest::ServerHeader; | - | ||||||||||||
| 331 | break; | - | ||||||||||||
| 332 | - | |||||||||||||
| 333 | case 'u': | - | ||||||||||||
| 334 | if (qstricmp(headerName.constData(), "user-agent") == 0) | - | ||||||||||||
| 335 | return QNetworkRequest::UserAgentHeader; | - | ||||||||||||
| 336 | break; | - | ||||||||||||
| 337 | } | - | ||||||||||||
| 338 | - | |||||||||||||
| 339 | return -1; | - | ||||||||||||
| 340 | } | - | ||||||||||||
| 341 | - | |||||||||||||
| 342 | static QVariant parseHttpDate(const QByteArray &raw) | - | ||||||||||||
| 343 | { | - | ||||||||||||
| 344 | QDateTime dt = QNetworkHeadersPrivate::fromHttpDate(raw); | - | ||||||||||||
| 345 | if (dt.isValid()) | - | ||||||||||||
| 346 | return dt; | - | ||||||||||||
| 347 | return QVariant(); | - | ||||||||||||
| 348 | } | - | ||||||||||||
| 349 | - | |||||||||||||
| 350 | static QVariant parseCookieHeader(const QByteArray &raw) | - | ||||||||||||
| 351 | { | - | ||||||||||||
| 352 | QList<QNetworkCookie> result; | - | ||||||||||||
| 353 | const QList<QByteArray> cookieList = raw.split(';'); | - | ||||||||||||
| 354 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(cookieList)>::type> _container_((cookieList)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1)for (const QByteArray &cookie = *_container_.i; _container_.control; _container_.control = 0: cookieList) { | - | ||||||||||||
| 355 | QList<QNetworkCookie> parsed = QNetworkCookie::parseCookies(cookie.trimmed()); | - | ||||||||||||
| 356 | if (parsed.count() != 1
| 0-3 | ||||||||||||
| 357 | return never executed: QVariant();return QVariant();never executed: return QVariant(); | 0 | ||||||||||||
| 358 | - | |||||||||||||
| 359 | result += parsed; | - | ||||||||||||
| 360 | } executed 3 times by 1 test: end of blockExecuted by:
| 3 | ||||||||||||
| 361 | - | |||||||||||||
| 362 | return executed 2 times by 1 test: QVariant::fromValue(result);return QVariant::fromValue(result);Executed by:
executed 2 times by 1 test: return QVariant::fromValue(result);Executed by:
| 2 | ||||||||||||
| 363 | } | - | ||||||||||||
| 364 | - | |||||||||||||
| 365 | static QVariant parseHeaderValue(QNetworkRequest::KnownHeaders header, const QByteArray &value) | - | ||||||||||||
| 366 | { | - | ||||||||||||
| 367 | - | |||||||||||||
| 368 | switch (header) { | - | ||||||||||||
| 369 | case QNetworkRequest::UserAgentHeader: | - | ||||||||||||
| 370 | case QNetworkRequest::ServerHeader: | - | ||||||||||||
| 371 | case QNetworkRequest::ContentTypeHeader: | - | ||||||||||||
| 372 | - | |||||||||||||
| 373 | return QString::fromLatin1(value); | - | ||||||||||||
| 374 | - | |||||||||||||
| 375 | case QNetworkRequest::ContentLengthHeader: { | - | ||||||||||||
| 376 | bool ok; | - | ||||||||||||
| 377 | qint64 result = value.trimmed().toLongLong(&ok); | - | ||||||||||||
| 378 | if (ok) | - | ||||||||||||
| 379 | return result; | - | ||||||||||||
| 380 | return QVariant(); | - | ||||||||||||
| 381 | } | - | ||||||||||||
| 382 | - | |||||||||||||
| 383 | case QNetworkRequest::LocationHeader: { | - | ||||||||||||
| 384 | QUrl result = QUrl::fromEncoded(value, QUrl::StrictMode); | - | ||||||||||||
| 385 | if (result.isValid() && !result.scheme().isEmpty()) | - | ||||||||||||
| 386 | return result; | - | ||||||||||||
| 387 | return QVariant(); | - | ||||||||||||
| 388 | } | - | ||||||||||||
| 389 | - | |||||||||||||
| 390 | case QNetworkRequest::LastModifiedHeader: | - | ||||||||||||
| 391 | return parseHttpDate(value); | - | ||||||||||||
| 392 | - | |||||||||||||
| 393 | case QNetworkRequest::CookieHeader: | - | ||||||||||||
| 394 | return parseCookieHeader(value); | - | ||||||||||||
| 395 | - | |||||||||||||
| 396 | case QNetworkRequest::SetCookieHeader: | - | ||||||||||||
| 397 | return QVariant::fromValue(QNetworkCookie::parseCookies(value)); | - | ||||||||||||
| 398 | - | |||||||||||||
| 399 | default: | - | ||||||||||||
| 400 | ((!(0)) ? qt_assert("0",__FILE__,899907) : qt_noop()); | - | ||||||||||||
| 401 | } | - | ||||||||||||
| 402 | return QVariant(); | - | ||||||||||||
| 403 | } | - | ||||||||||||
| 404 | - | |||||||||||||
| 405 | QNetworkHeadersPrivate::RawHeadersList::ConstIterator | - | ||||||||||||
| 406 | QNetworkHeadersPrivate::findRawHeader(const QByteArray &key) const | - | ||||||||||||
| 407 | { | - | ||||||||||||
| 408 | RawHeadersList::ConstIterator it = rawHeaders.constBegin(); | - | ||||||||||||
| 409 | RawHeadersList::ConstIterator end = rawHeaders.constEnd(); | - | ||||||||||||
| 410 | for ( ; it != end; ++it) | - | ||||||||||||
| 411 | if (qstricmp(it->first.constData(), key.constData()) == 0) | - | ||||||||||||
| 412 | return it; | - | ||||||||||||
| 413 | - | |||||||||||||
| 414 | return end; | - | ||||||||||||
| 415 | } | - | ||||||||||||
| 416 | - | |||||||||||||
| 417 | QNetworkHeadersPrivate::RawHeadersList QNetworkHeadersPrivate::allRawHeaders() const | - | ||||||||||||
| 418 | { | - | ||||||||||||
| 419 | return rawHeaders; | - | ||||||||||||
| 420 | } | - | ||||||||||||
| 421 | - | |||||||||||||
| 422 | QList<QByteArray> QNetworkHeadersPrivate::rawHeadersKeys() const | - | ||||||||||||
| 423 | { | - | ||||||||||||
| 424 | QList<QByteArray> result; | - | ||||||||||||
| 425 | result.reserve(rawHeaders.size()); | - | ||||||||||||
| 426 | RawHeadersList::ConstIterator it = rawHeaders.constBegin(), | - | ||||||||||||
| 427 | end = rawHeaders.constEnd(); | - | ||||||||||||
| 428 | for ( ; it != end; ++it) | - | ||||||||||||
| 429 | result << it->first; | - | ||||||||||||
| 430 | - | |||||||||||||
| 431 | return result; | - | ||||||||||||
| 432 | } | - | ||||||||||||
| 433 | - | |||||||||||||
| 434 | void QNetworkHeadersPrivate::setRawHeader(const QByteArray &key, const QByteArray &value) | - | ||||||||||||
| 435 | { | - | ||||||||||||
| 436 | if (key.isEmpty()) | - | ||||||||||||
| 437 | - | |||||||||||||
| 438 | return; | - | ||||||||||||
| 439 | - | |||||||||||||
| 440 | setRawHeaderInternal(key, value); | - | ||||||||||||
| 441 | parseAndSetHeader(key, value); | - | ||||||||||||
| 442 | } | - | ||||||||||||
| 443 | void QNetworkHeadersPrivate::setAllRawHeaders(const RawHeadersList &list) | - | ||||||||||||
| 444 | { | - | ||||||||||||
| 445 | cookedHeaders.clear(); | - | ||||||||||||
| 446 | rawHeaders = list; | - | ||||||||||||
| 447 | - | |||||||||||||
| 448 | RawHeadersList::ConstIterator it = rawHeaders.constBegin(); | - | ||||||||||||
| 449 | RawHeadersList::ConstIterator end = rawHeaders.constEnd(); | - | ||||||||||||
| 450 | for ( ; it != end; ++it) | - | ||||||||||||
| 451 | parseAndSetHeader(it->first, it->second); | - | ||||||||||||
| 452 | } | - | ||||||||||||
| 453 | - | |||||||||||||
| 454 | void QNetworkHeadersPrivate::setCookedHeader(QNetworkRequest::KnownHeaders header, | - | ||||||||||||
| 455 | const QVariant &value) | - | ||||||||||||
| 456 | { | - | ||||||||||||
| 457 | QByteArray name = headerName(header); | - | ||||||||||||
| 458 | if (name.isEmpty()) { | - | ||||||||||||
| 459 | - | |||||||||||||
| 460 | QMessageLogger(__FILE__, 968976, __PRETTY_FUNCTION__).warning("QNetworkRequest::setHeader: invalid header value KnownHeader(%d) received", header); | - | ||||||||||||
| 461 | return; | - | ||||||||||||
| 462 | } | - | ||||||||||||
| 463 | - | |||||||||||||
| 464 | if (value.isNull()) { | - | ||||||||||||
| 465 | setRawHeaderInternal(name, QByteArray()); | - | ||||||||||||
| 466 | cookedHeaders.remove(header); | - | ||||||||||||
| 467 | } else { | - | ||||||||||||
| 468 | QByteArray rawValue = headerValue(header, value); | - | ||||||||||||
| 469 | if (rawValue.isEmpty()) { | - | ||||||||||||
| 470 | QMessageLogger(__FILE__, 978986, __PRETTY_FUNCTION__).warning("QNetworkRequest::setHeader: QVariant of type %s cannot be used with header %s", | - | ||||||||||||
| 471 | value.typeName(), name.constData()); | - | ||||||||||||
| 472 | return; | - | ||||||||||||
| 473 | } | - | ||||||||||||
| 474 | - | |||||||||||||
| 475 | setRawHeaderInternal(name, rawValue); | - | ||||||||||||
| 476 | cookedHeaders.insert(header, value); | - | ||||||||||||
| 477 | } | - | ||||||||||||
| 478 | } | - | ||||||||||||
| 479 | - | |||||||||||||
| 480 | void QNetworkHeadersPrivate::setRawHeaderInternal(const QByteArray &key, const QByteArray &value) | - | ||||||||||||
| 481 | { | - | ||||||||||||
| 482 | RawHeadersList::Iterator itauto firstEqualsKey = rawHeaders.begin(); | - | ||||||||||||
| while (it != rawHeaders.end())[&key](const RawHeaderPair &header) { | ||||||||||||||
| 483 | if (return executed 17730 times by 9 tests: return qstricmp(header.first.constData(), key.constData()) == 0;Executed by:
executed 17730 times by 9 tests: qstricmp(it->header.first.constData(), key.constData()) == 0)return qstricmp(header.first.constData(), key.constData()) == 0;Executed by:
executed 17730 times by 9 tests: return qstricmp(header.first.constData(), key.constData()) == 0;Executed by:
| 17730 | ||||||||||||
| it = executed 17730 times by 9 tests: return qstricmp(header.first.constData(), key.constData()) == 0;Executed by:
executed 17730 times by 9 tests: ;return qstricmp(header.first.constData(), key.constData()) == 0;Executed by:
executed 17730 times by 9 tests: return qstricmp(header.first.constData(), key.constData()) == 0;Executed by:
| ||||||||||||||
| 484 | }; | - | ||||||||||||
| 485 | rawHeaders.erase(it); | - | ||||||||||||
| else | ||||||||||||||
| ++it; | ||||||||||||||
| }std::remove_if(rawHeaders.begin(), rawHeaders.end(), | ||||||||||||||
| 486 | firstEqualsKey), | - | ||||||||||||
| 487 | rawHeaders.end()); | - | ||||||||||||
| 488 | - | |||||||||||||
| 489 | if (value.isNull()
| 9-6148 | ||||||||||||
| 490 | return; executed 9 times by 2 tests: return;Executed by:
| 9 | ||||||||||||
| 491 | - | |||||||||||||
| 492 | RawHeaderPair pair; | - | ||||||||||||
| 493 | pair.first = key; | - | ||||||||||||
| 494 | pair.second = value; | - | ||||||||||||
| 495 | rawHeaders.append(pair); | - | ||||||||||||
| 496 | } executed 6148 times by 9 tests: end of blockExecuted by:
| 6148 | ||||||||||||
| 497 | - | |||||||||||||
| 498 | void QNetworkHeadersPrivate::parseAndSetHeader(const QByteArray &key, const QByteArray &value) | - | ||||||||||||
| 499 | { | - | ||||||||||||
| 500 | - | |||||||||||||
| 501 | const int parsedKeyAsInt = parseHeaderName(key); | - | ||||||||||||
| 502 | if (parsedKeyAsInt != -1) { | - | ||||||||||||
| 503 | const QNetworkRequest::KnownHeaders parsedKey | - | ||||||||||||
| 504 | = static_cast<QNetworkRequest::KnownHeaders>(parsedKeyAsInt); | - | ||||||||||||
| 505 | if (value.isNull()) { | - | ||||||||||||
| 506 | cookedHeaders.remove(parsedKey); | - | ||||||||||||
| 507 | } else if (parsedKey == QNetworkRequest::ContentLengthHeader | - | ||||||||||||
| 508 | && cookedHeaders.contains(QNetworkRequest::ContentLengthHeader)) { | - | ||||||||||||
| 509 | - | |||||||||||||
| 510 | - | |||||||||||||
| 511 | } else { | - | ||||||||||||
| 512 | cookedHeaders.insert(parsedKey, parseHeaderValue(parsedKey, value)); | - | ||||||||||||
| 513 | } | - | ||||||||||||
| 514 | - | |||||||||||||
| 515 | } | - | ||||||||||||
| 516 | } | - | ||||||||||||
| 517 | - | |||||||||||||
| 518 | - | |||||||||||||
| 519 | - | |||||||||||||
| 520 | - | |||||||||||||
| 521 | static int name_to_month(const char* month_str) | - | ||||||||||||
| 522 | { | - | ||||||||||||
| 523 | switch (month_str[0]) { | - | ||||||||||||
| 524 | case 'J': | - | ||||||||||||
| 525 | switch (month_str[1]) { | - | ||||||||||||
| 526 | case 'a': | - | ||||||||||||
| 527 | return 1; | - | ||||||||||||
| 528 | case 'u': | - | ||||||||||||
| 529 | switch (month_str[2] ) { | - | ||||||||||||
| 530 | case 'n': | - | ||||||||||||
| 531 | return 6; | - | ||||||||||||
| 532 | case 'l': | - | ||||||||||||
| 533 | return 7; | - | ||||||||||||
| 534 | } | - | ||||||||||||
| 535 | } | - | ||||||||||||
| 536 | break; | - | ||||||||||||
| 537 | case 'F': | - | ||||||||||||
| 538 | return 2; | - | ||||||||||||
| 539 | case 'M': | - | ||||||||||||
| 540 | switch (month_str[2] ) { | - | ||||||||||||
| 541 | case 'r': | - | ||||||||||||
| 542 | return 3; | - | ||||||||||||
| 543 | case 'y': | - | ||||||||||||
| 544 | return 5; | - | ||||||||||||
| 545 | } | - | ||||||||||||
| 546 | break; | - | ||||||||||||
| 547 | case 'A': | - | ||||||||||||
| 548 | switch (month_str[1]) { | - | ||||||||||||
| 549 | case 'p': | - | ||||||||||||
| 550 | return 4; | - | ||||||||||||
| 551 | case 'u': | - | ||||||||||||
| 552 | return 8; | - | ||||||||||||
| 553 | } | - | ||||||||||||
| 554 | break; | - | ||||||||||||
| 555 | case 'O': | - | ||||||||||||
| 556 | return 10; | - | ||||||||||||
| 557 | case 'S': | - | ||||||||||||
| 558 | return 9; | - | ||||||||||||
| 559 | case 'N': | - | ||||||||||||
| 560 | return 11; | - | ||||||||||||
| 561 | case 'D': | - | ||||||||||||
| 562 | return 12; | - | ||||||||||||
| 563 | } | - | ||||||||||||
| 564 | - | |||||||||||||
| 565 | return 0; | - | ||||||||||||
| 566 | } | - | ||||||||||||
| 567 | - | |||||||||||||
| 568 | QDateTime QNetworkHeadersPrivate::fromHttpDate(const QByteArray &value) | - | ||||||||||||
| 569 | { | - | ||||||||||||
| 570 | - | |||||||||||||
| 571 | - | |||||||||||||
| 572 | - | |||||||||||||
| 573 | - | |||||||||||||
| 574 | - | |||||||||||||
| 575 | - | |||||||||||||
| 576 | int pos = value.indexOf(','); | - | ||||||||||||
| 577 | QDateTime dt; | - | ||||||||||||
| 578 | - | |||||||||||||
| 579 | if (pos == -1) { | - | ||||||||||||
| 580 | - | |||||||||||||
| 581 | dt = QDateTime::fromString(QString::fromLatin1(value), Qt::TextDate); | - | ||||||||||||
| 582 | } else { | - | ||||||||||||
| 583 | - | |||||||||||||
| 584 | - | |||||||||||||
| 585 | if (pos == 3) { | - | ||||||||||||
| 586 | char month_name[4]; | - | ||||||||||||
| 587 | int day, year, hour, minute, second; | - | ||||||||||||
| 588 | - | |||||||||||||
| 589 | - | |||||||||||||
| 590 | - | |||||||||||||
| 591 | - | |||||||||||||
| 592 | - | |||||||||||||
| 593 | - | |||||||||||||
| 594 | if (sscanf(value.constData(), "%*3s, %d %3s %d %d:%d:%d 'GMT'", &day, month_name, &year, &hour, &minute, &second) == 6) | - | ||||||||||||
| 595 | - | |||||||||||||
| 596 | dt = QDateTime(QDate(year, name_to_month(month_name), day), QTime(hour, minute, second)); | - | ||||||||||||
| 597 | } else { | - | ||||||||||||
| 598 | QLocale c = QLocale::c(); | - | ||||||||||||
| 599 | - | |||||||||||||
| 600 | QString sansWeekday = QString::fromLatin1(value.constData() + pos + 2); | - | ||||||||||||
| 601 | - | |||||||||||||
| 602 | dt = c.toDateTime(sansWeekday, QLatin1String("dd-MMM-yy hh:mm:ss 'GMT'")); | - | ||||||||||||
| 603 | } | - | ||||||||||||
| 604 | } | - | ||||||||||||
| 605 | - | |||||||||||||
| 606 | - | |||||||||||||
| 607 | if (dt.isValid()) | - | ||||||||||||
| 608 | dt.setTimeSpec(Qt::UTC); | - | ||||||||||||
| 609 | return dt; | - | ||||||||||||
| 610 | } | - | ||||||||||||
| 611 | - | |||||||||||||
| 612 | QByteArray QNetworkHeadersPrivate::toHttpDate(const QDateTime &dt) | - | ||||||||||||
| 613 | { | - | ||||||||||||
| 614 | return QLocale::c().toString(dt, QLatin1String("ddd, dd MMM yyyy hh:mm:ss 'GMT'")) | - | ||||||||||||
| 615 | .toLatin1(); | - | ||||||||||||
| 616 | } | - | ||||||||||||
| 617 | - | |||||||||||||
| 618 | - | |||||||||||||
| Switch to Source code | Preprocessed file |