69
* A table with major attributes for every known field.
70
* We calculate name lengths and reorganize this array on start up.
69
* A table with major attributes for every known field.
70
* We calculate name lengths and reorganize this array on start up.
71
71
* After reorganization, field id can be used as an index to the table.
73
static const HttpHeaderFieldAttrs HeadersAttrs[] =
75
{"Accept", HDR_ACCEPT, ftStr},
73
static const HttpHeaderFieldAttrs HeadersAttrs[] = {
74
{"Accept", HDR_ACCEPT, ftStr},
77
{"Accept-Charset", HDR_ACCEPT_CHARSET, ftStr},
78
{"Accept-Encoding", HDR_ACCEPT_ENCODING, ftStr},
79
{"Accept-Language", HDR_ACCEPT_LANGUAGE, ftStr},
80
{"Accept-Ranges", HDR_ACCEPT_RANGES, ftStr},
81
{"Age", HDR_AGE, ftInt},
82
{"Allow", HDR_ALLOW, ftStr},
83
{"Authorization", HDR_AUTHORIZATION, ftStr}, /* for now */
84
{"Cache-Control", HDR_CACHE_CONTROL, ftPCc},
85
{"Connection", HDR_CONNECTION, ftStr},
86
{"Content-Base", HDR_CONTENT_BASE, ftStr},
87
{"Content-Disposition", HDR_CONTENT_DISPOSITION, ftStr}, /* for now */
88
{"Content-Encoding", HDR_CONTENT_ENCODING, ftStr},
89
{"Content-Language", HDR_CONTENT_LANGUAGE, ftStr},
90
{"Content-Length", HDR_CONTENT_LENGTH, ftInt64},
91
{"Content-Location", HDR_CONTENT_LOCATION, ftStr},
92
{"Content-MD5", HDR_CONTENT_MD5, ftStr}, /* for now */
93
{"Content-Range", HDR_CONTENT_RANGE, ftPContRange},
94
{"Content-Type", HDR_CONTENT_TYPE, ftStr},
95
{"Cookie", HDR_COOKIE, ftStr},
96
{"Date", HDR_DATE, ftDate_1123},
97
{"ETag", HDR_ETAG, ftETag},
98
{"Expires", HDR_EXPIRES, ftDate_1123},
99
{"From", HDR_FROM, ftStr},
100
{"Host", HDR_HOST, ftStr},
101
{"If-Match", HDR_IF_MATCH, ftStr}, /* for now */
102
{"If-Modified-Since", HDR_IF_MODIFIED_SINCE, ftDate_1123},
103
{"If-None-Match", HDR_IF_NONE_MATCH, ftStr}, /* for now */
104
{"If-Range", HDR_IF_RANGE, ftDate_1123_or_ETag},
105
{"Keep-Alive", HDR_KEEP_ALIVE, ftStr},
106
{"Last-Modified", HDR_LAST_MODIFIED, ftDate_1123},
107
{"Link", HDR_LINK, ftStr},
108
{"Location", HDR_LOCATION, ftStr},
109
{"Max-Forwards", HDR_MAX_FORWARDS, ftInt64},
110
{"Mime-Version", HDR_MIME_VERSION, ftStr}, /* for now */
111
{"Pragma", HDR_PRAGMA, ftStr},
112
{"Proxy-Authenticate", HDR_PROXY_AUTHENTICATE, ftStr},
113
{"Proxy-Authentication-Info", HDR_PROXY_AUTHENTICATION_INFO, ftStr},
114
{"Proxy-Authorization", HDR_PROXY_AUTHORIZATION, ftStr},
115
{"Proxy-Connection", HDR_PROXY_CONNECTION, ftStr},
116
{"Public", HDR_PUBLIC, ftStr},
117
{"Range", HDR_RANGE, ftPRange},
118
{"Referer", HDR_REFERER, ftStr},
119
{"Request-Range", HDR_REQUEST_RANGE, ftPRange}, /* usually matches HDR_RANGE */
120
{"Retry-After", HDR_RETRY_AFTER, ftStr}, /* for now (ftDate_1123 or ftInt!) */
121
{"Server", HDR_SERVER, ftStr},
122
{"Set-Cookie", HDR_SET_COOKIE, ftStr},
123
{"TE", HDR_TE, ftStr},
124
{"Title", HDR_TITLE, ftStr},
125
{"Trailers", HDR_TRAILERS, ftStr},
126
{"Transfer-Encoding", HDR_TRANSFER_ENCODING, ftStr},
127
{"Translate", HDR_TRANSLATE, ftStr}, /* for now. may need to crop */
128
{"Unless-Modified-Since", HDR_UNLESS_MODIFIED_SINCE, ftStr}, /* for now ignore. may need to crop */
129
{"Upgrade", HDR_UPGRADE, ftStr}, /* for now */
130
{"User-Agent", HDR_USER_AGENT, ftStr},
131
{"Vary", HDR_VARY, ftStr}, /* for now */
132
{"Via", HDR_VIA, ftStr}, /* for now */
133
{"Warning", HDR_WARNING, ftStr}, /* for now */
134
{"WWW-Authenticate", HDR_WWW_AUTHENTICATE, ftStr},
135
{"Authentication-Info", HDR_AUTHENTICATION_INFO, ftStr},
136
{"X-Cache", HDR_X_CACHE, ftStr},
137
{"X-Cache-Lookup", HDR_X_CACHE_LOOKUP, ftStr},
138
{"X-Forwarded-For", HDR_X_FORWARDED_FOR, ftStr},
139
{"X-Request-URI", HDR_X_REQUEST_URI, ftStr},
140
{"X-Squid-Error", HDR_X_SQUID_ERROR, ftStr},
141
{"Negotiate", HDR_NEGOTIATE, ftStr},
76
{"Accept-Charset", HDR_ACCEPT_CHARSET, ftStr},
77
{"Accept-Encoding", HDR_ACCEPT_ENCODING, ftStr},
78
{"Accept-Language", HDR_ACCEPT_LANGUAGE, ftStr},
79
{"Accept-Ranges", HDR_ACCEPT_RANGES, ftStr},
80
{"Age", HDR_AGE, ftInt},
81
{"Allow", HDR_ALLOW, ftStr},
82
{"Authorization", HDR_AUTHORIZATION, ftStr}, /* for now */
83
{"Cache-Control", HDR_CACHE_CONTROL, ftPCc},
84
{"Connection", HDR_CONNECTION, ftStr},
85
{"Content-Base", HDR_CONTENT_BASE, ftStr},
86
{"Content-Disposition", HDR_CONTENT_DISPOSITION, ftStr}, /* for now */
87
{"Content-Encoding", HDR_CONTENT_ENCODING, ftStr},
88
{"Content-Language", HDR_CONTENT_LANGUAGE, ftStr},
89
{"Content-Length", HDR_CONTENT_LENGTH, ftInt64},
90
{"Content-Location", HDR_CONTENT_LOCATION, ftStr},
91
{"Content-MD5", HDR_CONTENT_MD5, ftStr}, /* for now */
92
{"Content-Range", HDR_CONTENT_RANGE, ftPContRange},
93
{"Content-Type", HDR_CONTENT_TYPE, ftStr},
94
{"Cookie", HDR_COOKIE, ftStr},
95
{"Date", HDR_DATE, ftDate_1123},
96
{"ETag", HDR_ETAG, ftETag},
97
{"Expires", HDR_EXPIRES, ftDate_1123},
98
{"Expect", HDR_EXPECT, ftStr},
99
{"From", HDR_FROM, ftStr},
100
{"Host", HDR_HOST, ftStr},
101
{"If-Match", HDR_IF_MATCH, ftStr}, /* for now */
102
{"If-Modified-Since", HDR_IF_MODIFIED_SINCE, ftDate_1123},
103
{"If-None-Match", HDR_IF_NONE_MATCH, ftStr}, /* for now */
104
{"If-Range", HDR_IF_RANGE, ftDate_1123_or_ETag},
105
{"Keep-Alive", HDR_KEEP_ALIVE, ftStr},
106
{"Last-Modified", HDR_LAST_MODIFIED, ftDate_1123},
107
{"Link", HDR_LINK, ftStr},
108
{"Location", HDR_LOCATION, ftStr},
109
{"Max-Forwards", HDR_MAX_FORWARDS, ftInt64},
110
{"Mime-Version", HDR_MIME_VERSION, ftStr}, /* for now */
111
{"Pragma", HDR_PRAGMA, ftStr},
112
{"Proxy-Authenticate", HDR_PROXY_AUTHENTICATE, ftStr},
113
{"Proxy-Authentication-Info", HDR_PROXY_AUTHENTICATION_INFO, ftStr},
114
{"Proxy-Authorization", HDR_PROXY_AUTHORIZATION, ftStr},
115
{"Proxy-Connection", HDR_PROXY_CONNECTION, ftStr},
116
{"Proxy-support", HDR_PROXY_SUPPORT, ftStr},
117
{"Public", HDR_PUBLIC, ftStr},
118
{"Range", HDR_RANGE, ftPRange},
119
{"Referer", HDR_REFERER, ftStr},
120
{"Request-Range", HDR_REQUEST_RANGE, ftPRange}, /* usually matches HDR_RANGE */
121
{"Retry-After", HDR_RETRY_AFTER, ftStr}, /* for now (ftDate_1123 or ftInt!) */
122
{"Server", HDR_SERVER, ftStr},
123
{"Set-Cookie", HDR_SET_COOKIE, ftStr},
124
{"TE", HDR_TE, ftStr},
125
{"Title", HDR_TITLE, ftStr},
126
{"Trailers", HDR_TRAILERS, ftStr},
127
{"Transfer-Encoding", HDR_TRANSFER_ENCODING, ftStr},
128
{"Translate", HDR_TRANSLATE, ftStr}, /* for now. may need to crop */
129
{"Unless-Modified-Since", HDR_UNLESS_MODIFIED_SINCE, ftStr}, /* for now ignore. may need to crop */
130
{"Upgrade", HDR_UPGRADE, ftStr}, /* for now */
131
{"User-Agent", HDR_USER_AGENT, ftStr},
132
{"Vary", HDR_VARY, ftStr}, /* for now */
133
{"Via", HDR_VIA, ftStr}, /* for now */
134
{"Warning", HDR_WARNING, ftStr}, /* for now */
135
{"WWW-Authenticate", HDR_WWW_AUTHENTICATE, ftStr},
136
{"Authentication-Info", HDR_AUTHENTICATION_INFO, ftStr},
137
{"X-Cache", HDR_X_CACHE, ftStr},
138
{"X-Cache-Lookup", HDR_X_CACHE_LOOKUP, ftStr},
139
{"X-Forwarded-For", HDR_X_FORWARDED_FOR, ftStr},
140
{"X-Request-URI", HDR_X_REQUEST_URI, ftStr},
141
{"X-Squid-Error", HDR_X_SQUID_ERROR, ftStr},
142
{"Negotiate", HDR_NEGOTIATE, ftStr},
142
143
#if X_ACCELERATOR_VARY
143
{"X-Accelerator-Vary", HDR_X_ACCELERATOR_VARY, ftStr},
145
{"Surrogate-Capability", HDR_SURROGATE_CAPABILITY, ftStr},
146
{"Surrogate-Control", HDR_SURROGATE_CONTROL, ftPSc},
147
{"Front-End-Https", HDR_FRONT_END_HTTPS, ftStr},
148
{"Other:", HDR_OTHER, ftStr} /* ':' will not allow matches */
144
{"X-Accelerator-Vary", HDR_X_ACCELERATOR_VARY, ftStr},
147
{"X-Next-Services", HDR_X_NEXT_SERVICES, ftStr},
149
{"Surrogate-Capability", HDR_SURROGATE_CAPABILITY, ftStr},
150
{"Surrogate-Control", HDR_SURROGATE_CONTROL, ftPSc},
151
{"Front-End-Https", HDR_FRONT_END_HTTPS, ftStr},
152
{"Other:", HDR_OTHER, ftStr} /* ':' will not allow matches */
151
155
static HttpHeaderFieldInfo *Headers = NULL;
163
167
* Headers that are currently not recognized, are commented out.
165
169
static HttpHeaderMask ListHeadersMask; /* set run-time using ListHeadersArr */
166
static http_hdr_type ListHeadersArr[] =
169
HDR_ACCEPT_CHARSET, HDR_ACCEPT_ENCODING, HDR_ACCEPT_LANGUAGE,
170
HDR_ACCEPT_RANGES, HDR_ALLOW,
172
HDR_CONTENT_ENCODING,
173
HDR_CONTENT_LANGUAGE,
175
HDR_IF_MATCH, HDR_IF_NONE_MATCH,
176
HDR_LINK, HDR_PRAGMA,
177
HDR_PROXY_CONNECTION,
178
HDR_TRANSFER_ENCODING,
183
HDR_WWW_AUTHENTICATE,
184
HDR_AUTHENTICATION_INFO,
185
HDR_PROXY_AUTHENTICATION_INFO,
186
/* HDR_EXPECT, HDR_TE, HDR_TRAILER */
170
static http_hdr_type ListHeadersArr[] = {
172
HDR_ACCEPT_CHARSET, HDR_ACCEPT_ENCODING, HDR_ACCEPT_LANGUAGE,
173
HDR_ACCEPT_RANGES, HDR_ALLOW,
175
HDR_CONTENT_ENCODING,
176
HDR_CONTENT_LANGUAGE,
179
HDR_IF_MATCH, HDR_IF_NONE_MATCH,
180
HDR_LINK, HDR_PRAGMA,
181
HDR_PROXY_CONNECTION,
183
HDR_TRANSFER_ENCODING,
188
HDR_WWW_AUTHENTICATE,
189
HDR_AUTHENTICATION_INFO,
190
HDR_PROXY_AUTHENTICATION_INFO,
191
/* HDR_TE, HDR_TRAILER */
187
192
#if X_ACCELERATOR_VARY
188
HDR_X_ACCELERATOR_VARY,
190
HDR_SURROGATE_CAPABILITY,
191
HDR_SURROGATE_CONTROL,
193
HDR_X_ACCELERATOR_VARY,
198
HDR_SURROGATE_CAPABILITY,
199
HDR_SURROGATE_CONTROL,
195
203
/* general-headers */
196
static http_hdr_type GeneralHeadersArr[] =
198
HDR_CACHE_CONTROL, HDR_CONNECTION, HDR_DATE, HDR_PRAGMA,
199
HDR_TRANSFER_ENCODING,
204
static http_hdr_type GeneralHeadersArr[] = {
205
HDR_CACHE_CONTROL, HDR_CONNECTION, HDR_DATE, HDR_PRAGMA,
206
HDR_TRANSFER_ENCODING,
205
212
/* entity-headers */
206
static http_hdr_type EntityHeadersArr[] =
208
HDR_ALLOW, HDR_CONTENT_BASE, HDR_CONTENT_ENCODING, HDR_CONTENT_LANGUAGE,
209
HDR_CONTENT_LENGTH, HDR_CONTENT_LOCATION, HDR_CONTENT_MD5,
210
HDR_CONTENT_RANGE, HDR_CONTENT_TYPE, HDR_ETAG, HDR_EXPIRES, HDR_LAST_MODIFIED, HDR_LINK,
213
static http_hdr_type EntityHeadersArr[] = {
214
HDR_ALLOW, HDR_CONTENT_BASE, HDR_CONTENT_ENCODING, HDR_CONTENT_LANGUAGE,
215
HDR_CONTENT_LENGTH, HDR_CONTENT_LOCATION, HDR_CONTENT_MD5,
216
HDR_CONTENT_RANGE, HDR_CONTENT_TYPE, HDR_ETAG, HDR_EXPIRES, HDR_LAST_MODIFIED, HDR_LINK,
214
220
static HttpHeaderMask ReplyHeadersMask; /* set run-time using ReplyHeaders */
215
static http_hdr_type ReplyHeadersArr[] =
217
HDR_ACCEPT, HDR_ACCEPT_CHARSET, HDR_ACCEPT_ENCODING, HDR_ACCEPT_LANGUAGE,
218
HDR_ACCEPT_RANGES, HDR_AGE,
219
HDR_LOCATION, HDR_MAX_FORWARDS,
220
HDR_MIME_VERSION, HDR_PUBLIC, HDR_RETRY_AFTER, HDR_SERVER, HDR_SET_COOKIE,
222
HDR_WARNING, HDR_PROXY_CONNECTION, HDR_X_CACHE,
221
static http_hdr_type ReplyHeadersArr[] = {
222
HDR_ACCEPT, HDR_ACCEPT_CHARSET, HDR_ACCEPT_ENCODING, HDR_ACCEPT_LANGUAGE,
223
HDR_ACCEPT_RANGES, HDR_AGE,
224
HDR_LOCATION, HDR_MAX_FORWARDS,
225
HDR_MIME_VERSION, HDR_PUBLIC, HDR_RETRY_AFTER, HDR_SERVER, HDR_SET_COOKIE,
227
HDR_WARNING, HDR_PROXY_CONNECTION, HDR_X_CACHE,
225
230
#if X_ACCELERATOR_VARY
226
HDR_X_ACCELERATOR_VARY,
229
HDR_SURROGATE_CONTROL
231
HDR_X_ACCELERATOR_VARY,
237
HDR_SURROGATE_CONTROL
232
240
static HttpHeaderMask RequestHeadersMask; /* set run-time using RequestHeaders */
233
static http_hdr_type RequestHeadersArr[] =
235
HDR_AUTHORIZATION, HDR_FROM, HDR_HOST,
236
HDR_IF_MATCH, HDR_IF_MODIFIED_SINCE, HDR_IF_NONE_MATCH,
237
HDR_IF_RANGE, HDR_MAX_FORWARDS, HDR_PROXY_CONNECTION,
238
HDR_PROXY_AUTHORIZATION, HDR_RANGE, HDR_REFERER, HDR_REQUEST_RANGE,
239
HDR_USER_AGENT, HDR_X_FORWARDED_FOR, HDR_SURROGATE_CAPABILITY
241
static http_hdr_type RequestHeadersArr[] = {
242
HDR_AUTHORIZATION, HDR_FROM, HDR_HOST,
243
HDR_IF_MATCH, HDR_IF_MODIFIED_SINCE, HDR_IF_NONE_MATCH,
244
HDR_IF_RANGE, HDR_MAX_FORWARDS, HDR_PROXY_CONNECTION,
245
HDR_PROXY_AUTHORIZATION, HDR_RANGE, HDR_REFERER, HDR_REQUEST_RANGE,
246
HDR_USER_AGENT, HDR_X_FORWARDED_FOR, HDR_SURROGATE_CAPABILITY
242
static http_hdr_type HopByHopHeadersArr[] =
244
HDR_CONNECTION, HDR_KEEP_ALIVE, HDR_PROXY_AUTHENTICATE, HDR_PROXY_AUTHORIZATION,
245
HDR_TE, HDR_TRAILERS, HDR_TRANSFER_ENCODING, HDR_UPGRADE
249
static HttpHeaderMask HopByHopHeadersMask;
250
static http_hdr_type HopByHopHeadersArr[] = {
251
HDR_CONNECTION, HDR_KEEP_ALIVE, /*HDR_PROXY_AUTHENTICATE,*/ HDR_PROXY_AUTHORIZATION,
252
HDR_TE, HDR_TRAILERS, HDR_TRANSFER_ENCODING, HDR_UPGRADE, HDR_PROXY_CONNECTION
248
255
/* header accounting */
249
static HttpHeaderStat HttpHeaderStats[] =
256
static HttpHeaderStat HttpHeaderStats[] = {
258
264
static int HttpHeaderStatCount = countof(HttpHeaderStats);
260
266
static int HeaderEntryParsedCount = 0;