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 block Executed 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 block Executed 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 block Executed 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 block Executed 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 |