@ -29,35 +29,35 @@ int8_t http_headers_off[] = {
- 1 , - 1 , - 1 , - 1 , 0 , 4 , 5 , 9 , 10 , 11 , 12 , - 1 , 15 , 16 , 20 , 22 , 24 , 26
} ;
static const keyvlenvalue http_headers [ ] = {
{ HTTP_HEADER_HOST , CONST_LEN_STR ( " H ost" ) }
, { HTTP_HEADER_DATE , CONST_LEN_STR ( " D ate" ) }
, { HTTP_HEADER_ETAG , CONST_LEN_STR ( " ET ag" ) }
, { HTTP_HEADER_VARY , CONST_LEN_STR ( " V ary" ) }
, { HTTP_HEADER_RANGE , CONST_LEN_STR ( " R ange" ) }
, { HTTP_HEADER_COOKIE , CONST_LEN_STR ( " C ookie" ) }
, { HTTP_HEADER_EXPECT , CONST_LEN_STR ( " E xpect" ) }
, { HTTP_HEADER_STATUS , CONST_LEN_STR ( " S tatus" ) }
, { HTTP_HEADER_SERVER , CONST_LEN_STR ( " S erver" ) }
, { HTTP_HEADER_UPGRADE , CONST_LEN_STR ( " U pgrade" ) }
, { HTTP_HEADER_LOCATION , CONST_LEN_STR ( " L ocation" ) }
, { HTTP_HEADER_FORWARDED , CONST_LEN_STR ( " F orwarded" ) }
, { HTTP_HEADER_CONNECTION , CONST_LEN_STR ( " C onnection" ) }
, { HTTP_HEADER_SET_COOKIE , CONST_LEN_STR ( " Set-C ookie" ) }
, { HTTP_HEADER_USER_AGENT , CONST_LEN_STR ( " User-A gent" ) }
, { HTTP_HEADER_CONTENT_TYPE , CONST_LEN_STR ( " Content-T ype" ) }
, { HTTP_HEADER_LAST_MODIFIED , CONST_LEN_STR ( " Last-M odified" ) }
, { HTTP_HEADER_AUTHORIZATION , CONST_LEN_STR ( " A uthorization" ) }
, { HTTP_HEADER_IF_NONE_MATCH , CONST_LEN_STR ( " If-None-M atch" ) }
, { HTTP_HEADER_CACHE_CONTROL , CONST_LEN_STR ( " Cache-C ontrol" ) }
, { HTTP_HEADER_CONTENT_LENGTH , CONST_LEN_STR ( " Content-L ength" ) }
, { HTTP_HEADER_HTTP2_SETTINGS , CONST_LEN_STR ( " HTTP2-S ettings" ) }
, { HTTP_HEADER_ACCEPT_ENCODING , CONST_LEN_STR ( " Accept-E ncoding" ) }
, { HTTP_HEADER_X_FORWARDED_FOR , CONST_LEN_STR ( " X-Forwarded-F or" ) }
, { HTTP_HEADER_CONTENT_ENCODING , CONST_LEN_STR ( " Content-E ncoding" ) }
, { HTTP_HEADER_CONTENT_LOCATION , CONST_LEN_STR ( " Content-L ocation" ) }
, { HTTP_HEADER_IF_MODIFIED_SINCE , CONST_LEN_STR ( " If-Modified-S ince" ) }
, { HTTP_HEADER_TRANSFER_ENCODING , CONST_LEN_STR ( " Transfer-E ncoding" ) }
, { HTTP_HEADER_X_FORWARDED_PROTO , CONST_LEN_STR ( " X-Forwarded-P roto" ) }
{ HTTP_HEADER_HOST , CONST_LEN_STR ( " h ost" ) }
, { HTTP_HEADER_DATE , CONST_LEN_STR ( " d ate" ) }
, { HTTP_HEADER_ETAG , CONST_LEN_STR ( " et ag" ) }
, { HTTP_HEADER_VARY , CONST_LEN_STR ( " v ary" ) }
, { HTTP_HEADER_RANGE , CONST_LEN_STR ( " r ange" ) }
, { HTTP_HEADER_COOKIE , CONST_LEN_STR ( " c ookie" ) }
, { HTTP_HEADER_EXPECT , CONST_LEN_STR ( " e xpect" ) }
, { HTTP_HEADER_STATUS , CONST_LEN_STR ( " s tatus" ) }
, { HTTP_HEADER_SERVER , CONST_LEN_STR ( " s erver" ) }
, { HTTP_HEADER_UPGRADE , CONST_LEN_STR ( " u pgrade" ) }
, { HTTP_HEADER_LOCATION , CONST_LEN_STR ( " l ocation" ) }
, { HTTP_HEADER_FORWARDED , CONST_LEN_STR ( " f orwarded" ) }
, { HTTP_HEADER_CONNECTION , CONST_LEN_STR ( " c onnection" ) }
, { HTTP_HEADER_SET_COOKIE , CONST_LEN_STR ( " set-c ookie" ) }
, { HTTP_HEADER_USER_AGENT , CONST_LEN_STR ( " user-a gent" ) }
, { HTTP_HEADER_CONTENT_TYPE , CONST_LEN_STR ( " content-t ype" ) }
, { HTTP_HEADER_LAST_MODIFIED , CONST_LEN_STR ( " last-m odified" ) }
, { HTTP_HEADER_AUTHORIZATION , CONST_LEN_STR ( " a uthorization" ) }
, { HTTP_HEADER_IF_NONE_MATCH , CONST_LEN_STR ( " if-none-m atch" ) }
, { HTTP_HEADER_CACHE_CONTROL , CONST_LEN_STR ( " cache-c ontrol" ) }
, { HTTP_HEADER_CONTENT_LENGTH , CONST_LEN_STR ( " content-l ength" ) }
, { HTTP_HEADER_HTTP2_SETTINGS , CONST_LEN_STR ( " http2-s ettings" ) }
, { HTTP_HEADER_ACCEPT_ENCODING , CONST_LEN_STR ( " accept-e ncoding" ) }
, { HTTP_HEADER_X_FORWARDED_FOR , CONST_LEN_STR ( " x-forwarded-f or" ) }
, { HTTP_HEADER_CONTENT_ENCODING , CONST_LEN_STR ( " content-e ncoding" ) }
, { HTTP_HEADER_CONTENT_LOCATION , CONST_LEN_STR ( " content-l ocation" ) }
, { HTTP_HEADER_IF_MODIFIED_SINCE , CONST_LEN_STR ( " if-modified-s ince" ) }
, { HTTP_HEADER_TRANSFER_ENCODING , CONST_LEN_STR ( " transfer-e ncoding" ) }
, { HTTP_HEADER_X_FORWARDED_PROTO , CONST_LEN_STR ( " x-forwarded-p roto" ) }
, { HTTP_HEADER_OTHER , 0 , " " }
} ;
@ -72,6 +72,17 @@ enum http_header_e http_header_hkey_get(const char * const s, const uint32_t sle
return HTTP_HEADER_OTHER ;
}
enum http_header_e http_header_hkey_get_lc ( const char * const s , const uint32_t slen ) {
const struct keyvlenvalue * const kv = http_headers ;
int i = slen < sizeof ( http_headers_off ) ? http_headers_off [ slen ] : - 1 ;
if ( i < 0 ) return HTTP_HEADER_OTHER ;
do {
if ( 0 = = memcmp ( s , kv [ i ] . value , slen ) )
return ( enum http_header_e ) kv [ i ] . key ;
} while ( slen = = kv [ + + i ] . vlen ) ;
return HTTP_HEADER_OTHER ;
}
int http_header_str_to_code ( const char * const s )
{