2 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
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.
10 #include "RegisteredHeaders.h"
17 /* glue to code generated by gperf */
18 #include "http/RegisteredHeadersHash.cci"
20 HeaderTableRecord::HeaderTableRecord(const char *n
) :
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
)
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
)
38 const HeaderTableRecord
HeaderLookupTable_t::BadHdr
{"*INVALID*:", Http::HdrType::BAD_HDR
, Http::HdrFieldType::ftInvalid
, HdrKind::None
};
40 HeaderLookupTable_t::HeaderLookupTable_t()
46 HeaderLookupTable_t::initCache()
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
];
55 //check after the fact. The cache array must be full
56 for (auto e
: idCache
) {
60 const HeaderLookupTable_t HeaderLookupTable
;
62 }; /* namespace Http */
65 Http::operator<< (std::ostream
&s
, const HdrType id
)
67 if (any_HdrType_enum_value(id
))
68 s
<< HeaderLookupTable
.lookup(id
).name
<< '[' << static_cast<int>(id
) << ']';
70 s
<< "Invalid-Header[" << static_cast<int>(id
) << ']';