lighttpd 1.4.x https://www.lighttpd.net/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

140 lines
5.5 KiB

#ifndef INCLUDED_HTTP_HEADER_H
#define INCLUDED_HTTP_HEADER_H
#include "first.h"
#include "base_decls.h"
#include "buffer.h"
/* HTTP header enum for select HTTP field-names
* reference:
* https://www.iana.org/assignments/message-headers/message-headers.xml
* https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
*/
/* Note: must be kept in sync with http_header.c http_headers[] */
/* Note: must be kept in sync h2.c:http_header_lc[] */
/* Note: must be kept in sync h2.c:http_header_lshpack_idx[] */
/* Note: must be kept in sync h2.c:lshpack_idx_http_header[] */
/* Note: when adding new items, must replace OTHER in existing code for item */
/* Note: current implementation has limit of 64 htags
* Use of htags is an optimization for quick existence checks in lighttpd.
* (In the future, these values may also be used to map to HPACK indices.)
* However, listing all possible headers here is highly discouraged,
* as extending the bitmap greater than 64-bits may make quick bitmasks
* check more expensive, and the cost for looking up unmarked headers
* (HTTP_HEADER_OTHER) is not substantially more. In the future, this
* list may be revisitied and reviewed, and less frequent headers removed
* or replaced.
*/
enum http_header_h2_e { /* pseudo-headers */
HTTP_HEADER_H2_UNKNOWN = -1
,HTTP_HEADER_H2_AUTHORITY = -2
,HTTP_HEADER_H2_METHOD_GET = -3
,HTTP_HEADER_H2_METHOD_POST = -4
,HTTP_HEADER_H2_PATH = -5
,HTTP_HEADER_H2_PATH_INDEX_HTML = -6
,HTTP_HEADER_H2_SCHEME_HTTP = -7
,HTTP_HEADER_H2_SCHEME_HTTPS = -8
};
enum http_header_e {
HTTP_HEADER_OTHER = 0
,HTTP_HEADER_ACCEPT
,HTTP_HEADER_ACCEPT_ENCODING
,HTTP_HEADER_ACCEPT_LANGUAGE
,HTTP_HEADER_ACCEPT_RANGES
,HTTP_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN
,HTTP_HEADER_AGE
,HTTP_HEADER_ALLOW
,HTTP_HEADER_ALT_SVC
,HTTP_HEADER_ALT_USED
,HTTP_HEADER_AUTHORIZATION
,HTTP_HEADER_CACHE_CONTROL
,HTTP_HEADER_CONNECTION
,HTTP_HEADER_CONTENT_ENCODING
,HTTP_HEADER_CONTENT_LENGTH
,HTTP_HEADER_CONTENT_LOCATION
,HTTP_HEADER_CONTENT_RANGE
,HTTP_HEADER_CONTENT_SECURITY_POLICY
,HTTP_HEADER_CONTENT_TYPE
,HTTP_HEADER_COOKIE
,HTTP_HEADER_DATE
,HTTP_HEADER_DNT
,HTTP_HEADER_ETAG
,HTTP_HEADER_EXPECT
,HTTP_HEADER_EXPECT_CT
,HTTP_HEADER_EXPIRES
,HTTP_HEADER_FORWARDED
,HTTP_HEADER_HOST
,HTTP_HEADER_HTTP2_SETTINGS
,HTTP_HEADER_IF_MATCH
,HTTP_HEADER_IF_MODIFIED_SINCE
,HTTP_HEADER_IF_NONE_MATCH
,HTTP_HEADER_IF_RANGE
,HTTP_HEADER_IF_UNMODIFIED_SINCE
,HTTP_HEADER_LAST_MODIFIED
,HTTP_HEADER_LINK
,HTTP_HEADER_LOCATION
,HTTP_HEADER_ONION_LOCATION
,HTTP_HEADER_P3P
,HTTP_HEADER_PRAGMA
,HTTP_HEADER_RANGE
,HTTP_HEADER_REFERER
,HTTP_HEADER_REFERRER_POLICY
,HTTP_HEADER_SERVER
,HTTP_HEADER_SET_COOKIE
,HTTP_HEADER_STATUS
,HTTP_HEADER_STRICT_TRANSPORT_SECURITY
,HTTP_HEADER_TE
,HTTP_HEADER_TRANSFER_ENCODING
,HTTP_HEADER_UPGRADE
,HTTP_HEADER_UPGRADE_INSECURE_REQUESTS
,HTTP_HEADER_USER_AGENT
,HTTP_HEADER_VARY
,HTTP_HEADER_WWW_AUTHENTICATE
,HTTP_HEADER_X_CONTENT_TYPE_OPTIONS
,HTTP_HEADER_X_FORWARDED_FOR
,HTTP_HEADER_X_FORWARDED_PROTO
,HTTP_HEADER_X_FRAME_OPTIONS
,HTTP_HEADER_X_XSS_PROTECTION
};
__attribute_pure__
enum http_header_e http_header_hkey_get(const char *s, size_t slen);
__attribute_pure__
enum http_header_e http_header_hkey_get_lc(const char *s, size_t slen);
__attribute_pure__
int http_header_str_to_code (const char * const s);
__attribute_pure__
int http_header_str_contains_token (const char *s, uint32_t slen, const char *m, uint32_t mlen);
int http_header_remove_token (buffer * const b, const char * const m, const uint32_t mlen);
__attribute_pure__
buffer * http_header_response_get(const request_st *r, enum http_header_e id, const char *k, uint32_t klen);
__attribute_returns_nonnull__
buffer * http_header_response_set_ptr(request_st *r, enum http_header_e id, const char *k, uint32_t klen);
void http_header_response_unset(request_st *r, enum http_header_e id, const char *k, uint32_t klen);
void http_header_response_set(request_st *r, enum http_header_e id, const char *k, uint32_t klen, const char *v, uint32_t vlen);
void http_header_response_append(request_st *r, enum http_header_e id, const char *k, uint32_t klen, const char *v, uint32_t vlen);
void http_header_response_insert(request_st *r, enum http_header_e id, const char *k, uint32_t klen, const char *v, uint32_t vlen);
__attribute_pure__
buffer * http_header_request_get(const request_st *r, enum http_header_e id, const char *k, uint32_t klen);
__attribute_returns_nonnull__
buffer * http_header_request_set_ptr(request_st *r, enum http_header_e id, const char *k, uint32_t klen);
void http_header_request_unset(request_st *r, enum http_header_e id, const char *k, uint32_t klen);
void http_header_request_set(request_st *r, enum http_header_e id, const char *k, uint32_t klen, const char *v, uint32_t vlen);
void http_header_request_append(request_st *r, enum http_header_e id, const char *k, uint32_t klen, const char *v, uint32_t vlen);
__attribute_pure__
buffer * http_header_env_get(const request_st *r, const char *k, uint32_t klen);
__attribute_returns_nonnull__
buffer * http_header_env_set_ptr(request_st *r, const char *k, uint32_t klen);
void http_header_env_set(request_st *r, const char *k, uint32_t klen, const char *v, uint32_t vlen);
void http_header_env_append(request_st *r, const char *k, uint32_t klen, const char *v, uint32_t vlen);
__attribute_hot__
uint32_t http_header_parse_hoff (const char *n, const uint32_t clen, unsigned short hoff[8192]);
#endif