1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QNETWORKREQUEST_P_H
6#define QNETWORKREQUEST_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists for the convenience
13// of the Network Access API. This header file may change from
14// version to version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtNetwork/private/qtnetworkglobal_p.h>
20#include <QtNetwork/qhttpheaders.h>
21#include "qnetworkrequest.h"
22#include "QtCore/qbytearray.h"
23#include "QtCore/qlist.h"
24#include "QtCore/qhash.h"
25#include "QtCore/qshareddata.h"
26#include "QtCore/qsharedpointer.h"
27#include "QtCore/qpointer.h"
28
29#include <utility>
30
31QT_BEGIN_NAMESPACE
32
33class QNetworkCookie;
34
35// this is the common part between QNetworkRequestPrivate, QNetworkReplyPrivate and QHttpPartPrivate
36class QNetworkHeadersPrivate
37{
38public:
39 typedef std::pair<QByteArray, QByteArray> RawHeaderPair;
40 typedef QList<RawHeaderPair> RawHeadersList;
41 typedef QHash<QNetworkRequest::KnownHeaders, QVariant> CookedHeadersMap;
42 typedef QHash<QNetworkRequest::Attribute, QVariant> AttributesMap;
43
44 mutable struct {
45 RawHeadersList headersList;
46 bool isCached = false;
47 } rawHeaderCache;
48
49 QHttpHeaders httpHeaders;
50 CookedHeadersMap cookedHeaders;
51 AttributesMap attributes;
52 QPointer<QObject> originatingObject;
53
54 const RawHeadersList &allRawHeaders() const;
55 QList<QByteArray> rawHeadersKeys() const;
56 QByteArray rawHeader(QAnyStringView headerName) const;
57 void setRawHeader(const QByteArray &key, const QByteArray &value);
58 void setCookedHeader(QNetworkRequest::KnownHeaders header, const QVariant &value);
59
60 QHttpHeaders headers() const;
61 void setHeaders(const QHttpHeaders &newHeaders);
62 void setHeaders(QHttpHeaders &&newHeaders);
63 void setHeader(QHttpHeaders::WellKnownHeader name, QByteArrayView value);
64
65 void clearHeaders();
66
67 static QDateTime fromHttpDate(QByteArrayView value);
68 static QByteArray toHttpDate(const QDateTime &dt);
69
70 static std::optional<qint64> toInt(QByteArrayView value);
71
72 typedef QList<QNetworkCookie> NetworkCookieList;
73 static QByteArray fromCookieList(const NetworkCookieList &cookies);
74 static std::optional<NetworkCookieList> toSetCookieList(const QList<QByteArray> &values);
75 static std::optional<NetworkCookieList> toCookieList(const QList<QByteArray> &values);
76
77 static RawHeadersList fromHttpToRaw(const QHttpHeaders &headers);
78 static QHttpHeaders fromRawToHttp(const RawHeadersList &raw);
79
80private:
81 void invalidateHeaderCache();
82
83 void setCookedFromHttp(const QHttpHeaders &newHeaders);
84 void parseAndSetHeader(QByteArrayView key, QByteArrayView value);
85 void parseAndSetHeader(QNetworkRequest::KnownHeaders key, QByteArrayView value);
86
87};
88
89Q_DECLARE_TYPEINFO(QNetworkHeadersPrivate::RawHeaderPair, Q_RELOCATABLE_TYPE);
90
91QT_END_NAMESPACE
92
93
94#endif
95

source code of qtbase/src/network/access/qnetworkrequest_p.h