annotate src/http/modules/ngx_http_ssi_filter.c @ 46:9f3205d496a0 NGINX_0_1_23

nginx 0.1.23 *) Feature: the ngx_http_ssi_filter_module and the ssi, ssi_silent_errors, and ssi_min_file_chunk directives. The 'echo var="HTTP_..." default=""' and 'echo var="REMOTE_ADDR"' commands are supported. *) Feature: the %request_time log parameter. *) Feature: if the request has no the "Host" header line, then the "proxy_preserve_host" directive set this header line to the first server name of the "server_name" directive. *) Bugfix: nginx could not be built on platforms different from i386, amd64, sparc и ppc; bug appeared in 0.1.22. *) Bugfix: the ngx_http_autoindex_module now shows the information not about the symlink, but about file or directory it points to. *) Bugfix: the %apache_length parameter logged the negative length of the response header if the no response was transferred to a client.
author Igor Sysoev <http://sysoev.ru>
date Tue, 01 Mar 2005 00:00:00 +0300
parents
children 6cfc63e68377
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 #include <ngx_http.h>
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11 #define NGX_HTTP_SSI_MAX_PARAMS 16
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13 #define NGX_HTTP_SSI_COMMAND_LEN 31
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
14 #define NGX_HTTP_SSI_PARAM_LEN 31
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
15 #define NGX_HTTP_SSI_PARAMS_N 4
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
17 #define NGX_HTTP_SSI_ERROR 1
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
18
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20 typedef struct {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
21 ngx_flag_t enable;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22 ngx_flag_t silent_errors;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24 size_t min_file_chunk;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25 size_t value_len;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26 } ngx_http_ssi_conf_t;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
29 typedef struct {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30 ngx_buf_t *buf;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32 u_char *pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33 u_char *copy_start;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34 u_char *copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 ngx_str_t command;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 ngx_array_t params;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 ngx_table_elt_t *param;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39 ngx_table_elt_t params_array[NGX_HTTP_SSI_PARAMS_N];
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 ngx_chain_t *in;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42 ngx_chain_t *out;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43 ngx_chain_t **last_out;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45 ngx_uint_t state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 ngx_uint_t saved_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 size_t saved;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48 size_t looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 size_t value_len;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 } ngx_http_ssi_ctx_t;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
54 typedef ngx_int_t (*ngx_http_ssi_command_pt) (ngx_http_request_t *r,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55 ngx_http_ssi_ctx_t *ctx, ngx_str_t **);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58 typedef struct {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59 ngx_str_t name;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60 ngx_uint_t index;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
61
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
62 ngx_uint_t mandatory;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63 } ngx_http_ssi_param_t;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
64
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
65
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
66 typedef struct {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
67 ngx_str_t name;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
68 ngx_http_ssi_command_pt handler;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
69 ngx_http_ssi_param_t *params;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
70
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
71 ngx_uint_t flush; /* unsigned flush:1; */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72 } ngx_http_ssi_command_t;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
73
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
75 typedef enum {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76 ssi_start_state = 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
77 ssi_tag_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
78 ssi_comment0_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
79 ssi_comment1_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
80 ssi_sharp_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81 ssi_precommand_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
82 ssi_command_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
83 ssi_preparam_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
84 ssi_param_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85 ssi_preequal_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86 ssi_prevalue_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
87 ssi_double_quoted_value_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88 ssi_quoted_value_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
89 ssi_quoted_symbol_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
90 ssi_postparam_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
91 ssi_comment_end0_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
92 ssi_comment_end1_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
93 ssi_error_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
94 ssi_error_end0_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95 ssi_error_end1_state
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
96 } ngx_http_ssi_state_e;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
97
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
98
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
99 static ngx_int_t ngx_http_ssi_error(ngx_http_request_t *r,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
100 ngx_http_ssi_ctx_t *ctx);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
101 static ngx_int_t ngx_http_ssi_parse(ngx_http_request_t *r,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
102 ngx_http_ssi_ctx_t *ctx);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
103
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
104 static ngx_int_t ngx_http_ssi_echo(ngx_http_request_t *r,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
105 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
106
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
107 static void *ngx_http_ssi_create_conf(ngx_conf_t *cf);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
108 static char *ngx_http_ssi_merge_conf(ngx_conf_t *cf,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
109 void *parent, void *child);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
110 static ngx_int_t ngx_http_ssi_filter_init(ngx_cycle_t *cycle);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
111
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
112
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
113 static ngx_command_t ngx_http_ssi_filter_commands[] = {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
114
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
115 { ngx_string("ssi"),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
116 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
117 ngx_conf_set_flag_slot,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
118 NGX_HTTP_LOC_CONF_OFFSET,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
119 offsetof(ngx_http_ssi_conf_t, enable),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
120 NULL },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
122 { ngx_string("ssi_silent_errors"),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
123 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
124 ngx_conf_set_flag_slot,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
125 NGX_HTTP_LOC_CONF_OFFSET,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
126 offsetof(ngx_http_ssi_conf_t, silent_errors),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
127 NULL },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
128
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
129 { ngx_string("ssi_min_file_chunk"),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
130 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
131 ngx_conf_set_size_slot,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
132 NGX_HTTP_LOC_CONF_OFFSET,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
133 offsetof(ngx_http_ssi_conf_t, min_file_chunk),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
134 NULL },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
135
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
136 ngx_null_command
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
137 };
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
138
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
139
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
140
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
141 static ngx_http_module_t ngx_http_ssi_filter_module_ctx = {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
142 NULL, /* pre conf */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
143
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
144 NULL, /* create main configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
145 NULL, /* init main configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
146
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
147 NULL, /* create server configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
148 NULL, /* merge server configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
149
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
150 ngx_http_ssi_create_conf, /* create location configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
151 ngx_http_ssi_merge_conf /* merge location configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
152 };
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
153
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
154
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
155 ngx_module_t ngx_http_ssi_filter_module = {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
156 NGX_MODULE,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
157 &ngx_http_ssi_filter_module_ctx, /* module context */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
158 ngx_http_ssi_filter_commands, /* module directives */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
159 NGX_HTTP_MODULE, /* module type */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
160 ngx_http_ssi_filter_init, /* init module */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
161 NULL /* init child */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
162 };
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
163
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
164
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
165 static ngx_int_t (*ngx_http_next_header_filter) (ngx_http_request_t *r);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
166 static ngx_int_t (*ngx_http_next_body_filter) (ngx_http_request_t *r,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
167 ngx_chain_t *in);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
168
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
169
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
170 static u_char ngx_http_ssi_string[] = "<!--";
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
171 static u_char ngx_http_ssi_error_string[] =
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
172 "[an error occurred while processing the directive]";
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
173
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
174 static ngx_str_t ngx_http_ssi_none = ngx_string("(none)");
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
175
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
176
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
177 #define NGX_HTTP_SSI_ECHO_VAR 0
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
178 #define NGX_HTTP_SSI_ECHO_DEFAULT 1
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
179
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
180 static ngx_http_ssi_param_t ngx_http_ssi_echo_params[] = {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
181 { ngx_string("var"), NGX_HTTP_SSI_ECHO_VAR, 1 },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
182 { ngx_string("default"), NGX_HTTP_SSI_ECHO_DEFAULT, 0 },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
183 { ngx_null_string, 0, 0 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
184 };
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
185
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
186
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
187 static ngx_http_ssi_command_t ngx_http_ssi_commands[] = {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
188 { ngx_string("echo"), ngx_http_ssi_echo, ngx_http_ssi_echo_params, 0 },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
189 { ngx_null_string, NULL, NULL, 0 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
190 };
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
191
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
192
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
193 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
194 ngx_http_ssi_header_filter(ngx_http_request_t *r)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
195 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
196 ngx_http_ssi_ctx_t *ctx;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
197 ngx_http_ssi_conf_t *conf;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
198
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
199 conf = ngx_http_get_module_loc_conf(r, ngx_http_ssi_filter_module);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
200
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
201 if (!conf->enable) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
202 return ngx_http_next_header_filter(r);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
203 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
204
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
205 /* TODO: "text/html" -> custom types */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
206
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
207 if (r->headers_out.content_type
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
208 && ngx_strncasecmp(r->headers_out.content_type->value.data,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
209 "text/html", 5) != 0)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
210 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
211 return ngx_http_next_header_filter(r);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
212 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
213
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
214
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
215 if (!(ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_ssi_ctx_t)))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
216 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
217 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
218
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
219 ngx_http_set_ctx(r, ctx, ngx_http_ssi_filter_module);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
220
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
221
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
222 ctx->value_len = conf->value_len;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
223 ctx->last_out = &ctx->out;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
224
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
225 ctx->params.elts = ctx->params_array;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
226 ctx->params.size = sizeof(ngx_table_elt_t);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
227 ctx->params.nalloc = NGX_HTTP_SSI_PARAMS_N;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
228 ctx->params.pool = r->pool;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
229
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
230 r->headers_out.content_length_n = -1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
231 if (r->headers_out.content_length) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
232 r->headers_out.content_length->key.len = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
233 r->headers_out.content_length = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
234 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
235
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
236 r->headers_out.last_modified_time = -1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
237 if (r->headers_out.last_modified) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
238 r->headers_out.last_modified->key.len = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
239 r->headers_out.last_modified = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
240 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
241
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
242 r->filter_need_in_memory = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
243 r->filter_ssi_need_in_memory = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
244
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
245 return ngx_http_next_header_filter(r);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
246 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
247
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
248
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
249 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
250 ngx_http_ssi_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
251 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
252 ngx_int_t rc;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
253 ngx_uint_t i;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
254 ngx_buf_t *b;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
255 ngx_chain_t *cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
256 ngx_table_elt_t *param;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
257 ngx_http_ssi_ctx_t *ctx;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
258 ngx_http_ssi_conf_t *conf;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
259 ngx_http_ssi_param_t *prm;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
260 ngx_http_ssi_command_t *cmd;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
261 ngx_str_t *params[NGX_HTTP_SSI_MAX_PARAMS];
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
262
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
263 ctx = ngx_http_get_module_ctx(r, ngx_http_ssi_filter_module);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
264
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
265 if (ctx == NULL || (in == NULL && ctx->in == NULL)) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
266 return ngx_http_next_body_filter(r, in);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
267 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
268
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
269 /* add the incoming chain to the chain ctx->in */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
270
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
271 if (in) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
272 if (ngx_chain_add_copy(r->pool, &ctx->in, in) == NGX_ERROR) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
273 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
274 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
275 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
276
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
277 conf = ngx_http_get_module_loc_conf(r, ngx_http_ssi_filter_module);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
278
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
279 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
280 "http ssi filter");
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
281
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
282 b = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
283
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
284 while (ctx->in) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
285
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
286 ctx->buf = ctx->in->buf;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
287 ctx->in = ctx->in->next;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
288 ctx->pos = ctx->buf->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
289
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
290 if (ctx->state == ssi_start_state) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
291 ctx->copy_start = ctx->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
292 ctx->copy_end = ctx->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
293 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
294
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
295 while (ctx->pos < ctx->buf->last) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
296
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
297 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
298 "saved: %d state: %d", ctx->saved, ctx->state);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
299
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
300 rc = ngx_http_ssi_parse(r, ctx);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
301
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
302 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
303 "parse: %d, looked: %d %p-%p",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
304 rc, ctx->looked, ctx->copy_start, ctx->copy_end);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
305
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
306 if (rc == NGX_ERROR) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
307 return rc;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
308 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
309
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
310 if (ctx->copy_start != ctx->copy_end) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
311
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
312 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
313 "saved: %d", ctx->saved);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
314
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
315 if (ctx->saved) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
316 if (!(b = ngx_calloc_buf(r->pool))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
317 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
318 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
319
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
320 b->memory = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
321 b->pos = ngx_http_ssi_string;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
322 b->last = ngx_http_ssi_string + ctx->saved;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
323
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
324 if (!(cl = ngx_alloc_chain_link(r->pool))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
325 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
326 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
327
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
328 cl->buf = b;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
329 *ctx->last_out = cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
330 ctx->last_out = &cl->next;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
331
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
332 ctx->saved = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
333 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
334
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
335 if (!(b = ngx_calloc_buf(r->pool))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
336 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
337 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
338
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
339 ngx_memcpy(b, ctx->buf, sizeof(ngx_buf_t));
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
340
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
341 b->last_buf = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
342 b->pos = ctx->copy_start;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
343 b->last = ctx->copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
344
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
345 if (b->in_file) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
346
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
347 if (conf->min_file_chunk < (size_t) (b->last - b->pos)) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
348 b->file_last = b->file_pos + (b->last - b->start);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
349 b->file_pos += b->pos - b->start;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
350
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
351 } else {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
352 b->in_file = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
353 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
354 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
355
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
356 if (!(cl = ngx_alloc_chain_link(r->pool))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
357 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
358 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
359
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
360 cl->buf = b;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
361 cl->next = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
362 *ctx->last_out = cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
363 ctx->last_out = &cl->next;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
364 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
365
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
366 if (ctx->state == ssi_start_state) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
367 ctx->copy_start = ctx->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
368 ctx->copy_end = ctx->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
369
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
370 } else {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
371 ctx->copy_start = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
372 ctx->copy_end = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
373 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
374
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
375 if (rc == NGX_AGAIN) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
376 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
377 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
378
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
379
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
380 if (rc == NGX_OK) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
381
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
382 for (cmd = ngx_http_ssi_commands; cmd->handler; cmd++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
383 if (cmd->name.len == 0) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
384 cmd = (ngx_http_ssi_command_t *) cmd->handler;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
385 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
386
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
387 if (cmd->name.len != ctx->command.len
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
388 || ngx_strncmp(cmd->name.data, ctx->command.data,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
389 ctx->command.len) != 0)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
390 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
391 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
392 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
393
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
394 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
395 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
396
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
397 if (cmd->name.len == 0) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
398 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
399 "invalid SSI command: \"%V\"", &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
400 goto ssi_error;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
401 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
402
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
403 ngx_memzero(params,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
404 NGX_HTTP_SSI_MAX_PARAMS * sizeof(ngx_str_t *));
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
405
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
406 param = ctx->params.elts;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
407
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
408
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
409 for (i = 0; i < ctx->params.nelts; i++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
410
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
411 for (prm = cmd->params; prm->name.len; prm++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
412
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
413 if (param[i].key.len != prm->name.len
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
414 || ngx_strncmp(param[i].key.data, prm->name.data,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
415 prm->name.len) != 0)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
416 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
417 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
418 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
419
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
420 if (params[prm->index]) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
421 ngx_log_error(NGX_LOG_ERR,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
422 r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
423 "duplicate \"%V\" parameter "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
424 "in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
425 &param[i].key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
426
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
427 goto ssi_error;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
428 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
429
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
430 params[prm->index] = &param[i].value;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
431
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
432 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
433 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
434
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
435 if (prm->name.len == 0) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
436 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
437 "invalid parameter name: \"%V\" "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
438 "in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
439 &param[i].key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
440
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
441 goto ssi_error;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
442 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
443 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
444
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
445 for (prm = cmd->params; prm->name.len; prm++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
446 if (prm->mandatory && params[prm->index] == 0) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
447 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
448 "mandatory \"%V\" parameter is absent "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
449 "in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
450 &prm->name, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
451
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
452 goto ssi_error;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
453 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
454 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
455
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
456 if (cmd->handler(r, ctx, params) == NGX_OK) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
457 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
458 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
459 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
460
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
461
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
462 /* rc == NGX_HTTP_SSI_ERROR */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
463
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
464 ssi_error:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
465
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
466 if (conf->silent_errors) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
467 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
468 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
469
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
470 if (!(b = ngx_calloc_buf(r->pool))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
471 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
472 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
473
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
474 b->memory = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
475 b->pos = ngx_http_ssi_error_string;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
476 b->last = ngx_http_ssi_error_string
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
477 + sizeof(ngx_http_ssi_error_string) - 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
478
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
479 if (!(cl = ngx_alloc_chain_link(r->pool))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
480 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
481 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
482
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
483 cl->buf = b;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
484 cl->next = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
485 *ctx->last_out = cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
486 ctx->last_out = &cl->next;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
487
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
488 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
489 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
490
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
491 ctx->buf->pos = ctx->buf->last;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
492
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
493 if (b && ctx->buf->last_buf) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
494 b->last_buf = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
495 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
496
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
497 ctx->saved = ctx->looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
498 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
499
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
500 if (ctx->out == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
501 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
502 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
503
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
504 rc = ngx_http_next_body_filter(r, ctx->out);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
505
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
506 ctx->out = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
507 ctx->last_out = &ctx->out;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
508
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
509 return rc;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
510 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
511
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
512
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
513 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
514 ngx_http_ssi_parse(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
515 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
516 u_char *p, *last, *copy_end, ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
517 size_t looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
518 ngx_http_ssi_state_e state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
519
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
520 state = ctx->state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
521 looked = ctx->looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
522 last = ctx->buf->last;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
523 copy_end = ctx->copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
524
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
525 for (p = ctx->pos; p < last; p++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
526
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
527 ch = *p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
528
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
529 if (state == ssi_start_state) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
530
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
531 /* the tight loop */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
532
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
533 for ( /* void */ ; p < last; ch = *(++p)) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
534 if (ch != '<') {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
535 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
536 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
537
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
538 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
539 looked = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
540 state = ssi_tag_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
541
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
542 goto tag_started;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
543 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
544
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
545 ctx->pos = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
546 ctx->looked = looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
547 ctx->copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
548
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
549 if (ctx->copy_start == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
550 ctx->copy_start = ctx->buf->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
551 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
552
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
553 return NGX_AGAIN;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
554
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
555 tag_started:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
556 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
557 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
558
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
559 switch (state) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
560
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
561 case ssi_start_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
562 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
563
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
564 case ssi_tag_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
565 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
566 case '!':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
567 looked = 2;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
568 state = ssi_comment0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
569 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
570
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
571 case '<':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
572 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
573 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
574
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
575 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
576 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
577 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
578 state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
579 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
580 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
581
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
582 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
583
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
584 case ssi_comment0_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
585 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
586 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
587 looked = 3;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
588 state = ssi_comment1_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
589 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
590
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
591 case '<':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
592 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
593 looked = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
594 state = ssi_tag_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
595 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
596
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
597 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
598 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
599 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
600 state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
601 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
602 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
603
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
604 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
605
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
606 case ssi_comment1_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
607 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
608 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
609 looked = 4;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
610 state = ssi_sharp_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
611 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
612
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
613 case '<':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
614 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
615 looked = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
616 state = ssi_tag_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
617 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
618
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
619 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
620 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
621 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
622 state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
623 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
624 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
625
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
626 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
627
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
628 case ssi_sharp_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
629 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
630 case '#':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
631 if (ctx->copy_start) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
632 ctx->saved = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
633 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
634 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
635 state = ssi_precommand_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
636 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
637
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
638 case '<':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
639 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
640 looked = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
641 state = ssi_tag_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
642 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
643
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
644 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
645 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
646 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
647 state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
648 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
649 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
650
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
651 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
652
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
653 case ssi_precommand_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
654 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
655 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
656 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
657 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
658 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
659 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
660
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
661 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
662 ctx->command.len = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
663 ctx->command.data = ngx_palloc(r->pool,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
664 NGX_HTTP_SSI_COMMAND_LEN + 1);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
665 if (ctx->command.data == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
666 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
667 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
668
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
669 ctx->command.data[0] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
670 ctx->params.nelts = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
671 state = ssi_command_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
672 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
673 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
674
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
675 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
676
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
677 case ssi_command_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
678 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
679 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
680 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
681 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
682 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
683 state = ssi_preparam_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
684 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
685
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
686 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
687 state = ssi_comment_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
688 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
689
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
690 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
691 ctx->command.data[ctx->command.len++] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
692
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
693 if (ctx->command.len == NGX_HTTP_SSI_COMMAND_LEN) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
694 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
695 "the \"%V\" SSI command is too long",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
696 &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
697
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
698 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
699 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
700 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
701 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
702
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
703 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
704
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
705 case ssi_preparam_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
706 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
707 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
708 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
709 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
710 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
711 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
712
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
713 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
714 state = ssi_comment_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
715 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
716
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
717 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
718 if (!(ctx->param = ngx_array_push(&ctx->params))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
719 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
720 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
721
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
722 ctx->param->key.len = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
723 ctx->param->key.data = ngx_palloc(r->pool,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
724 NGX_HTTP_SSI_PARAM_LEN + 1);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
725 if (ctx->param->key.data == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
726 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
727 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
728
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
729 ctx->param->key.data[0] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
730
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
731 ctx->param->value.len = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
732 ctx->param->value.data = ngx_palloc(r->pool,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
733 ctx->value_len + 1);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
734 if (ctx->param->value.data == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
735 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
736 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
737
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
738 state = ssi_param_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
739 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
740 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
741
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
742 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
743
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
744 case ssi_param_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
745 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
746 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
747 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
748 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
749 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
750 state = ssi_preequal_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
751 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
752
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
753 case '=':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
754 state = ssi_prevalue_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
755 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
756
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
757 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
758 state = ssi_error_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
759
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
760 ctx->param->key.data[ctx->param->key.len++] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
761 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
762 "invalid \"%V\" parameter in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
763 &ctx->param->key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
764 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
765
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
766 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
767 ctx->param->key.data[ctx->param->key.len++] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
768
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
769 if (ctx->param->key.len == NGX_HTTP_SSI_PARAM_LEN) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
770 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
771 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
772 "too long \"%V\" parameter in "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
773 "\"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
774 &ctx->param->key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
775 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
776 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
777 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
778
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
779 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
780
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
781 case ssi_preequal_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
782 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
783 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
784 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
785 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
786 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
787 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
788
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
789 case '=':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
790 state = ssi_prevalue_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
791 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
792
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
793 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
794 if (ch == '-') {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
795 state = ssi_error_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
796 } else {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
797 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
798 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
799
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
800 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
801 "unexpected \"%c\" symbol after \"%V\" "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
802 "parameter in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
803 ch, &ctx->param->key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
804 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
805 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
806
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
807 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
808
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
809 case ssi_prevalue_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
810 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
811 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
812 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
813 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
814 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
815 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
816
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
817 case '"':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
818 state = ssi_double_quoted_value_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
819 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
820
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
821 case '\'':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
822 state = ssi_quoted_value_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
823 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
824
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
825 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
826 if (ch == '-') {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
827 state = ssi_error_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
828 } else {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
829 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
830 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
831
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
832 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
833 "unexpected \"%c\" symbol before value of "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
834 "\"%V\" parameter in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
835 ch, &ctx->param->key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
836 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
837 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
838
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
839 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
840
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
841 case ssi_double_quoted_value_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
842 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
843 case '\\':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
844 ctx->saved_state = ssi_double_quoted_value_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
845 state = ssi_quoted_symbol_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
846 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
847
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
848 case '"':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
849 state = ssi_postparam_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
850 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
851
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
852 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
853 ctx->param->value.data[ctx->param->value.len++] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
854
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
855 if (ctx->param->value.len == ctx->value_len) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
856 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
857 "too long \"%V\" value of \"%V\" parameter "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
858 "in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
859 &ctx->param->value, &ctx->param->key,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
860 &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
861 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
862 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
863 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
864 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
865
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
866 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
867
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
868 case ssi_quoted_value_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
869 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
870 case '\\':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
871 ctx->saved_state = ssi_quoted_value_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
872 state = ssi_quoted_symbol_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
873 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
874
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
875 case '\'':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
876 state = ssi_postparam_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
877 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
878
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
879 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
880 ctx->param->value.data[ctx->param->value.len++] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
881
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
882 if (ctx->param->value.len == ctx->value_len) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
883 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
884 "too long \"%V\" value of \"%V\" parameter "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
885 "in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
886 &ctx->param->value, &ctx->param->key,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
887 &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
888 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
889 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
890 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
891 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
892
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
893 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
894
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
895 case ssi_quoted_symbol_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
896 ctx->param->value.data[ctx->param->value.len++] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
897
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
898 if (ctx->param->value.len == ctx->value_len) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
899 if (ctx->param->value.len == ctx->value_len) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
900 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
901 "too long \"%V\" value of \"%V\" parameter "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
902 "in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
903 &ctx->param->value, &ctx->param->key,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
904 &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
905 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
906 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
907 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
908 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
909
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
910 state = ctx->saved_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
911 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
912
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
913 case ssi_postparam_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
914 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
915 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
916 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
917 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
918 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
919 state = ssi_preparam_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
920 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
921
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
922 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
923 state = ssi_comment_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
924 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
925
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
926 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
927 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
928 "unexpected \"%c\" symbol after \"%V\" value "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
929 "of \"%V\" parameter in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
930 ch, &ctx->param->value, &ctx->param->key,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
931 &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
932 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
933 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
934 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
935
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
936 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
937
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
938 case ssi_comment_end0_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
939 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
940 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
941 state = ssi_comment_end1_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
942 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
943
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
944 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
945 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
946 "unexpected \"%c\" symbol in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
947 ch, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
948 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
949 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
950 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
951
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
952 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
953
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
954 case ssi_comment_end1_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
955 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
956 case '>':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
957 ctx->state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
958 ctx->pos = p + 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
959 ctx->looked = looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
960 ctx->copy_end = copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
961
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
962 if (ctx->copy_start == NULL && copy_end) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
963 ctx->copy_start = ctx->buf->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
964 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
965
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
966 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
967
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
968 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
969 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
970 "unexpected \"%c\" symbol in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
971 ch, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
972 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
973 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
974 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
975
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
976 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
977
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
978 case ssi_error_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
979 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
980 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
981 state = ssi_error_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
982 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
983
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
984 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
985 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
986 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
987
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
988 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
989
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
990 case ssi_error_end0_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
991 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
992 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
993 state = ssi_error_end1_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
994 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
995
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
996 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
997 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
998 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
999 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1000
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1001 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1002
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1003 case ssi_error_end1_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1004 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1005 case '>':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1006 ctx->state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1007 ctx->pos = p + 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1008 ctx->looked = looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1009 ctx->copy_end = copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1010
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1011 if (ctx->copy_start == NULL && copy_end) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1012 ctx->copy_start = ctx->buf->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1013 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1014
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1015 return NGX_HTTP_SSI_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1016
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1017 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1018 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1019 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1020 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1021
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1022 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1023 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1024 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1025
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1026 ctx->state = state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1027 ctx->pos = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1028 ctx->looked = looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1029
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1030 ctx->copy_end = (state == ssi_start_state) ? p : copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1031
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1032 if (ctx->copy_start == NULL && ctx->copy_end) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1033 ctx->copy_start = ctx->buf->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1034 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1035
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1036 return NGX_AGAIN;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1037 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1038
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1039
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1040 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1041 ngx_http_ssi_echo(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1042 ngx_str_t **params)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1043 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1044 u_char ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1045 ngx_uint_t i, n;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1046 ngx_buf_t *b;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1047 ngx_str_t *var, *value;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1048 ngx_chain_t *cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1049 ngx_list_part_t *part;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1050 ngx_table_elt_t *header;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1051
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1052 var = params[NGX_HTTP_SSI_ECHO_VAR];
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1053 value = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1054
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1055 if (var->len > 5 && ngx_strncmp(var->data, "HTTP_", 5) == 0) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1056
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1057 part = &r->headers_in.headers.part;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1058 header = part->elts;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1059
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1060 for (i = 0; /* void */ ; i++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1061
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1062 if (i >= part->nelts) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1063 if (part->next == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1064 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1065 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1066
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1067 part = part->next;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1068 header = part->elts;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1069 i = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1070 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1071
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1072 for (n = 0; n + 5 < var->len && n < header[i].key.len; n++)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1073 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1074 ch = header[i].key.data[n];
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1075
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1076 if (ch >= 'a' && ch <= 'z') {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1077 ch &= ~0x20;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1078
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1079 } else if (ch == '-') {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1080 ch = '_';
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1081 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1082
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1083 if (var->data[n + 5] != ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1084 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1085 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1086 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1087
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1088 if (n + 5 == var->len) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1089 value = &header[i].value;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1090 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1091 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1092 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1093
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1094 } else if (var->len == sizeof("REMOTE_ADDR") - 1
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1095 && ngx_strncmp(var->data, "REMOTE_ADDR",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1096 sizeof("REMOTE_ADDR") - 1) == 0)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1097 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1098 value = &r->connection->addr_text;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1099 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1100
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1101
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1102 if (value == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1103 value = params[NGX_HTTP_SSI_ECHO_DEFAULT];
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1104 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1105
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1106 if (value == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1107 value = &ngx_http_ssi_none;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1108
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1109 } else if (value->len == 0) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1110 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1111 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1112
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1113 if (!(b = ngx_calloc_buf(r->pool))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1114 return NGX_HTTP_SSI_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1115 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1116
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1117 if (!(cl = ngx_alloc_chain_link(r->pool))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1118 return NGX_HTTP_SSI_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1119 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1120
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1121 b->memory = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1122 b->pos = value->data;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1123 b->last = value->data + value->len;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1124
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1125 cl->buf = b;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1126 cl->next = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1127 *ctx->last_out = cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1128 ctx->last_out = &cl->next;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1129
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1130 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1131 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1132
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1133
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1134 static void *
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1135 ngx_http_ssi_create_conf(ngx_conf_t *cf)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1136 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1137 ngx_http_ssi_conf_t *conf;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1138
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1139 if (!(conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_ssi_conf_t)))) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1140 return NGX_CONF_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1141 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1142
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1143 conf->enable = NGX_CONF_UNSET;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1144 conf->silent_errors = NGX_CONF_UNSET;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1145
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1146 conf->min_file_chunk = NGX_CONF_UNSET_SIZE;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1147 conf->value_len = NGX_CONF_UNSET_SIZE;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1148
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1149 return conf;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1150 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1151
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1152
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1153 static char *
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1154 ngx_http_ssi_merge_conf(ngx_conf_t *cf, void *parent, void *child)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1155 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1156 ngx_http_ssi_conf_t *prev = parent;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1157 ngx_http_ssi_conf_t *conf = child;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1158
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1159 ngx_conf_merge_value(conf->enable, prev->enable, 0);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1160 ngx_conf_merge_value(conf->silent_errors, prev->silent_errors, 0);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1161
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1162 ngx_conf_merge_size_value(conf->min_file_chunk, prev->min_file_chunk, 1024);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1163 ngx_conf_merge_size_value(conf->value_len, prev->value_len, 256);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1164
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1165 return NGX_CONF_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1166 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1167
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1168
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1169 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1170 ngx_http_ssi_filter_init(ngx_cycle_t *cycle)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1171 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1172 ngx_http_next_header_filter = ngx_http_top_header_filter;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1173 ngx_http_top_header_filter = ngx_http_ssi_header_filter;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1174
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1175 ngx_http_next_body_filter = ngx_http_top_body_filter;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1176 ngx_http_top_body_filter = ngx_http_ssi_body_filter;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1177
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1178 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1179 }