Squid Web Cache
master
Loading...
Searching...
No Matches
RegisteredHeaders.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 1996-2025 The Squid Software Foundation and contributors
3
*
4
* Squid software is distributed under GPLv2+ license and includes
5
* contributions from numerous individuals and organizations.
6
* Please see the COPYING and CONTRIBUTORS files for details.
7
*/
8
9
#ifndef SQUID_SRC_HTTP_REGISTEREDHEADERS_H
10
#define SQUID_SRC_HTTP_REGISTEREDHEADERS_H
11
12
#include "
base/LookupTable.h
"
13
14
#include <iosfwd>
15
#include <vector>
16
17
namespace
Http
18
{
21
enum
HdrType
{
22
enumBegin_
= 0,
// service value for WholeEnum iteration
23
ACCEPT
=
enumBegin_
,
/* MUST BE FIRST */
24
ACCEPT_CHARSET
,
25
ACCEPT_ENCODING
,
26
/*ACCEPT_FEATURES,*/
/* RFC 2295 */
27
ACCEPT_LANGUAGE
,
28
ACCEPT_RANGES
,
29
AGE
,
30
ALLOW
,
31
ALTERNATE_PROTOCOL
,
32
AUTHENTICATION_INFO
,
33
AUTHORIZATION
,
34
CACHE_CONTROL
,
35
CACHE_STATUS
,
36
CDN_LOOP
,
37
CONNECTION
,
38
CONTENT_BASE
,
39
CONTENT_DISPOSITION
,
40
CONTENT_ENCODING
,
41
CONTENT_LANGUAGE
,
42
CONTENT_LENGTH
,
43
CONTENT_LOCATION
,
44
CONTENT_MD5
,
45
CONTENT_RANGE
,
46
CONTENT_TYPE
,
47
COOKIE
,
48
COOKIE2
,
49
DATE
,
50
/*DAV,*/
/* RFC 2518 */
51
/*DEPTH,*/
/* RFC 2518 */
52
/*DERIVED_FROM,*/
/* deprecated RFC 2068 */
53
/*DESTINATION,*/
/* RFC 2518 */
54
ETAG
,
55
EXPECT
,
56
EXPIRES
,
57
FORWARDED
,
58
FROM
,
59
HOST
,
60
/*HTTP2_SETTINGS,*/
/* obsolete RFC 7540 */
61
/*IF,*/
/* RFC 2518 */
62
IF_MATCH
,
63
IF_MODIFIED_SINCE
,
64
IF_NONE_MATCH
,
65
IF_RANGE
,
66
IF_UNMODIFIED_SINCE
,
67
KEEP_ALIVE
,
68
KEY
,
69
LAST_MODIFIED
,
70
LINK
,
71
LOCATION
,
72
/*LOCK_TOKEN,*/
/* RFC 2518 */
73
MAX_FORWARDS
,
74
MIME_VERSION
,
75
NEGOTIATE
,
76
/*OVERWRITE,*/
/* RFC 2518 */
77
ORIGIN
,
/* CORS Draft specification (see http://www.w3.org/TR/cors/) */
78
PRAGMA
,
79
PRIORITY
,
80
PROXY_AUTHENTICATE
,
81
PROXY_AUTHENTICATION_INFO
,
82
PROXY_AUTHORIZATION
,
83
PROXY_CONNECTION
,
84
PROXY_SUPPORT
,
85
PUBLIC
,
86
RANGE
,
87
REFERER
,
88
REQUEST_RANGE
,
89
RETRY_AFTER
,
90
SERVER
,
91
SET_COOKIE
,
92
SET_COOKIE2
,
93
/*STATUS_URI,*/
/* RFC 2518 */
94
/*TCN,*/
/* experimental RFC 2295 */
95
TE
,
96
/*TIMEOUT,*/
/* RFC 2518 */
97
TITLE
,
/* obsolete draft suggested header */
98
TRAILER
,
99
TRANSFER_ENCODING
,
100
TRANSLATE
,
101
UNLESS_MODIFIED_SINCE
,
102
UPGRADE
,
103
USER_AGENT
,
104
/*VARIANT_VARY,*/
/* experimental RFC 2295 */
105
VARY
,
106
VIA
,
107
WWW_AUTHENTICATE
,
108
X_FORWARDED_FOR
,
109
X_SQUID_ERROR
,
110
HDR_X_ACCELERATOR_VARY
,
111
X_NEXT_SERVICES
,
112
SURROGATE_CAPABILITY
,
113
SURROGATE_CONTROL
,
114
FRONT_END_HTTPS
,
115
FTP_COMMAND
,
116
FTP_ARGUMENTS
,
117
FTP_PRE
,
118
FTP_STATUS
,
119
FTP_REASON
,
120
OTHER
,
121
BAD_HDR
,
122
enumEnd_
// internal tag for end-of-headers
123
};
124
126
enum class
HdrFieldType
{
127
ftInvalid
,
128
ftInt
,
129
ftInt64
,
130
ftStr
,
131
ftDate_1123
,
132
ftETag
,
133
ftPCc
,
134
ftPContRange
,
135
ftPRange
,
136
ftPSc
,
137
ftDate_1123_or_ETag
138
};
139
140
enum
HdrKind
{
141
None
= 0,
142
ListHeader
= 1,
143
RequestHeader
= 1 << 1,
144
ReplyHeader
= 1 << 2,
145
HopByHopHeader
= 1 << 3,
146
Denied304Header
= 1 << 4,
//see comment in HttpReply.cc for meaning
147
GeneralHeader
=
RequestHeader
|
ReplyHeader
,
148
EntityHeader
=
RequestHeader
|
ReplyHeader
149
};
150
151
/* POD for HeaderTable */
152
class
HeaderTableRecord
{
153
public
:
154
HeaderTableRecord
() =
default
;
155
HeaderTableRecord
(
const
char
*n);
156
HeaderTableRecord
(
const
char
*,
Http::HdrType
,
Http::HdrFieldType
,
int
/* HdrKind */
);
157
158
const
char
*
name
=
""
;
159
Http::HdrType
id
=
HdrType::BAD_HDR
;
160
Http::HdrFieldType
type
=
HdrFieldType::ftInvalid
;
161
// flags set by constructor from HdrKind parameter
162
bool
list
=
false
;;
163
bool
request
=
false
;
164
bool
reply
=
false
;
165
bool
hopbyhop
=
false
;
166
bool
denied304
=
false
;
167
};
168
177
class
HeaderLookupTable_t
{
178
public
:
179
HeaderLookupTable_t
();
181
const
HeaderTableRecord
&
lookup
(
const
char
*buf,
const
std::size_t len)
const
;
183
const
HeaderTableRecord
&
lookup
(
const
std::string &key)
const
{
184
return
lookup
(key.data(), key.length());
185
}
187
const
HeaderTableRecord
&
lookup
(
const
SBuf
&key)
const
{
188
return
lookup
(key.
rawContent
(), key.
length
());
189
}
191
const
HeaderTableRecord
&
lookup
(
Http::HdrType
id
)
const
{
192
return
*(
idCache
[
static_cast<
int
>
(id)]);
193
}
194
195
private
:
196
void
initCache
();
197
std::vector<const HeaderTableRecord *>
idCache
;
198
static
const
HeaderTableRecord
BadHdr
;
199
};
200
extern
const
HeaderLookupTable_t
HeaderLookupTable
;
201
203
inline
bool
204
any_HdrType_enum_value
(
const
Http::HdrType
id
)
205
{
206
return
(
id
>=
Http::HdrType::enumBegin_
&&
id
<
Http::HdrType::enumEnd_
);
207
}
208
210
inline
bool
211
any_valid_header
(
const
Http::HdrType
id
)
212
{
213
return
(
id
>=
Http::HdrType::ACCEPT
&&
id
<
Http::HdrType::BAD_HDR
);
214
}
215
218
inline
bool
219
any_registered_header
(
const
Http::HdrType
id
)
220
{
221
return
(
id
>=
Http::HdrType::ACCEPT
&&
id
<
Http::HdrType::OTHER
);
222
}
223
224
std::ostream &
operator <<
(std::ostream &,
HdrType
);
225
226
};
/* namespace Http */
227
228
#endif
/* SQUID_SRC_HTTP_REGISTEREDHEADERS_H */
229
LookupTable.h
Http::HeaderLookupTable_t
Definition
RegisteredHeaders.h:177
Http::HeaderLookupTable_t::BadHdr
static const HeaderTableRecord BadHdr
used to signal "not found" from lookups
Definition
RegisteredHeaders.h:198
Http::HeaderLookupTable_t::lookup
const HeaderTableRecord & lookup(Http::HdrType id) const
look record type up by header ID
Definition
RegisteredHeaders.h:191
Http::HeaderLookupTable_t::idCache
std::vector< const HeaderTableRecord * > idCache
Definition
RegisteredHeaders.h:197
Http::HeaderLookupTable_t::initCache
void initCache()
Definition
RegisteredHeaders.cc:46
Http::HeaderLookupTable_t::HeaderLookupTable_t
HeaderLookupTable_t()
Definition
RegisteredHeaders.cc:40
Http::HeaderLookupTable_t::lookup
const HeaderTableRecord & lookup(const std::string &key) const
look record type up by name (std::string)
Definition
RegisteredHeaders.h:183
Http::HeaderLookupTable_t::lookup
const HeaderTableRecord & lookup(const SBuf &key) const
look record type up by name (SBuf)
Definition
RegisteredHeaders.h:187
Http::HeaderLookupTable_t::lookup
const HeaderTableRecord & lookup(const char *buf, const std::size_t len) const
look record type up by name (C-string and length)
Definition
RegisteredHeaders.cc:32
Http::HeaderTableRecord
Definition
RegisteredHeaders.h:152
Http::HeaderTableRecord::HeaderTableRecord
HeaderTableRecord()=default
Http::HeaderTableRecord::request
bool request
header with field values defined as #(values) in HTTP/1.1
Definition
RegisteredHeaders.h:163
Http::HeaderTableRecord::hopbyhop
bool hopbyhop
header is hop by hop
Definition
RegisteredHeaders.h:165
Http::HeaderTableRecord::type
Http::HdrFieldType type
Definition
RegisteredHeaders.h:160
Http::HeaderTableRecord::denied304
bool denied304
header is not to be updated on receiving a 304 in cache revalidation (see HttpReply....
Definition
RegisteredHeaders.h:166
Http::HeaderTableRecord::name
const char * name
Definition
RegisteredHeaders.h:158
Http::HeaderTableRecord::list
bool list
Definition
RegisteredHeaders.h:162
Http::HeaderTableRecord::reply
bool reply
header is a reply header
Definition
RegisteredHeaders.h:164
SBuf
Definition
SBuf.h:94
SBuf::rawContent
const char * rawContent() const
Definition
SBuf.cc:509
SBuf::length
size_type length() const
Returns the number of bytes stored in SBuf.
Definition
SBuf.h:419
Http
Definition
forward.h:18
Http::operator<<
std::ostream & operator<<(std::ostream &, const TunnelerAnswer &)
Definition
HttpTunnelerAnswer.cc:20
Http::any_registered_header
bool any_registered_header(const Http::HdrType id)
Definition
RegisteredHeaders.h:219
Http::HdrKind
HdrKind
Definition
RegisteredHeaders.h:140
Http::HopByHopHeader
@ HopByHopHeader
Definition
RegisteredHeaders.h:145
Http::EntityHeader
@ EntityHeader
Definition
RegisteredHeaders.h:148
Http::None
@ None
Definition
RegisteredHeaders.h:141
Http::ListHeader
@ ListHeader
Definition
RegisteredHeaders.h:142
Http::RequestHeader
@ RequestHeader
Definition
RegisteredHeaders.h:143
Http::ReplyHeader
@ ReplyHeader
Definition
RegisteredHeaders.h:144
Http::GeneralHeader
@ GeneralHeader
Definition
RegisteredHeaders.h:147
Http::Denied304Header
@ Denied304Header
Definition
RegisteredHeaders.h:146
Http::HdrFieldType
HdrFieldType
Definition
RegisteredHeaders.h:126
Http::HdrFieldType::ftPSc
@ ftPSc
Http::HdrFieldType::ftDate_1123_or_ETag
@ ftDate_1123_or_ETag
Http::HdrFieldType::ftPContRange
@ ftPContRange
Http::HdrFieldType::ftETag
@ ftETag
Http::HdrFieldType::ftPCc
@ ftPCc
Http::HdrFieldType::ftPRange
@ ftPRange
Http::HdrFieldType::ftDate_1123
@ ftDate_1123
Http::HdrFieldType::ftInvalid
@ ftInvalid
Http::HdrFieldType::ftInt64
@ ftInt64
Http::HdrFieldType::ftStr
@ ftStr
Http::HdrFieldType::ftInt
@ ftInt
Http::HdrType
HdrType
Definition
RegisteredHeaders.h:21
Http::enumEnd_
@ enumEnd_
Definition
RegisteredHeaders.h:122
Http::TRANSLATE
@ TRANSLATE
Definition
RegisteredHeaders.h:100
Http::KEY
@ KEY
Definition
RegisteredHeaders.h:68
Http::FTP_PRE
@ FTP_PRE
Definition
RegisteredHeaders.h:117
Http::DATE
@ DATE
Definition
RegisteredHeaders.h:49
Http::RETRY_AFTER
@ RETRY_AFTER
Definition
RegisteredHeaders.h:89
Http::TE
@ TE
Definition
RegisteredHeaders.h:95
Http::FRONT_END_HTTPS
@ FRONT_END_HTTPS
Definition
RegisteredHeaders.h:114
Http::REFERER
@ REFERER
Definition
RegisteredHeaders.h:87
Http::MIME_VERSION
@ MIME_VERSION
Definition
RegisteredHeaders.h:74
Http::TITLE
@ TITLE
Definition
RegisteredHeaders.h:97
Http::CONNECTION
@ CONNECTION
Definition
RegisteredHeaders.h:37
Http::UPGRADE
@ UPGRADE
Definition
RegisteredHeaders.h:102
Http::ACCEPT
@ ACCEPT
Definition
RegisteredHeaders.h:23
Http::BAD_HDR
@ BAD_HDR
Definition
RegisteredHeaders.h:121
Http::AGE
@ AGE
Definition
RegisteredHeaders.h:29
Http::CONTENT_RANGE
@ CONTENT_RANGE
Definition
RegisteredHeaders.h:45
Http::ALLOW
@ ALLOW
Definition
RegisteredHeaders.h:30
Http::PUBLIC
@ PUBLIC
Definition
RegisteredHeaders.h:85
Http::HOST
@ HOST
Definition
RegisteredHeaders.h:59
Http::PROXY_SUPPORT
@ PROXY_SUPPORT
Definition
RegisteredHeaders.h:84
Http::enumBegin_
@ enumBegin_
Definition
RegisteredHeaders.h:22
Http::REQUEST_RANGE
@ REQUEST_RANGE
Definition
RegisteredHeaders.h:88
Http::VARY
@ VARY
Definition
RegisteredHeaders.h:105
Http::CACHE_CONTROL
@ CACHE_CONTROL
Definition
RegisteredHeaders.h:34
Http::SET_COOKIE
@ SET_COOKIE
Definition
RegisteredHeaders.h:91
Http::AUTHORIZATION
@ AUTHORIZATION
Definition
RegisteredHeaders.h:33
Http::LINK
@ LINK
Definition
RegisteredHeaders.h:70
Http::FTP_STATUS
@ FTP_STATUS
Definition
RegisteredHeaders.h:118
Http::PROXY_AUTHENTICATION_INFO
@ PROXY_AUTHENTICATION_INFO
Definition
RegisteredHeaders.h:81
Http::TRAILER
@ TRAILER
Definition
RegisteredHeaders.h:98
Http::CONTENT_BASE
@ CONTENT_BASE
Definition
RegisteredHeaders.h:38
Http::SURROGATE_CONTROL
@ SURROGATE_CONTROL
Definition
RegisteredHeaders.h:113
Http::PROXY_CONNECTION
@ PROXY_CONNECTION
Definition
RegisteredHeaders.h:83
Http::IF_UNMODIFIED_SINCE
@ IF_UNMODIFIED_SINCE
Definition
RegisteredHeaders.h:66
Http::CONTENT_MD5
@ CONTENT_MD5
Definition
RegisteredHeaders.h:44
Http::COOKIE2
@ COOKIE2
Definition
RegisteredHeaders.h:48
Http::X_FORWARDED_FOR
@ X_FORWARDED_FOR
Definition
RegisteredHeaders.h:108
Http::EXPECT
@ EXPECT
Definition
RegisteredHeaders.h:55
Http::AUTHENTICATION_INFO
@ AUTHENTICATION_INFO
Definition
RegisteredHeaders.h:32
Http::CONTENT_LOCATION
@ CONTENT_LOCATION
Definition
RegisteredHeaders.h:43
Http::PROXY_AUTHORIZATION
@ PROXY_AUTHORIZATION
Definition
RegisteredHeaders.h:82
Http::EXPIRES
@ EXPIRES
Definition
RegisteredHeaders.h:56
Http::OTHER
@ OTHER
Definition
RegisteredHeaders.h:120
Http::ACCEPT_ENCODING
@ ACCEPT_ENCODING
Definition
RegisteredHeaders.h:25
Http::USER_AGENT
@ USER_AGENT
Definition
RegisteredHeaders.h:103
Http::UNLESS_MODIFIED_SINCE
@ UNLESS_MODIFIED_SINCE
Definition
RegisteredHeaders.h:101
Http::IF_MATCH
@ IF_MATCH
Definition
RegisteredHeaders.h:62
Http::MAX_FORWARDS
@ MAX_FORWARDS
Definition
RegisteredHeaders.h:73
Http::LOCATION
@ LOCATION
Definition
RegisteredHeaders.h:71
Http::ACCEPT_RANGES
@ ACCEPT_RANGES
Definition
RegisteredHeaders.h:28
Http::RANGE
@ RANGE
Definition
RegisteredHeaders.h:86
Http::ORIGIN
@ ORIGIN
Definition
RegisteredHeaders.h:77
Http::COOKIE
@ COOKIE
Definition
RegisteredHeaders.h:47
Http::IF_RANGE
@ IF_RANGE
Definition
RegisteredHeaders.h:65
Http::LAST_MODIFIED
@ LAST_MODIFIED
Definition
RegisteredHeaders.h:69
Http::WWW_AUTHENTICATE
@ WWW_AUTHENTICATE
Definition
RegisteredHeaders.h:107
Http::FTP_REASON
@ FTP_REASON
Definition
RegisteredHeaders.h:119
Http::CONTENT_DISPOSITION
@ CONTENT_DISPOSITION
Definition
RegisteredHeaders.h:39
Http::FTP_COMMAND
@ FTP_COMMAND
Definition
RegisteredHeaders.h:115
Http::KEEP_ALIVE
@ KEEP_ALIVE
Definition
RegisteredHeaders.h:67
Http::IF_NONE_MATCH
@ IF_NONE_MATCH
Definition
RegisteredHeaders.h:64
Http::FROM
@ FROM
Definition
RegisteredHeaders.h:58
Http::IF_MODIFIED_SINCE
@ IF_MODIFIED_SINCE
Definition
RegisteredHeaders.h:63
Http::X_NEXT_SERVICES
@ X_NEXT_SERVICES
Definition
RegisteredHeaders.h:111
Http::TRANSFER_ENCODING
@ TRANSFER_ENCODING
Definition
RegisteredHeaders.h:99
Http::VIA
@ VIA
Definition
RegisteredHeaders.h:106
Http::SURROGATE_CAPABILITY
@ SURROGATE_CAPABILITY
Definition
RegisteredHeaders.h:112
Http::ACCEPT_CHARSET
@ ACCEPT_CHARSET
Definition
RegisteredHeaders.h:24
Http::HDR_X_ACCELERATOR_VARY
@ HDR_X_ACCELERATOR_VARY
Definition
RegisteredHeaders.h:110
Http::ACCEPT_LANGUAGE
@ ACCEPT_LANGUAGE
Definition
RegisteredHeaders.h:27
Http::PRIORITY
@ PRIORITY
Definition
RegisteredHeaders.h:79
Http::ETAG
@ ETAG
Definition
RegisteredHeaders.h:54
Http::CONTENT_ENCODING
@ CONTENT_ENCODING
Definition
RegisteredHeaders.h:40
Http::FORWARDED
@ FORWARDED
Definition
RegisteredHeaders.h:57
Http::CDN_LOOP
@ CDN_LOOP
Definition
RegisteredHeaders.h:36
Http::CONTENT_TYPE
@ CONTENT_TYPE
Definition
RegisteredHeaders.h:46
Http::SET_COOKIE2
@ SET_COOKIE2
Definition
RegisteredHeaders.h:92
Http::ALTERNATE_PROTOCOL
@ ALTERNATE_PROTOCOL
Definition
RegisteredHeaders.h:31
Http::CACHE_STATUS
@ CACHE_STATUS
Definition
RegisteredHeaders.h:35
Http::CONTENT_LANGUAGE
@ CONTENT_LANGUAGE
Definition
RegisteredHeaders.h:41
Http::PROXY_AUTHENTICATE
@ PROXY_AUTHENTICATE
Definition
RegisteredHeaders.h:80
Http::CONTENT_LENGTH
@ CONTENT_LENGTH
Definition
RegisteredHeaders.h:42
Http::PRAGMA
@ PRAGMA
Definition
RegisteredHeaders.h:78
Http::X_SQUID_ERROR
@ X_SQUID_ERROR
Definition
RegisteredHeaders.h:109
Http::SERVER
@ SERVER
Definition
RegisteredHeaders.h:90
Http::FTP_ARGUMENTS
@ FTP_ARGUMENTS
Definition
RegisteredHeaders.h:116
Http::NEGOTIATE
@ NEGOTIATE
Definition
RegisteredHeaders.h:75
Http::any_HdrType_enum_value
bool any_HdrType_enum_value(const Http::HdrType id)
match any known header type, including OTHER and BAD
Definition
RegisteredHeaders.h:204
Http::HeaderLookupTable
const HeaderLookupTable_t HeaderLookupTable
Definition
RegisteredHeaders.cc:60
Http::any_valid_header
bool any_valid_header(const Http::HdrType id)
match any valid header type, including OTHER but not BAD
Definition
RegisteredHeaders.h:211
squid
src
http
RegisteredHeaders.h
Generated by
1.9.8