Mercurial > hg > nginx-vendor-current
diff src/http/ngx_http_core_module.h @ 0:f0b350454894 NGINX_0_1_0
nginx 0.1.0
*) The first public version.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 04 Oct 2004 00:00:00 +0400 |
parents | |
children | cc9f381affaa |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/src/http/ngx_http_core_module.h @@ -0,0 +1,214 @@ + +/* + * Copyright (C) Igor Sysoev + */ + + +#ifndef _NGX_HTTP_CORE_H_INCLUDED_ +#define _NGX_HTTP_CORE_H_INCLUDED_ + + +#include <ngx_string.h> +#include <ngx_array.h> +#include <ngx_http.h> + + +typedef struct { + in_addr_t addr; + in_port_t port; + int family; + ngx_str_t file_name; + int line; + + unsigned default_server:1; +} ngx_http_listen_t; + + +typedef enum { + NGX_HTTP_REWRITE_PHASE = 0, + + NGX_HTTP_FIND_CONFIG_PHASE, + + NGX_HTTP_ACCESS_PHASE, + NGX_HTTP_CONTENT_PHASE, + + NGX_HTTP_LAST_PHASE +} ngx_http_phases; + + +typedef struct { + ngx_array_t handlers; + ngx_int_t type; /* NGX_OK, NGX_DECLINED */ +} ngx_http_phase_t; + + +typedef struct { + ngx_array_t servers; /* array of ngx_http_core_srv_conf_t */ + + ngx_http_phase_t phases[NGX_HTTP_LAST_PHASE]; + ngx_array_t index_handlers; + + size_t max_server_name_len; +} ngx_http_core_main_conf_t; + + +typedef struct { + /* + * array of ngx_http_core_loc_conf_t, used in the translation handler + * and in the merge phase + */ + ngx_array_t locations; + + /* "listen", array of ngx_http_listen_t */ + ngx_array_t listen; + + /* "server_name", array of ngx_http_server_name_t */ + ngx_array_t server_names; + + /* server ctx */ + ngx_http_conf_ctx_t *ctx; + + size_t connection_pool_size; + size_t request_pool_size; + size_t client_header_buffer_size; + + ngx_bufs_t large_client_header_buffers; + + ngx_msec_t post_accept_timeout; + ngx_msec_t client_header_timeout; + + ngx_uint_t restrict_host_names; +} ngx_http_core_srv_conf_t; + + +/* list of structures to find core_srv_conf quickly at run time */ + +typedef struct { + in_port_t port; + ngx_str_t port_text; + ngx_array_t addrs; /* array of ngx_http_in_addr_t */ +} ngx_http_in_port_t; + + +typedef struct { + in_addr_t addr; + ngx_array_t names; /* array of ngx_http_server_name_t */ + ngx_http_core_srv_conf_t *core_srv_conf; /* default server conf + for this address:port */ + + unsigned default_server:1; +} ngx_http_in_addr_t; + + +typedef struct { + ngx_str_t name; + ngx_http_core_srv_conf_t *core_srv_conf; /* virtual name server conf */ +} ngx_http_server_name_t; + + +#define NGX_HTTP_TYPES_HASH_PRIME 13 + +#define ngx_http_types_hash_key(key, ext) \ + { \ + u_int n; \ + for (key = 0, n = 0; n < ext.len; n++) { \ + key += ext.data[n]; \ + } \ + key %= NGX_HTTP_TYPES_HASH_PRIME; \ + } + +typedef struct { + ngx_str_t exten; + ngx_str_t type; +} ngx_http_type_t; + + +typedef struct { + ngx_int_t status; + ngx_int_t overwrite; + ngx_str_t uri; +} ngx_http_err_page_t; + + +typedef struct ngx_http_core_loc_conf_s ngx_http_core_loc_conf_t; + +struct ngx_http_core_loc_conf_s { + ngx_str_t name; /* location name */ + +#if (HAVE_PCRE) + ngx_regex_t *regex; +#endif + + unsigned exact_match:1; + unsigned auto_redirect:1; + unsigned alias:1; + + /* array of inclusive ngx_http_core_loc_conf_t */ + ngx_array_t locations; + + /* pointer to the modules' loc_conf */ + void **loc_conf ; + + ngx_http_handler_pt handler; + + ngx_str_t root; /* root, alias */ + + ngx_array_t *types; + ngx_str_t default_type; + + size_t client_max_body_size; /* client_max_body_size */ + size_t client_body_buffer_size; /* client_body_buffer_size */ + size_t send_lowat; /* send_lowat */ + size_t postpone_output; /* postpone_output */ + size_t limit_rate; /* limit_rate */ + + ngx_msec_t client_body_timeout; /* client_body_timeout */ + ngx_msec_t send_timeout; /* send_timeout */ + ngx_msec_t keepalive_timeout; /* keepalive_timeout */ + ngx_msec_t lingering_time; /* lingering_time */ + ngx_msec_t lingering_timeout; /* lingering_timeout */ + + time_t keepalive_header; /* keepalive_timeout */ + + ngx_flag_t sendfile; /* sendfile */ + ngx_flag_t tcp_nopush; /* tcp_nopush */ + ngx_flag_t reset_timedout_connection; /* reset_timedout_connection */ + ngx_flag_t msie_padding; /* msie_padding */ + + ngx_array_t *error_pages; /* error_page */ + + ngx_http_cache_hash_t *open_files; + + ngx_log_t *err_log; + + ngx_http_core_loc_conf_t *prev_location; +}; + + +extern ngx_http_module_t ngx_http_core_module_ctx; +extern ngx_module_t ngx_http_core_module; + +extern int ngx_http_max_module; + + + +ngx_int_t ngx_http_find_location_config(ngx_http_request_t *r); +ngx_int_t ngx_http_core_translate_handler(ngx_http_request_t *r); + +ngx_int_t ngx_http_set_content_type(ngx_http_request_t *r); +ngx_int_t ngx_http_set_exten(ngx_http_request_t *r); + +ngx_int_t ngx_http_internal_redirect(ngx_http_request_t *r, + ngx_str_t *uri, ngx_str_t *args); + + +typedef ngx_int_t (*ngx_http_output_header_filter_pt)(ngx_http_request_t *r); +typedef ngx_int_t (*ngx_http_output_body_filter_pt) + (ngx_http_request_t *r, ngx_chain_t *chain); + + +ngx_int_t ngx_http_output_filter(ngx_http_request_t *r, ngx_chain_t *chain); +ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *chain); + + +#endif /* _NGX_HTTP_CORE_H_INCLUDED_ */