Squid Web Cache
master
Loading...
Searching...
No Matches
RegisteredHeaders.cc
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
#include "
squid.h
"
10
#include "
RegisteredHeaders.h
"
11
12
#include <ostream>
13
#include <vector>
14
15
namespace
Http
16
{
17
/* glue to code generated by gperf */
18
#include "
http/RegisteredHeadersHash.cci
"
19
20
HeaderTableRecord::HeaderTableRecord
(
const
char
*n) :
21
name(n)
22
{}
23
24
HeaderTableRecord::HeaderTableRecord
(
const
char
*n,
HdrType
theId,
HdrFieldType
theType,
int
theKind) :
25
name(n), id(theId), type(theType),
26
list(theKind &
HdrKind
::
ListHeader
), request(theKind &
HdrKind
::
RequestHeader
),
27
reply(theKind &
HdrKind
::
ReplyHeader
), hopbyhop(theKind &
HdrKind
::
HopByHopHeader
),
28
denied304(theKind &
HdrKind
::
Denied304Header
)
29
{}
30
31
const
HeaderTableRecord
&
32
HeaderLookupTable_t::lookup
(
const
char
*buf,
const
std::size_t len)
const
{
33
const
HeaderTableRecord
*r =
HttpHeaderHashTable::lookup
(buf, len);
34
if
(!r || r->
id
==
Http::HdrType::OTHER
)
35
return
BadHdr
;
36
return
*r;
37
}
38
const
HeaderTableRecord
HeaderLookupTable_t::BadHdr
{
"*INVALID*:"
,
Http::HdrType::BAD_HDR
,
Http::HdrFieldType::ftInvalid
,
HdrKind::None
};
39
40
HeaderLookupTable_t::HeaderLookupTable_t
()
41
{
42
initCache
();
43
}
44
45
void
46
HeaderLookupTable_t::initCache
()
47
{
48
idCache
.resize(
TOTAL_KEYWORDS
);
49
for
(
int
j =
MIN_HASH_VALUE
; j <=
MAX_HASH_VALUE
; ++j) {
//MAX_HASH_VALUE is exported by gperf
50
if
(
HttpHeaderDefinitionsTable
[j].name[0] !=
'\0'
) {
//some slots are empty
51
idCache
[
static_cast<
int
>
(
HttpHeaderDefinitionsTable
[j].id)] =
52
&
HttpHeaderDefinitionsTable
[j];
53
}
54
}
55
//check after the fact. The cache array must be full
56
for
(
auto
e :
idCache
) {
57
assert
(e->name);
58
}
59
}
60
const
HeaderLookupTable_t
HeaderLookupTable
;
61
62
};
/* namespace Http */
63
64
std::ostream&
65
Http::operator<<
(std::ostream &s,
const
HdrType
id
)
66
{
67
if
(
any_HdrType_enum_value
(
id
))
68
s <<
HeaderLookupTable
.
lookup
(
id
).
name
<<
'['
<<
static_cast<
int
>
(id) <<
']'
;
69
else
70
s <<
"Invalid-Header["
<<
static_cast<
int
>
(id) <<
']'
;
71
return
s;
72
}
73
RegisteredHeadersHash.cci
HttpHeaderDefinitionsTable
static const class HeaderTableRecord HttpHeaderDefinitionsTable[]
Definition
RegisteredHeadersHash.cci:175
MAX_HASH_VALUE
@ MAX_HASH_VALUE
Definition
RegisteredHeadersHash.cci:51
TOTAL_KEYWORDS
@ TOTAL_KEYWORDS
Definition
RegisteredHeadersHash.cci:47
MIN_HASH_VALUE
@ MIN_HASH_VALUE
Definition
RegisteredHeadersHash.cci:50
RegisteredHeaders.h
assert
#define assert(EX)
Definition
assert.h:17
HttpHeaderHashTable::lookup
static const class HeaderTableRecord * lookup(const char *str, size_t len)
Definition
RegisteredHeadersHash.cci:360
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::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 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::name
const char * name
Definition
RegisteredHeaders.h:158
Http::HeaderTableRecord::id
Http::HdrType id
Definition
RegisteredHeaders.h:159
Http
Definition
forward.h:18
Http::operator<<
std::ostream & operator<<(std::ostream &, const TunnelerAnswer &)
Definition
HttpTunnelerAnswer.cc:20
Http::HdrKind
HdrKind
Definition
RegisteredHeaders.h:140
Http::HopByHopHeader
@ HopByHopHeader
Definition
RegisteredHeaders.h:145
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::Denied304Header
@ Denied304Header
Definition
RegisteredHeaders.h:146
Http::HdrFieldType
HdrFieldType
Definition
RegisteredHeaders.h:126
Http::HdrFieldType::ftInvalid
@ ftInvalid
Http::HdrType
HdrType
Definition
RegisteredHeaders.h:21
Http::BAD_HDR
@ BAD_HDR
Definition
RegisteredHeaders.h:121
Http::OTHER
@ OTHER
Definition
RegisteredHeaders.h:120
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
squid.h
squid
src
http
RegisteredHeaders.cc
Generated by
1.9.8