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 
15 namespace Http
16 {
17 /* glue to code generated by gperf */
19 
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 {
34  if (!r || r->id == Http::HdrType::OTHER)
35  return BadHdr;
36  return *r;
37 }
39 
41 {
42  initCache();
43 }
44 
45 void
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 
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 
std::vector< const HeaderTableRecord * > idCache
Definition: forward.h:17
int const char size_t
Definition: stub_liblog.cc:83
bool any_HdrType_enum_value(const Http::HdrType id)
match any known header type, including OTHER and BAD
static const HeaderTableRecord BadHdr
used to signal "not found" from lookups
#define assert(EX)
Definition: assert.h:17
const HeaderTableRecord & lookup(const char *buf, const std::size_t len) const
look record type up by name (C-string and length)
const HeaderLookupTable_t HeaderLookupTable
std::ostream & operator<<(std::ostream &, const TunnelerAnswer &)
static const class HeaderTableRecord HttpHeaderDefinitionsTable[]
@ TOTAL_KEYWORDS
@ MAX_HASH_VALUE
@ MIN_HASH_VALUE
static const class HeaderTableRecord * lookup(const char *str, size_t len)

 

Introduction

Documentation

Support

Miscellaneous