1// Copyright (C) 2023 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
4#ifndef QHTTPHEADERS_H
5#define QHTTPHEADERS_H
6
7#include <QtNetwork/qtnetworkglobal.h>
8
9#include <QtCore/qobjectdefs.h>
10#include <QtCore/qshareddata.h>
11#include <QtCore/qcontainerfwd.h>
12
13QT_BEGIN_NAMESPACE
14
15class QDebug;
16
17class QHttpHeadersPrivate;
18QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QHttpHeadersPrivate, Q_NETWORK_EXPORT)
19class QHttpHeaders
20{
21 Q_GADGET_EXPORT(Q_NETWORK_EXPORT)
22public:
23 enum class WellKnownHeader {
24 // IANA Permanent status:
25 AIM,
26 Accept,
27 AcceptAdditions,
28 AcceptCH,
29 AcceptDatetime,
30 AcceptEncoding,
31 AcceptFeatures,
32 AcceptLanguage,
33 AcceptPatch,
34 AcceptPost,
35 AcceptRanges,
36 AcceptSignature,
37 AccessControlAllowCredentials,
38 AccessControlAllowHeaders,
39 AccessControlAllowMethods,
40 AccessControlAllowOrigin,
41 AccessControlExposeHeaders,
42 AccessControlMaxAge,
43 AccessControlRequestHeaders,
44 AccessControlRequestMethod,
45 Age,
46 Allow,
47 ALPN,
48 AltSvc,
49 AltUsed,
50 Alternates,
51 ApplyToRedirectRef,
52 AuthenticationControl,
53 AuthenticationInfo,
54 Authorization,
55 CacheControl,
56 CacheStatus,
57 CalManagedID,
58 CalDAVTimezones,
59 CapsuleProtocol,
60 CDNCacheControl,
61 CDNLoop,
62 CertNotAfter,
63 CertNotBefore,
64 ClearSiteData,
65 ClientCert,
66 ClientCertChain,
67 Close,
68 Connection,
69 ContentDigest,
70 ContentDisposition,
71 ContentEncoding,
72 ContentID,
73 ContentLanguage,
74 ContentLength,
75 ContentLocation,
76 ContentRange,
77 ContentSecurityPolicy,
78 ContentSecurityPolicyReportOnly,
79 ContentType,
80 Cookie,
81 CrossOriginEmbedderPolicy,
82 CrossOriginEmbedderPolicyReportOnly,
83 CrossOriginOpenerPolicy,
84 CrossOriginOpenerPolicyReportOnly,
85 CrossOriginResourcePolicy,
86 DASL,
87 Date,
88 DAV,
89 DeltaBase,
90 Depth,
91 Destination,
92 DifferentialID,
93 DPoP,
94 DPoPNonce,
95 EarlyData,
96 ETag,
97 Expect,
98 ExpectCT,
99 Expires,
100 Forwarded,
101 From,
102 Hobareg,
103 Host,
104 If,
105 IfMatch,
106 IfModifiedSince,
107 IfNoneMatch,
108 IfRange,
109 IfScheduleTagMatch,
110 IfUnmodifiedSince,
111 IM,
112 IncludeReferredTokenBindingID,
113 KeepAlive,
114 Label,
115 LastEventID,
116 LastModified,
117 Link,
118 Location,
119 LockToken,
120 MaxForwards,
121 MementoDatetime,
122 Meter,
123 MIMEVersion,
124 Negotiate,
125 NEL,
126 ODataEntityId,
127 ODataIsolation,
128 ODataMaxVersion,
129 ODataVersion,
130 OptionalWWWAuthenticate,
131 OrderingType,
132 Origin,
133 OriginAgentCluster,
134 OSCORE,
135 OSLCCoreVersion,
136 Overwrite,
137 PingFrom,
138 PingTo,
139 Position,
140 Prefer,
141 PreferenceApplied,
142 Priority,
143 ProxyAuthenticate,
144 ProxyAuthenticationInfo,
145 ProxyAuthorization,
146 ProxyStatus,
147 PublicKeyPins,
148 PublicKeyPinsReportOnly,
149 Range,
150 RedirectRef,
151 Referer,
152 Refresh,
153 ReplayNonce,
154 ReprDigest,
155 RetryAfter,
156 ScheduleReply,
157 ScheduleTag,
158 SecPurpose,
159 SecTokenBinding,
160 SecWebSocketAccept,
161 SecWebSocketExtensions,
162 SecWebSocketKey,
163 SecWebSocketProtocol,
164 SecWebSocketVersion,
165 Server,
166 ServerTiming,
167 SetCookie,
168 Signature,
169 SignatureInput,
170 SLUG,
171 SoapAction,
172 StatusURI,
173 StrictTransportSecurity,
174 Sunset,
175 SurrogateCapability,
176 SurrogateControl,
177 TCN,
178 TE,
179 Timeout,
180 Topic,
181 Traceparent,
182 Tracestate,
183 Trailer,
184 TransferEncoding,
185 TTL,
186 Upgrade,
187 Urgency,
188 UserAgent,
189 VariantVary,
190 Vary,
191 Via,
192 WantContentDigest,
193 WantReprDigest,
194 WWWAuthenticate,
195 XContentTypeOptions,
196 XFrameOptions,
197 // IANA Deprecated status:
198 AcceptCharset,
199 CPEPInfo,
200 Pragma,
201 ProtocolInfo,
202 ProtocolQuery,
203 };
204 Q_ENUM(WellKnownHeader)
205
206 Q_NETWORK_EXPORT QHttpHeaders() noexcept;
207 Q_NETWORK_EXPORT ~QHttpHeaders();
208
209 Q_NETWORK_EXPORT QHttpHeaders(const QHttpHeaders &other);
210 QHttpHeaders(QHttpHeaders &&other) noexcept = default;
211 Q_NETWORK_EXPORT QHttpHeaders &operator=(const QHttpHeaders &other);
212 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QHttpHeaders)
213 void swap(QHttpHeaders &other) noexcept { d.swap(other&: other.d); }
214
215 Q_NETWORK_EXPORT bool append(QAnyStringView name, QAnyStringView value);
216 Q_NETWORK_EXPORT bool append(WellKnownHeader name, QAnyStringView value);
217
218 Q_NETWORK_EXPORT bool insert(qsizetype i, QAnyStringView name, QAnyStringView value);
219 Q_NETWORK_EXPORT bool insert(qsizetype i, WellKnownHeader name, QAnyStringView value);
220
221 Q_NETWORK_EXPORT bool replace(qsizetype i, QAnyStringView name, QAnyStringView newValue);
222 Q_NETWORK_EXPORT bool replace(qsizetype i, WellKnownHeader name, QAnyStringView newValue);
223
224 Q_NETWORK_EXPORT bool replaceOrAppend(QAnyStringView name, QAnyStringView newValue);
225 Q_NETWORK_EXPORT bool replaceOrAppend(WellKnownHeader name, QAnyStringView newValue);
226
227 Q_NETWORK_EXPORT bool contains(QAnyStringView name) const;
228 Q_NETWORK_EXPORT bool contains(WellKnownHeader name) const;
229
230 Q_NETWORK_EXPORT void clear();
231 Q_NETWORK_EXPORT void removeAll(QAnyStringView name);
232 Q_NETWORK_EXPORT void removeAll(WellKnownHeader name);
233 Q_NETWORK_EXPORT void removeAt(qsizetype i);
234
235 Q_NETWORK_EXPORT QByteArrayView value(QAnyStringView name, QByteArrayView defaultValue = {}) const noexcept;
236 Q_NETWORK_EXPORT QByteArrayView value(WellKnownHeader name, QByteArrayView defaultValue = {}) const noexcept;
237
238 Q_NETWORK_EXPORT QList<QByteArray> values(QAnyStringView name) const;
239 Q_NETWORK_EXPORT QList<QByteArray> values(WellKnownHeader name) const;
240
241 Q_NETWORK_EXPORT QByteArrayView valueAt(qsizetype i) const noexcept;
242 Q_NETWORK_EXPORT QLatin1StringView nameAt(qsizetype i) const noexcept;
243
244 Q_NETWORK_EXPORT QByteArray combinedValue(QAnyStringView name) const;
245 Q_NETWORK_EXPORT QByteArray combinedValue(WellKnownHeader name) const;
246
247 Q_NETWORK_EXPORT qsizetype size() const noexcept;
248 Q_NETWORK_EXPORT void reserve(qsizetype size);
249 bool isEmpty() const noexcept { return size() == 0; }
250
251 Q_NETWORK_EXPORT static QByteArrayView wellKnownHeaderName(WellKnownHeader name) noexcept;
252
253 Q_NETWORK_EXPORT static QHttpHeaders
254 fromListOfPairs(const QList<std::pair<QByteArray, QByteArray>> &headers);
255 Q_NETWORK_EXPORT static QHttpHeaders
256 fromMultiMap(const QMultiMap<QByteArray, QByteArray> &headers);
257 Q_NETWORK_EXPORT static QHttpHeaders
258 fromMultiHash(const QMultiHash<QByteArray, QByteArray> &headers);
259
260 Q_NETWORK_EXPORT QList<std::pair<QByteArray, QByteArray>> toListOfPairs() const;
261 Q_NETWORK_EXPORT QMultiMap<QByteArray, QByteArray> toMultiMap() const;
262 Q_NETWORK_EXPORT QMultiHash<QByteArray, QByteArray> toMultiHash() const;
263
264private:
265#ifndef QT_NO_DEBUG_STREAM
266 friend Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QHttpHeaders &headers);
267#endif
268 Q_ALWAYS_INLINE void verify([[maybe_unused]] qsizetype pos = 0,
269 [[maybe_unused]] qsizetype n = 1) const
270 {
271 Q_ASSERT(pos >= 0);
272 Q_ASSERT(pos <= size());
273 Q_ASSERT(n >= 0);
274 Q_ASSERT(n <= size() - pos);
275 }
276 QExplicitlySharedDataPointer<QHttpHeadersPrivate> d;
277};
278
279Q_DECLARE_SHARED(QHttpHeaders)
280
281QT_END_NAMESPACE
282
283#endif // QHTTPHEADERS_H
284

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

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