RegisteredHeaders.cc
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2023 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
15namespace Http
16{
17/* glue to code generated by gperf */
19
21 name(n)
22{}
23
24HeaderTableRecord::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
32HeaderLookupTable_t::lookup (const char *buf, const std::size_t len) const {
34 if (!r || r->id == Http::HdrType::OTHER)
35 return BadHdr;
36 return *r;
37}
39
41{
42 initCache();
43}
44
45void
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)] =
53 }
54 }
55 //check after the fact. The cache array must be full
56 for (auto e : idCache) {
57 assert(e->name);
58 }
59}
61
62}; /* namespace Http */
63
64std::ostream&
65Http::operator<< (std::ostream &s, const HdrType id)
66{
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
static const class HeaderTableRecord HttpHeaderDefinitionsTable[]
@ MAX_HASH_VALUE
@ TOTAL_KEYWORDS
@ MIN_HASH_VALUE
#define assert(EX)
Definition: assert.h:17
static const class HeaderTableRecord * lookup(const char *str, size_t len)
static const HeaderTableRecord BadHdr
used to signal "not found" from lookups
std::vector< const HeaderTableRecord * > idCache
const HeaderTableRecord & lookup(const char *buf, const std::size_t len) const
look record type up by name (C-string and length)
Definition: forward.h:18
std::ostream & operator<<(std::ostream &, const TunnelerAnswer &)
bool any_HdrType_enum_value(const Http::HdrType id)
match any known header type, including OTHER and BAD
const HeaderLookupTable_t HeaderLookupTable
int const char size_t
Definition: stub_liblog.cc:83

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors