{
HttpHeaderPos pos = HttpHeaderInitPos;
HttpHeaderEntry *e;
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(!CBIT_TEST(ListHeadersMask, id));
/* check mask first */
HttpHeaderPos pos = HttpHeaderInitPos;
HttpHeaderEntry *e;
HttpHeaderEntry *result = NULL;
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(!CBIT_TEST(ListHeadersMask, id));
/* check mask first */
HttpHeaderPos pos = HttpHeaderInitPos;
HttpHeaderEntry *e;
debugs(55, 8, this << " del-by-id " << id);
- assert(any_valid_header(id));
- assert(id != Http::HdrType::OTHER); /* does not make sense */
+ assert(any_registered_header(id));
if (!CBIT_TEST(mask, id))
return 0;
int ilen;
int mlen = strlen(member);
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
header = getStrOrList(id);
String result;
int
HttpHeader::has(Http::HdrType id) const
{
- assert(any_valid_header(id));
- assert(id != Http::HdrType::OTHER);
+ assert(any_registered_header(id));
debugs(55, 9, this << " lookup for " << id);
return CBIT_TEST(mask, id);
}
void
HttpHeader::putInt(Http::HdrType id, int number)
{
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftInt); /* must be of an appropriate type */
assert(number >= 0);
addEntry(new HttpHeaderEntry(id, NULL, xitoa(number)));
void
HttpHeader::putInt64(Http::HdrType id, int64_t number)
{
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftInt64); /* must be of an appropriate type */
assert(number >= 0);
addEntry(new HttpHeaderEntry(id, NULL, xint64toa(number)));
void
HttpHeader::putTime(Http::HdrType id, time_t htime)
{
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftDate_1123); /* must be of an appropriate type */
assert(htime >= 0);
addEntry(new HttpHeaderEntry(id, NULL, mkrfc1123(htime)));
void
HttpHeader::insertTime(Http::HdrType id, time_t htime)
{
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftDate_1123); /* must be of an appropriate type */
assert(htime >= 0);
insertEntry(new HttpHeaderEntry(id, NULL, mkrfc1123(htime)));
void
HttpHeader::putStr(Http::HdrType id, const char *str)
{
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftStr); /* must be of an appropriate type */
assert(str);
addEntry(new HttpHeaderEntry(id, NULL, str));
int
HttpHeader::getInt(Http::HdrType id) const
{
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftInt); /* must be of an appropriate type */
HttpHeaderEntry *e;
int64_t
HttpHeader::getInt64(Http::HdrType id) const
{
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftInt64); /* must be of an appropriate type */
HttpHeaderEntry *e;
{
HttpHeaderEntry *e;
time_t value = -1;
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftDate_1123); /* must be of an appropriate type */
if ((e = findEntry(id))) {
HttpHeader::getStr(Http::HdrType id) const
{
HttpHeaderEntry *e;
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftStr); /* must be of an appropriate type */
if ((e = findEntry(id))) {
HttpHeader::getLastStr(Http::HdrType id) const
{
HttpHeaderEntry *e;
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
assert(Http::HeaderTable[id].type == Http::HdrFieldType::ftStr); /* must be of an appropriate type */
if ((e = findLastEntry(id))) {
int ilen;
int mlen = strlen(member);
- assert(any_valid_header(id));
+ assert(any_registered_header(id));
String header (getStrOrList(id));
namespace Http
{
-
/*
* A table with major attributes for every known field.
*
* Invariant on this table:
* for each index in HeaderTable, (int)HeaderTable[index] = index
+ *
+ * To be kept in sync with Http::HdrType
*/
const HeaderTableRecord HeaderTable[] = {
{"Accept", Http::HdrType::ACCEPT, Http::HdrFieldType::ftStr},
{"FTP-Status", Http::HdrType::FTP_STATUS, Http::HdrFieldType::ftInt},
{"FTP-Reason", Http::HdrType::FTP_REASON, Http::HdrFieldType::ftStr},
{"Other:", Http::HdrType::OTHER, Http::HdrFieldType::ftStr}, /* ':' will not allow matches */
- {nullptr, Http::HdrType::ENUM_END, Http::HdrFieldType::ftInvalid}, /* end of table */
- {nullptr, Http::HdrType::BAD_HDR, Http::HdrFieldType::ftInvalid}
+ {"*INVALID*:", Http::HdrType::BAD_HDR, Http::HdrFieldType::ftInvalid}, /* ':' will not allow matches */
+ {nullptr, Http::HdrType::ENUM_END, Http::HdrFieldType::ftInvalid} /* end of table */
};
const LookupTable<Http::HdrType, HeaderTableRecord> HeaderLookupTable(Http::HdrType::BAD_HDR, HeaderTable);
}; /* namespace Http */
-extern std::ostream &
-operator << (std::ostream &s , Http::HdrType id)
-{
- if (id >= Http::HdrType::ACCEPT && id < Http::HdrType::ENUM_END)
- s << Http::HeaderTable[id].name << '(' << static_cast<int>(id) << ')';
- else
- s << "invalid" << '(' << static_cast<int>(id) << ')';
- return s;
-}
-
#define SQUID_HTTP_REGISTEREDHEADERS_H
#include "base/LookupTable.h"
-#include <iosfwd>
namespace Http
{
FTP_STATUS, /**< Internal header for FTP reply status */
FTP_REASON, /**< Internal header for FTP reply reason */
OTHER, /**< internal tag value for "unknown" headers */
- ENUM_END, /**< internal tag for end-of-valid headers */
- BAD_HDR /**< Invalid header. Must be after ENUM_END */
+ BAD_HDR, /**< Invalid header. Must be after ENUM_END */
+ ENUM_END /**< internal tag for end-of-headers */
};
/** possible types for http header fields */
*/
extern const LookupTable<Http::HdrType, HeaderTableRecord> HeaderLookupTable;
+/// match any known header type, including OTHER and BAD
inline bool
any_HdrType_enum_value (const Http::HdrType id)
{
- return (id == Http::HdrType::BAD_HDR || (id >= Http::HdrType::ACCEPT && id < Http::HdrType::ENUM_END));
+ return (id >= Http::HdrType::ACCEPT && id < Http::HdrType::ENUM_END);
}
+/// match any valid header type, including OTHER but not BAD
inline bool
any_valid_header (const Http::HdrType id)
{
- return (id >= Http::HdrType::ACCEPT && id < Http::HdrType::ENUM_END);
+ return (id >= Http::HdrType::ACCEPT && id < Http::HdrType::BAD_HDR);
}
-}; /* namespace Http */
+/// match any registered header type (headers squid knows how to handle),
+/// thus excluding OTHER and BAD
+inline bool
+any_registered_header (const Http::HdrType id)
+{
+ return (id >= Http::HdrType::ACCEPT && id < Http::HdrType::OTHER);
+}
-std::ostream &
-operator << (std::ostream &, Http::HdrType);
+}; /* namespace Http */
#endif /* SQUID_HTTP_REGISTEREDHEADERS_H */