#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
#define NGX_HTTP_SSI_ERROR …
#define NGX_HTTP_SSI_DATE_LEN …
#define NGX_HTTP_SSI_ADD_PREFIX …
#define NGX_HTTP_SSI_ADD_ZERO …
ngx_http_ssi_loc_conf_t;
ngx_http_ssi_var_t;
ngx_http_ssi_block_t;
ngx_http_ssi_state_e;
static ngx_int_t ngx_http_ssi_output(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx);
static void ngx_http_ssi_buffered(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx);
static ngx_int_t ngx_http_ssi_parse(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx);
static ngx_str_t *ngx_http_ssi_get_variable(ngx_http_request_t *r,
ngx_str_t *name, ngx_uint_t key);
static ngx_int_t ngx_http_ssi_evaluate_string(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t *text, ngx_uint_t flags);
static ngx_int_t ngx_http_ssi_regex_match(ngx_http_request_t *r,
ngx_str_t *pattern, ngx_str_t *str);
static ngx_int_t ngx_http_ssi_include(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_stub_output(ngx_http_request_t *r, void *data,
ngx_int_t rc);
static ngx_int_t ngx_http_ssi_set_variable(ngx_http_request_t *r, void *data,
ngx_int_t rc);
static ngx_int_t ngx_http_ssi_echo(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_config(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_set(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_if(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_else(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_endif(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_block(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_endblock(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
static ngx_int_t ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t gmt);
static ngx_int_t ngx_http_ssi_preconfiguration(ngx_conf_t *cf);
static void *ngx_http_ssi_create_main_conf(ngx_conf_t *cf);
static char *ngx_http_ssi_init_main_conf(ngx_conf_t *cf, void *conf);
static void *ngx_http_ssi_create_loc_conf(ngx_conf_t *cf);
static char *ngx_http_ssi_merge_loc_conf(ngx_conf_t *cf,
void *parent, void *child);
static ngx_int_t ngx_http_ssi_filter_init(ngx_conf_t *cf);
static ngx_command_t ngx_http_ssi_filter_commands[] = …;
static ngx_http_module_t ngx_http_ssi_filter_module_ctx = …;
ngx_module_t ngx_http_ssi_filter_module = …;
static ngx_http_output_header_filter_pt ngx_http_next_header_filter;
static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
static u_char ngx_http_ssi_string[] = …;
static ngx_str_t ngx_http_ssi_none = …;
static ngx_str_t ngx_http_ssi_timefmt = …;
static ngx_str_t ngx_http_ssi_null_string = …;
#define NGX_HTTP_SSI_INCLUDE_VIRTUAL …
#define NGX_HTTP_SSI_INCLUDE_FILE …
#define NGX_HTTP_SSI_INCLUDE_WAIT …
#define NGX_HTTP_SSI_INCLUDE_SET …
#define NGX_HTTP_SSI_INCLUDE_STUB …
#define NGX_HTTP_SSI_ECHO_VAR …
#define NGX_HTTP_SSI_ECHO_DEFAULT …
#define NGX_HTTP_SSI_ECHO_ENCODING …
#define NGX_HTTP_SSI_CONFIG_ERRMSG …
#define NGX_HTTP_SSI_CONFIG_TIMEFMT …
#define NGX_HTTP_SSI_SET_VAR …
#define NGX_HTTP_SSI_SET_VALUE …
#define NGX_HTTP_SSI_IF_EXPR …
#define NGX_HTTP_SSI_BLOCK_NAME …
static ngx_http_ssi_param_t ngx_http_ssi_include_params[] = …;
static ngx_http_ssi_param_t ngx_http_ssi_echo_params[] = …;
static ngx_http_ssi_param_t ngx_http_ssi_config_params[] = …;
static ngx_http_ssi_param_t ngx_http_ssi_set_params[] = …;
static ngx_http_ssi_param_t ngx_http_ssi_if_params[] = …;
static ngx_http_ssi_param_t ngx_http_ssi_block_params[] = …;
static ngx_http_ssi_param_t ngx_http_ssi_no_params[] = …;
static ngx_http_ssi_command_t ngx_http_ssi_commands[] = …;
static ngx_http_variable_t ngx_http_ssi_vars[] = …;
static ngx_int_t
ngx_http_ssi_header_filter(ngx_http_request_t *r)
{ … }
static ngx_int_t
ngx_http_ssi_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
{ … }
static ngx_int_t
ngx_http_ssi_output(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
{ … }
static void
ngx_http_ssi_buffered(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
{ … }
static ngx_int_t
ngx_http_ssi_parse(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
{ … }
static ngx_str_t *
ngx_http_ssi_get_variable(ngx_http_request_t *r, ngx_str_t *name,
ngx_uint_t key)
{ … }
static ngx_int_t
ngx_http_ssi_evaluate_string(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t *text, ngx_uint_t flags)
{ … }
static ngx_int_t
ngx_http_ssi_regex_match(ngx_http_request_t *r, ngx_str_t *pattern,
ngx_str_t *str)
{ … }
static ngx_int_t
ngx_http_ssi_include(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_stub_output(ngx_http_request_t *r, void *data, ngx_int_t rc)
{ … }
static ngx_int_t
ngx_http_ssi_set_variable(ngx_http_request_t *r, void *data, ngx_int_t rc)
{ … }
static ngx_int_t
ngx_http_ssi_echo(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_config(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_set(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_if(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_else(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_endif(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_block(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_endblock(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{ … }
static ngx_int_t
ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t gmt)
{ … }
static ngx_int_t
ngx_http_ssi_preconfiguration(ngx_conf_t *cf)
{ … }
static void *
ngx_http_ssi_create_main_conf(ngx_conf_t *cf)
{ … }
static char *
ngx_http_ssi_init_main_conf(ngx_conf_t *cf, void *conf)
{ … }
static void *
ngx_http_ssi_create_loc_conf(ngx_conf_t *cf)
{ … }
static char *
ngx_http_ssi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
{ … }
static ngx_int_t
ngx_http_ssi_filter_init(ngx_conf_t *cf)
{ … }