2 * Copyright (C) 1996-2015 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 * A table with major attributes for every known field.
19 * Invariant on this table:
20 * for each index in HeaderTable, (int)HeaderTable[index] = index
22 * To be kept in sync with Http::HdrType
24 const HeaderTableRecord HeaderTable
[] = {
25 {"Accept", Http::HdrType::ACCEPT
, Http::HdrFieldType::ftStr
},
26 {"Accept-Charset", Http::HdrType::ACCEPT_CHARSET
, Http::HdrFieldType::ftStr
},
27 {"Accept-Encoding", Http::HdrType::ACCEPT_ENCODING
, Http::HdrFieldType::ftStr
},
28 {"Accept-Language", Http::HdrType::ACCEPT_LANGUAGE
, Http::HdrFieldType::ftStr
},
29 {"Accept-Ranges", Http::HdrType::ACCEPT_RANGES
, Http::HdrFieldType::ftStr
},
30 {"Age", Http::HdrType::AGE
, Http::HdrFieldType::ftInt
},
31 {"Allow", Http::HdrType::ALLOW
, Http::HdrFieldType::ftStr
},
32 {"Alternate-Protocol", Http::HdrType::ALTERNATE_PROTOCOL
, Http::HdrFieldType::ftStr
},
33 {"Authentication-Info", Http::HdrType::AUTHENTICATION_INFO
, Http::HdrFieldType::ftStr
},
34 {"Authorization", Http::HdrType::AUTHORIZATION
, Http::HdrFieldType::ftStr
}, /* for now */
35 {"Cache-Control", Http::HdrType::CACHE_CONTROL
, Http::HdrFieldType::ftPCc
},
36 {"Connection", Http::HdrType::CONNECTION
, Http::HdrFieldType::ftStr
},
37 {"Content-Base", Http::HdrType::CONTENT_BASE
, Http::HdrFieldType::ftStr
},
38 {"Content-Disposition", Http::HdrType::CONTENT_DISPOSITION
, Http::HdrFieldType::ftStr
}, /* for now */
39 {"Content-Encoding", Http::HdrType::CONTENT_ENCODING
, Http::HdrFieldType::ftStr
},
40 {"Content-Language", Http::HdrType::CONTENT_LANGUAGE
, Http::HdrFieldType::ftStr
},
41 {"Content-Length", Http::HdrType::CONTENT_LENGTH
, Http::HdrFieldType::ftInt64
},
42 {"Content-Location", Http::HdrType::CONTENT_LOCATION
, Http::HdrFieldType::ftStr
},
43 {"Content-MD5", Http::HdrType::CONTENT_MD5
, Http::HdrFieldType::ftStr
}, /* for now */
44 {"Content-Range", Http::HdrType::CONTENT_RANGE
, Http::HdrFieldType::ftPContRange
},
45 {"Content-Type", Http::HdrType::CONTENT_TYPE
, Http::HdrFieldType::ftStr
},
46 {"Cookie", Http::HdrType::COOKIE
, Http::HdrFieldType::ftStr
},
47 {"Cookie2", Http::HdrType::COOKIE2
, Http::HdrFieldType::ftStr
},
48 {"Date", Http::HdrType::DATE
, Http::HdrFieldType::ftDate_1123
},
49 {"ETag", Http::HdrType::ETAG
, Http::HdrFieldType::ftETag
},
50 {"Expect", Http::HdrType::EXPECT
, Http::HdrFieldType::ftStr
},
51 {"Expires", Http::HdrType::EXPIRES
, Http::HdrFieldType::ftDate_1123
},
52 {"Forwarded", Http::HdrType::FORWARDED
, Http::HdrFieldType::ftStr
},
53 {"From", Http::HdrType::FROM
, Http::HdrFieldType::ftStr
},
54 {"Host", Http::HdrType::HOST
, Http::HdrFieldType::ftStr
},
55 {"HTTP2-Settings", Http::HdrType::HTTP2_SETTINGS
, Http::HdrFieldType::ftStr
}, /* for now */
56 {"If-Match", Http::HdrType::IF_MATCH
, Http::HdrFieldType::ftStr
}, /* for now */
57 {"If-Modified-Since", Http::HdrType::IF_MODIFIED_SINCE
, Http::HdrFieldType::ftDate_1123
},
58 {"If-None-Match", Http::HdrType::IF_NONE_MATCH
, Http::HdrFieldType::ftStr
}, /* for now */
59 {"If-Range", Http::HdrType::IF_RANGE
, Http::HdrFieldType::ftDate_1123_or_ETag
},
60 {"If-Unmodified-Since", Http::HdrType::IF_UNMODIFIED_SINCE
, Http::HdrFieldType::ftDate_1123
},
61 {"Keep-Alive", Http::HdrType::KEEP_ALIVE
, Http::HdrFieldType::ftStr
},
62 {"Key", Http::HdrType::KEY
, Http::HdrFieldType::ftStr
},
63 {"Last-Modified", Http::HdrType::LAST_MODIFIED
, Http::HdrFieldType::ftDate_1123
},
64 {"Link", Http::HdrType::LINK
, Http::HdrFieldType::ftStr
},
65 {"Location", Http::HdrType::LOCATION
, Http::HdrFieldType::ftStr
},
66 {"Max-Forwards", Http::HdrType::MAX_FORWARDS
, Http::HdrFieldType::ftInt64
},
67 {"Mime-Version", Http::HdrType::MIME_VERSION
, Http::HdrFieldType::ftStr
}, /* for now */
68 {"Negotiate", Http::HdrType::NEGOTIATE
, Http::HdrFieldType::ftStr
},
69 {"Origin", Http::HdrType::ORIGIN
, Http::HdrFieldType::ftStr
},
70 {"Pragma", Http::HdrType::PRAGMA
, Http::HdrFieldType::ftStr
},
71 {"Proxy-Authenticate", Http::HdrType::PROXY_AUTHENTICATE
, Http::HdrFieldType::ftStr
},
72 {"Proxy-Authentication-Info", Http::HdrType::PROXY_AUTHENTICATION_INFO
, Http::HdrFieldType::ftStr
},
73 {"Proxy-Authorization", Http::HdrType::PROXY_AUTHORIZATION
, Http::HdrFieldType::ftStr
},
74 {"Proxy-Connection", Http::HdrType::PROXY_CONNECTION
, Http::HdrFieldType::ftStr
},
75 {"Proxy-support", Http::HdrType::PROXY_SUPPORT
, Http::HdrFieldType::ftStr
},
76 {"Public", Http::HdrType::PUBLIC
, Http::HdrFieldType::ftStr
},
77 {"Range", Http::HdrType::RANGE
, Http::HdrFieldType::ftPRange
},
78 {"Referer", Http::HdrType::REFERER
, Http::HdrFieldType::ftStr
},
79 {"Request-Range", Http::HdrType::REQUEST_RANGE
, Http::HdrFieldType::ftPRange
}, /* usually matches Http::HdrType::RANGE */
80 {"Retry-AHttp::HdrFieldType::fter", Http::HdrType::RETRY_AFTER
, Http::HdrFieldType::ftStr
}, /* for now (Http::HdrFieldType::ftDate_1123 or Http::HdrFieldType::ftInt!} */
81 {"Server", Http::HdrType::SERVER
, Http::HdrFieldType::ftStr
},
82 {"Set-Cookie", Http::HdrType::SET_COOKIE
, Http::HdrFieldType::ftStr
},
83 {"Set-Cookie2", Http::HdrType::SET_COOKIE2
, Http::HdrFieldType::ftStr
},
84 {"TE", Http::HdrType::TE
, Http::HdrFieldType::ftStr
},
85 {"Title", Http::HdrType::TITLE
, Http::HdrFieldType::ftStr
},
86 {"Trailer", Http::HdrType::TRAILER
, Http::HdrFieldType::ftStr
},
87 {"Transfer-Encoding", Http::HdrType::TRANSFER_ENCODING
, Http::HdrFieldType::ftStr
},
88 {"Translate", Http::HdrType::TRANSLATE
, Http::HdrFieldType::ftStr
}, /* for now. may need to crop */
89 {"Unless-Modified-Since", Http::HdrType::UNLESS_MODIFIED_SINCE
, Http::HdrFieldType::ftStr
}, /* for now ignore. may need to crop */
90 {"Upgrade", Http::HdrType::UPGRADE
, Http::HdrFieldType::ftStr
}, /* for now */
91 {"User-Agent", Http::HdrType::USER_AGENT
, Http::HdrFieldType::ftStr
},
92 {"Vary", Http::HdrType::VARY
, Http::HdrFieldType::ftStr
}, /* for now */
93 {"Via", Http::HdrType::VIA
, Http::HdrFieldType::ftStr
}, /* for now */
94 {"Warning", Http::HdrType::WARNING
, Http::HdrFieldType::ftStr
}, /* for now */
95 {"WWW-Authenticate", Http::HdrType::WWW_AUTHENTICATE
, Http::HdrFieldType::ftStr
},
96 {"X-Cache", Http::HdrType::X_CACHE
, Http::HdrFieldType::ftStr
},
97 {"X-Cache-Lookup", Http::HdrType::X_CACHE_LOOKUP
, Http::HdrFieldType::ftStr
},
98 {"X-Forwarded-For", Http::HdrType::X_FORWARDED_FOR
, Http::HdrFieldType::ftStr
},
99 {"X-Request-URI", Http::HdrType::X_REQUEST_URI
, Http::HdrFieldType::ftStr
},
100 {"X-Squid-Error", Http::HdrType::X_SQUID_ERROR
, Http::HdrFieldType::ftStr
},
101 #if X_ACCELERATOR_VARY
102 {"X-Accelerator-Vary", Http::HdrType::HDR_X_ACCELERATOR_VARY
, Http::HdrFieldType::ftStr
},
105 {"X-Next-Services", Http::HdrType::X_NEXT_SERVICES
, Http::HdrFieldType::ftStr
},
107 {"Surrogate-Capability", Http::HdrType::SURROGATE_CAPABILITY
, Http::HdrFieldType::ftStr
},
108 {"Surrogate-Control", Http::HdrType::SURROGATE_CONTROL
, Http::HdrFieldType::ftPSc
},
109 {"Front-End-Https", Http::HdrType::FRONT_END_HTTPS
, Http::HdrFieldType::ftStr
},
110 {"FTP-Command", Http::HdrType::FTP_COMMAND
, Http::HdrFieldType::ftStr
},
111 {"FTP-Arguments", Http::HdrType::FTP_ARGUMENTS
, Http::HdrFieldType::ftStr
},
112 {"FTP-Pre", Http::HdrType::FTP_PRE
, Http::HdrFieldType::ftStr
},
113 {"FTP-Status", Http::HdrType::FTP_STATUS
, Http::HdrFieldType::ftInt
},
114 {"FTP-Reason", Http::HdrType::FTP_REASON
, Http::HdrFieldType::ftStr
},
115 {"Other:", Http::HdrType::OTHER
, Http::HdrFieldType::ftStr
}, /* ':' will not allow matches */
116 {"*INVALID*:", Http::HdrType::BAD_HDR
, Http::HdrFieldType::ftInvalid
}, /* ':' will not allow matches */
117 {nullptr, Http::HdrType::ENUM_END
, Http::HdrFieldType::ftInvalid
} /* end of table */
120 const LookupTable
<Http::HdrType
, HeaderTableRecord
> HeaderLookupTable(Http::HdrType::BAD_HDR
, HeaderTable
);
122 }; /* namespace Http */