1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) Nginx, Inc. 5 */ 6 7 8 #ifndef _NGX_HTTP_SSI_FILTER_H_INCLUDED_ 9 #define _NGX_HTTP_SSI_FILTER_H_INCLUDED_ 10 11 12 #include <ngx_config.h> 13 #include <ngx_core.h> 14 #include <ngx_http.h> 15 16 17 #define NGX_HTTP_SSI_MAX_PARAMS 16 18 19 #define NGX_HTTP_SSI_COMMAND_LEN 32 20 #define NGX_HTTP_SSI_PARAM_LEN 32 21 #define NGX_HTTP_SSI_PARAMS_N 4 22 23 24 #define NGX_HTTP_SSI_COND_IF 1 25 #define NGX_HTTP_SSI_COND_ELSE 2 26 27 28 #define NGX_HTTP_SSI_NO_ENCODING 0 29 #define NGX_HTTP_SSI_URL_ENCODING 1 30 #define NGX_HTTP_SSI_ENTITY_ENCODING 2 31 32 33 typedef struct { 34 ngx_hash_t hash; 35 ngx_hash_keys_arrays_t commands; 36 } ngx_http_ssi_main_conf_t; 37 38 39 typedef struct { 40 ngx_buf_t *buf; 41 42 u_char *pos; 43 u_char *copy_start; 44 u_char *copy_end; 45 46 ngx_uint_t key; 47 ngx_str_t command; 48 ngx_array_t params; 49 ngx_table_elt_t *param; 50 ngx_table_elt_t params_array[NGX_HTTP_SSI_PARAMS_N]; 51 52 ngx_chain_t *in; 53 ngx_chain_t *out; 54 ngx_chain_t **last_out; 55 ngx_chain_t *busy; 56 ngx_chain_t *free; 57 58 ngx_uint_t state; 59 ngx_uint_t saved_state; 60 size_t saved; 61 size_t looked; 62 63 size_t value_len; 64 65 ngx_list_t *variables; 66 ngx_array_t *blocks; 67 68 #if (NGX_PCRE) 69 ngx_uint_t ncaptures; 70 int *captures; 71 u_char *captures_data; 72 #endif 73 74 unsigned conditional:2; 75 unsigned encoding:2; 76 unsigned block:1; 77 unsigned output:1; 78 unsigned output_chosen:1; 79 80 ngx_http_request_t *wait; 81 void *value_buf; 82 ngx_str_t timefmt; 83 ngx_str_t errmsg; 84 } ngx_http_ssi_ctx_t; 85 86 87 typedef ngx_int_t (*ngx_http_ssi_command_pt) (ngx_http_request_t *r, 88 ngx_http_ssi_ctx_t *ctx, ngx_str_t **); 89 90 91 typedef struct { 92 ngx_str_t name; 93 ngx_uint_t index; 94 95 unsigned mandatory:1; 96 unsigned multiple:1; 97 } ngx_http_ssi_param_t; 98 99 100 typedef struct { 101 ngx_str_t name; 102 ngx_http_ssi_command_pt handler; 103 ngx_http_ssi_param_t *params; 104 105 unsigned conditional:2; 106 unsigned block:1; 107 unsigned flush:1; 108 } ngx_http_ssi_command_t; 109 110 111 extern ngx_module_t ngx_http_ssi_filter_module; 112 113 114 #endif /* _NGX_HTTP_SSI_FILTER_H_INCLUDED_ */ 115